коды ошибок

Windows

Коды ошибок PostgreSQL — полная расшифровка на русском

  • Рискбез риска
  • Свежестьсверено 28.09.2026
  • Чтение8 мин

Коротко

  1. 01

    Код ошибки PostgreSQL — пятисимвольный SQLSTATE (например, 23505); произвольное число вида «8000» — это не он.

  2. 02

    Главная причина большинства — нарушение ограничений (23xxx), синтаксис (42xxx) или нехватка ресурсов (53xxx).

  3. 03

    Первое действие — определить класс по первым двум символам кода, затем найти точное условие в справочнике.

  4. 04

    Останавливайтесь и восстанавливайте из резервной копии при кодах класса XX (повреждение данных).

Код ошибки PostgreSQL — это пятисимвольная строка стандарта SQLSTATE (например, 23505), которую сервер возвращает при любом нештатном завершении операции. Первые два символа — класс ошибки, последние три — конкретное условие внутри класса. Справочник ниже — по актуальному Appendix A: PostgreSQL Error Codes (действует для версий 14–18).

Если вас привёл сюда запрос про «8000 — неверный тип переданных данных» — это не код PostgreSQL. SQLSTATE всегда состоит ровно из 5 символов вида XXYYY (например, 22P02), а «8000» на 4 цифры не подходит под этот формат. Скорее всего, это сообщение другой программы — например, кассового ПО, 1С или интеграции с банком/эквайрингом. Ищите расшифровку в документации именно той программы, где оно появилось, а не в справочнике PostgreSQL.

Как читать код ошибки PostgreSQL

Каждый код — 5 символов: XXYYY, где XX — класс, YYY — подтип. Приложения должны проверять именно код, а не текст сообщения — текст меняется в зависимости от локали сервера, а код стабилен между версиями PostgreSQL.

Для каждого класса есть «базовый» код с тремя нулями (XX000) — он используется, когда класс известен, а точное условие не определено. Коды вида XXP01, XXP02 — специфичные для PostgreSQL расширения стандарта SQL, а не общий стандарт. Смотрите также: расшифровка кодов ошибок MySQL.

Класс 00 — Успешное завершение

00000

successful_completion

Операция выполнена без ошибок.

Класс 01 — Предупреждение

01000

warning

Общее предупреждение, не останавливающее выполнение запроса.

01003

null_value_eliminated_in_set_function

Агрегатная функция (SUM, AVG) проигнорировала NULL-значения в наборе.

01004

string_data_right_truncation

Строковые данные усечены при сохранении из-за ограничения длины поля.

01P01

deprecated_feature

Использована функция или синтаксис, помеченные как устаревшие в текущей версии PostgreSQL.

Класс 02 — Нет данных

02000

no_data

Запрос выполнен успешно, но не вернул ни одной строки — часто в курсорах и хранимых процедурах.

Класс 08 — Исключение соединения

08000

connection_exception

Общая ошибка подключения к серверу PostgreSQL.

08003

connection_does_not_exist

Попытка выполнить операцию по несуществующему или уже закрытому соединению.

08006

connection_failure

Соединение разорвано в процессе работы. Проверьте сетевую доступность сервера и параметры pg_hba.conf.

08001

sqlclient_unable_to_establish_sqlconnection

Клиент не смог подключиться к серверу. Проверьте хост, порт (по умолчанию 5432) и права доступа.

08004

sqlserver_rejected_establishment_of_sqlconnection

Сервер отверг подключение — например, из-за лимита max_connections или правил pg_hba.conf.

Класс 21 — Нарушение кардинальности

21000

cardinality_violation

Подзапрос вернул более одной строки там, где ожидалась ровно одна — например, при = (SELECT ...).

Класс 22 — Исключение данных

22000

data_exception

Общая ошибка при обработке данных.

22012

division_by_zero

Деление на ноль. Обрабатывается через NULLIF(denominator, 0).

22007

invalid_datetime_format

Строка не соответствует ожидаемому формату даты или времени.

22003

numeric_value_out_of_range

Число слишком велико или мало для целевого типа (например, integer при значении больше 2 147 483 647).

22001

string_data_right_truncation

Строка длиннее, чем разрешено полем типа varchar(n) или char(n).

22004

null_value_not_allowed

Поле или параметр объявлены как NOT NULL, но получено значение NULL.

22P02

invalid_text_representation

Строка не может быть преобразована в целевой тип — частая ошибка при передаче нечислового значения в числовое поле.

2201B

invalid_regular_expression

Синтаксическая ошибка в регулярном выражении.

Класс 23 — Нарушение ограничений целостности

23000

integrity_constraint_violation

Общее нарушение ограничений, наложенных на таблицу.

23502

not_null_violation

Попытка записать NULL в поле с ограничением NOT NULL.

23503

foreign_key_violation

Вставка или обновление нарушает ограничение FOREIGN KEY: ссылочная строка не существует в родительской таблице.

23505

unique_violation

Вставка дублирующего значения в поле с ограничением UNIQUE или PRIMARY KEY.

23514

check_violation

Значение не удовлетворяет условию ограничения CHECK.

23P01

exclusion_violation

Нарушение ограничения EXCLUDE (взаимоисключающие значения по критерию).

Класс 25 — Неверное состояние транзакции

25000

invalid_transaction_state

Команда недопустима в текущем состоянии транзакции.

25P02

in_failed_sql_transaction

Текущая транзакция завершилась с ошибкой — выполните ROLLBACK перед следующим запросом.

25006

read_only_sql_transaction

Попытка изменить данные в транзакции с режимом READ ONLY.

Класс 28 — Неверная спецификация авторизации

28000

invalid_authorization_specification

Неверные учётные данные — обычно неверный пароль или отказ в доступе по pg_hba.conf.

28P01

invalid_password

Указан неверный пароль при аутентификации.

Класс 3D/3F — Имена базы данных и схемы

3D000

invalid_catalog_name

Указанная база данных не существует на сервере.

3F000

invalid_schema_name

Указанная схема не существует в текущей базе данных.

Класс 40 — Откат транзакции

40001

serialization_failure

Транзакция не может быть сериализована (конфликт блокировок при уровне изоляции SERIALIZABLE). Решение: повторить транзакцию.

40P01

deadlock_detected

Две транзакции заблокировали друг друга. PostgreSQL автоматически откатывает одну из них. Решение: повторить транзакцию или пересмотреть порядок блокировок.

Класс 42 — Синтаксическая ошибка или нарушение правил доступа

42601

syntax_error

Неверный синтаксис SQL-запроса.

42501

insufficient_privilege

Пользователь не имеет прав для выполнения операции. Выдайте права через GRANT.

42703

undefined_column

Столбец с таким именем не существует в указанной таблице.

42883

undefined_function

Функция с такой сигнатурой (именем и типами аргументов) не существует.

42P01

undefined_table

Таблица или представление с таким именем не существует в текущей схеме.

42804

datatype_mismatch

Операнды несовместимых типов в выражении или сравнении.

42P07

duplicate_table

Таблица или представление с таким именем уже существует.

Класс 53 — Недостаточно ресурсов

53100

disk_full

На диске недостаточно места для завершения операции.

53200

out_of_memory

Сервер исчерпал доступную оперативную память. Проверьте параметр work_mem в postgresql.conf.

53300

too_many_connections

Достигнут предел max_connections. Используйте пул соединений (PgBouncer) или увеличьте лимит.

Класс 55 — Объект не в требуемом состоянии

55006

object_in_use

Объект не может быть изменён, так как активно используется другим процессом.

55P03

lock_not_available

Не удалось получить блокировку при использовании NOWAIT.

Класс 57 — Вмешательство оператора

57014

query_canceled

Запрос отменён пользователем или через pg_cancel_backend().

57P01

admin_shutdown

Сервер остановлен командой pg_ctl stop или fast shutdown.

57P03

cannot_connect_now

Сервер запускается или восстанавливается после сбоя — временно не принимает новые соединения.

Класс XX — Внутренняя ошибка

XX000

internal_error

Ошибка внутри самого PostgreSQL. Сообщите через систему отслеживания ошибок.

XX001

data_corrupted

Повреждены данные на страницах базы данных. Требуется восстановление из резервной копии.

XX002

index_corrupted

Повреждён индекс таблицы. Попробуйте REINDEX для восстановления.

«Access violation» в pgAdmin или драйвере — это не SQLSTATE

Сообщение вида «PostgreSQL exception: access violation writing 0x0000000000000000» или «pgAdmin exception access violation» — это не код ошибки сервера, а сбой самого клиента (pgAdmin, ODBC/JDBC-драйвера) на уровне операционной системы: обращение к недопустимому адресу памяти. PostgreSQL-сервер тут не виноват — сервер продолжает работать. Обновите pgAdmin/драйвер до актуальной версии; если сбой повторяется — сообщите разработчикам pgAdmin через их трекер с точным номером версии и шагами воспроизведения.

Что делать, если ничего не помогло

  • Проверьте журнал сервера — путь задаётся параметром log_directory в postgresql.conf (по умолчанию подкаталог log в каталоге данных).
  • Получите точный код в приложении: в Python (psycopg2) — e.pgcode; в Java — e.getSQLState(); в PHP (PDO) — PDOException::getCode().
  • При повреждении данных (класс XX) — восстановите из резервной копии; регулярный pg_dump обязателен.
  • Для лимитов соединений и ресурсов — разверните пул соединений (PgBouncer) вместо простого увеличения max_connections.

Частые вопросы

журнал · 6 записей
01Что такое SQLSTATE и как его получить в приложении?

SQLSTATE — стандартный пятисимвольный код ошибки. В Python (psycopg2) — e.pgcode, в Java — e.getSQLState(), в PHP (PDO) — PDOException::getCode().

02Код «8000 — неверный тип переданных данных» — это PostgreSQL?

Нет. SQLSTATE всегда 5 символов, а «8000» — 4 цифры без буквенного класса. Это сообщение другой системы (например, кассового или банковского ПО) — ищите расшифровку в её документации.

03Что делать при ошибке 42P01 (undefined_table)?

Проверьте правильность имени таблицы и схемы. Выполните SET search_path TO имя_схемы; или используйте полное имя schema.table_name.

04Как исправить ошибку 53300 (too_many_connections)?

Используйте пул соединений — PgBouncer или pgpool-II. Временное решение — увеличить max_connections в postgresql.conf (требует перезапуска сервера), но это увеличивает потребление памяти.

05Почему возникает 40P01 (deadlock_detected)?

Две транзакции ждут ресурсы, занятые друг другом. PostgreSQL автоматически отменяет одну из них. Решение — одинаковый порядок блокировки ресурсов во всех транзакциях.

06«Access violation» в pgAdmin — сервер повреждён?

Нет, это сбой самого клиента pgAdmin или драйвера на уровне ОС, а не ошибка сервера PostgreSQL. Обновите pgAdmin до актуальной версии.

Редакция allerrorcodes.ru · обновлено 28.09.2026

Факты сверены с первоисточниками 28 сентября 2026.

Что дальше

Ещё разборы: Windows