Windows
Коды ошибок PostgreSQL — полная расшифровка на русском
- Рискбез риска
- Свежестьсверено 28.09.2026
- Чтение8 мин
Коротко
- 01
Код ошибки PostgreSQL — пятисимвольный SQLSTATE (например, 23505); произвольное число вида «8000» — это не он.
- 02
Главная причина большинства — нарушение ограничений (23xxx), синтаксис (42xxx) или нехватка ресурсов (53xxx).
- 03
Первое действие — определить класс по первым двум символам кода, затем найти точное условие в справочнике.
- 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.