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

Все SQLSTATE-коды ошибок PostgreSQL с расшифровкой на русском языке: классы 00–XX, причины возникновения и что они означают для разработчика.
Расшифровка кодов ошибок PostgreSQL Windows

Коды ошибок PostgreSQL — это пятисимвольные строки стандарта SQLSTATE, которые сервер возвращает при любом нештатном завершении операции. Первые два символа обозначают класс ошибки, последние три — конкретное условие внутри класса. Зная класс, можно понять природу проблемы даже без точного кода. Эта страница — справочник всех кодов для актуальных версий PostgreSQL 14–17.

Содержание

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

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

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

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

00000

successful_completion

УСПЕШНОЕ ЗАВЕРШЕНИЕ — операция выполнена без ошибок.

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

01000

warning

ПРЕДУПРЕЖДЕНИЕ — общее предупреждение, которое не останавливает выполнение запроса.

0100C

dynamic_result_sets_returned

ВОЗВРАЩЕНЫ ДИНАМИЧЕСКИЕ НАБОРЫ РЕЗУЛЬТАТОВ — процедура вернула больше наборов результатов, чем ожидалось.

01008

implicit_zero_bit_padding

НЕЯВНОЕ ЗАПОЛНЕНИЕ НУЛЕВОГО БИТА — битовая строка неявно дополнена нулями до нужной длины.

01003

null_value_eliminated_in_set_function

NULL-ЗНАЧЕНИЕ ИСКЛЮЧЕНО В АГРЕГАТНОЙ ФУНКЦИИ — функция типа SUM, AVG проигнорировала NULL-значения в наборе.

01007

privilege_not_granted

ПРИВИЛЕГИЯ НЕ ПРЕДОСТАВЛЕНА — попытка выдать привилегию, которой нет у выдающего пользователя.

01006

privilege_not_revoked

ПРИВИЛЕГИЯ НЕ ОТОЗВАНА — попытка отозвать привилегию, которой нет у целевого пользователя.

01004

string_data_right_truncation

УСЕЧЕНИЕ ПРАВОЙ ЧАСТИ СТРОКИ — строковые данные были усечены при сохранении из-за ограничения длины поля.

01P01

deprecated_feature

УСТАРЕВШАЯ ФУНКЦИЯ — использована функция или синтаксис, помеченные как устаревшие в текущей версии PostgreSQL.

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

02000

no_data

НЕТ ДАННЫХ — запрос выполнен успешно, но не вернул ни одной строки. Часто возникает в курсорах и хранимых процедурах.

02001

no_additional_dynamic_result_sets_returned

НЕТ ДОПОЛНИТЕЛЬНЫХ ДИНАМИЧЕСКИХ НАБОРОВ РЕЗУЛЬТАТОВ — все ожидаемые наборы результатов уже возвращены.

Класс 03 — SQL-запрос не завершён

03000

sql_statement_not_yet_complete

SQL-ЗАПРОС ЕЩЁ НЕ ЗАВЕРШЁН — запрос находится в процессе выполнения. Обычно возникает в асинхронных контекстах.

Класс 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.

08007

transaction_resolution_unknown

СТАТУС ТРАНЗАКЦИИ НЕИЗВЕСТЕН — соединение потеряно до того, как сервер подтвердил статус транзакции (зафиксирована или отменена).

08P01

protocol_violation

НАРУШЕНИЕ ПРОТОКОЛА — клиент нарушил протокол обмена сообщениями с PostgreSQL. Обычно ошибка в драйвере или библиотеке.

Класс 09 — Исключение сработавшего действия

09000

triggered_action_exception

ИСКЛЮЧЕНИЕ СРАБОТАВШЕГО ДЕЙСТВИЯ — ошибка возникла внутри триггера.

Класс 0A — Функция не поддерживается

0A000

feature_not_supported

ФУНКЦИЯ НЕ ПОДДЕРЖИВАЕТСЯ — запрошенная возможность не реализована в текущей версии PostgreSQL.

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

0B000

invalid_transaction_initiation

НЕКОРРЕКТНОЕ ИНИЦИИРОВАНИЕ ТРАНЗАКЦИИ — команда BEGIN была выполнена в недопустимом контексте.

Класс 0F — Исключение локатора

0F000

locator_exception

ИСКЛЮЧЕНИЕ ЛОКАТОРА — общая ошибка при работе с локаторами (LOB).

0F001

invalid_locator_specification

НЕДЕЙСТВИТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЛОКАТОРА — указан несуществующий или недействительный идентификатор LOB.

Класс 0L — Неверный грантодатель

0L000

invalid_grantor

НЕДЕЙСТВИТЕЛЬНЫЙ ГРАНТОДАТЕЛЬ — пользователь, пытающийся выдать привилегию, сам ею не владеет.

0LP01

invalid_grant_operation

НЕДОПУСТИМАЯ ОПЕРАЦИЯ GRANT — попытка выполнить недопустимую операцию выдачи прав.

Класс 0P — Неверная спецификация роли

0P000

invalid_role_specification

НЕДОПУСТИМАЯ СПЕЦИФИКАЦИЯ РОЛИ — указана несуществующая или недопустимая роль.

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

21000

cardinality_violation

НАРУШЕНИЕ КАРДИНАЛЬНОСТИ — подзапрос вернул более одной строки там, где ожидалась ровно одна. Например, при = (SELECT ...).

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

22000

data_exception

ИСКЛЮЧЕНИЕ ДАННЫХ — общая ошибка при обработке данных.

2202E

array_subscript_error

ОШИБКА ИНДЕКСА МАССИВА — индекс массива вышел за допустимые границы.

22021

character_not_in_repertoire

СИМВОЛ ОТСУТСТВУЕТ В РЕПЕРТУАРЕ — символ недопустим для текущей кодировки базы данных.

22008

datetime_field_overflow

ПЕРЕПОЛНЕНИЕ ПОЛЯ DATETIME — значение даты или времени вышло за допустимый диапазон.

22012

division_by_zero

ДЕЛЕНИЕ НА НОЛЬ — попытка деления на ноль. Обрабатывается через NULLIF(denominator, 0).

22005

error_in_assignment

ОШИБКА В ПРИСВАИВАНИИ — данные несовместимы с целевым типом при присваивании.

22022

indicator_overflow

ПЕРЕПОЛНЕНИЕ ИНДИКАТОРА — значение индикатора (для NULL) вышло за допустимый диапазон.

22015

interval_field_overflow

ПЕРЕПОЛНЕНИЕ ПОЛЯ INTERVAL — значение интервала превысило допустимый диапазон.

2201E

invalid_argument_for_logarithm

НЕДОПУСТИМЫЙ АРГУМЕНТ ДЛЯ ЛОГАРИФМА — передан нулевой или отрицательный аргумент в функцию ln() или log().

2201F

invalid_argument_for_power_function

НЕДОПУСТИМЫЙ АРГУМЕНТ ДЛЯ ФУНКЦИИ СТЕПЕНИ — недопустимое сочетание аргументов в функции power().

2201G

invalid_argument_for_width_bucket_function

НЕДОПУСТИМЫЙ АРГУМЕНТ ДЛЯ WIDTH_BUCKET — некорректные параметры функции width_bucket().

22018

invalid_character_value_for_cast

НЕДОПУСТИМОЕ ЗНАЧЕНИЕ ДЛЯ ПРИВЕДЕНИЯ ТИПА — строка содержит символы, несовместимые с целевым типом при CAST.

22007

invalid_datetime_format

НЕВЕРНЫЙ ФОРМАТ ДАТЫ/ВРЕМЕНИ — строка не соответствует ожидаемому формату даты или времени.

22019

invalid_escape_character

НЕДОПУСТИМЫЙ УПРАВЛЯЮЩИЙ СИМВОЛ — некорректный escape-символ в операторе LIKE.

22025

invalid_escape_sequence

НЕВЕРНАЯ ESCAPE-ПОСЛЕДОВАТЕЛЬНОСТЬ — строка содержит недопустимую escape-последовательность.

22P06

nonstandard_use_of_escape_character

НЕСТАНДАРТНОЕ ИСПОЛЬЗОВАНИЕ УПРАВЛЯЮЩЕГО СИМВОЛА — escape-символ использован нестандартным образом (специфика PostgreSQL).

22023

invalid_parameter_value

НЕДОПУСТИМОЕ ЗНАЧЕНИЕ ПАРАМЕТРА — аргумент функции содержит недопустимое значение.

2201B

invalid_regular_expression

НЕВЕРНОЕ РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ — синтаксическая ошибка в регулярном выражении.

22009

invalid_time_zone_displacement_value

НЕДОПУСТИМОЕ СМЕЩЕНИЕ ЧАСОВОГО ПОЯСА — значение UTC-смещения вышло за допустимые рамки.

22004

null_value_not_allowed

NULL-ЗНАЧЕНИЕ НЕ ДОПУСКАЕТСЯ — поле или параметр объявлены как NOT NULL, но получено значение NULL.

22002

null_value_no_indicator_parameter

NULL-ЗНАЧЕНИЕ БЕЗ ПАРАМЕТРА ИНДИКАТОРА — получено NULL при отсутствии обработчика NULL.

22003

numeric_value_out_of_range

ЧИСЛОВОЕ ЗНАЧЕНИЕ ВНЕ ДИАПАЗОНА — число слишком велико или мало для целевого типа (например, integer при значении больше 2 147 483 647).

22026

string_data_length_mismatch

НЕСООТВЕТСТВИЕ ДЛИНЫ СТРОКИ — длина строки не совпадает с ожидаемой.

22001

string_data_right_truncation

УСЕЧЕНИЕ СТРОКОВЫХ ДАННЫХ СПРАВА — строка длиннее, чем разрешено полем типа varchar(n) или char(n).

22011

substring_error

ОШИБКА ПОДСТРОКИ — некорректные аргументы функции substring().

22024

unterminated_c_string

НЕЗАВЕРШЁННАЯ C-СТРОКА — строка в стиле C не завершена нулевым байтом.

22P01

floating_point_exception

ИСКЛЮЧЕНИЕ ПЛАВАЮЩЕЙ ТОЧКИ — арифметическое исключение при работе с числами с плавающей точкой (деление на ноль, переполнение).

22P02

invalid_text_representation

НЕКОРРЕКТНОЕ ТЕКСТОВОЕ ПРЕДСТАВЛЕНИЕ — строка не может быть преобразована в целевой тип. Частая ошибка при передаче нечислового значения в числовое поле.

22P03

invalid_binary_representation

НЕКОРРЕКТНОЕ ДВОИЧНОЕ ПРЕДСТАВЛЕНИЕ — двоичные данные несовместимы с целевым типом.

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

23000

integrity_constraint_violation

НАРУШЕНИЕ ОГРАНИЧЕНИЯ ЦЕЛОСТНОСТИ — общее нарушение ограничений, наложенных на таблицу.

23502

not_null_violation

НАРУШЕНИЕ NOT NULL — попытка записать NULL в поле с ограничением NOT NULL.

23503

foreign_key_violation

НАРУШЕНИЕ ВНЕШНЕГО КЛЮЧА — вставка или обновление нарушает ограничение FOREIGN KEY: ссылочная строка не существует в родительской таблице.

23505

unique_violation

НАРУШЕНИЕ УНИКАЛЬНОСТИ — вставка дублирующего значения в поле с ограничением UNIQUE или PRIMARY KEY.

23514

check_violation

НАРУШЕНИЕ CHECK — значение не удовлетворяет условию ограничения CHECK.

Класс 24 — Неверное состояние курсора

24000

invalid_cursor_state

НЕДОПУСТИМОЕ СОСТОЯНИЕ КУРСОРА — операция с курсором выполнена в недопустимом состоянии (например, FETCH после закрытия).

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

25000

invalid_transaction_state

НЕДЕЙСТВИТЕЛЬНОЕ СОСТОЯНИЕ ТРАНЗАКЦИИ — команда недопустима в текущем состоянии транзакции.

25001

active_sql_transaction

АКТИВНАЯ SQL-ТРАНЗАКЦИЯ — команда требует отсутствия активной транзакции.

25P01

no_active_sql_transaction

НЕТ АКТИВНОЙ SQL-ТРАНЗАКЦИИ — команда COMMIT или ROLLBACK без предшествующего BEGIN.

25P02

in_failed_sql_transaction

В УПАВШЕЙ SQL-ТРАНЗАКЦИИ — текущая транзакция завершилась с ошибкой; выполните ROLLBACK перед следующим запросом.

25006

read_only_sql_transaction

SQL-ТРАНЗАКЦИЯ ТОЛЬКО ДЛЯ ЧТЕНИЯ — попытка изменить данные в транзакции с режимом READ ONLY.

Класс 26 — Неверное имя SQL-оператора

26000

invalid_sql_statement_name

НЕДОПУСТИМОЕ ИМЯ SQL-ОПЕРАТОРА — обращение к подготовленному оператору с несуществующим именем.

Класс 27 — Нарушение правил изменения данных триггером

27000

triggered_data_change_violation

НАРУШЕНИЕ ПРАВИЛ ИЗМЕНЕНИЯ ДАННЫХ ТРИГГЕРОМ — триггер пытается изменить данные в нарушение установленных правил.

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

28000

invalid_authorization_specification

НЕДОПУСТИМАЯ СПЕЦИФИКАЦИЯ АВТОРИЗАЦИИ — неверные учётные данные. Обычно означает неверный пароль или отказ в доступе по pg_hba.conf.

Класс 2B — Зависимые дескрипторы привилегий существуют

2BP01

dependent_objects_still_exist

ЗАВИСИМЫЕ ОБЪЕКТЫ ВСЁ ЕЩЁ СУЩЕСТВУЮТ — попытка удалить роль или объект, от которого зависят другие объекты базы данных.

Класс 2D — Некорректное завершение транзакции

2D000

invalid_transaction_termination

НЕКОРРЕКТНОЕ ЗАВЕРШЕНИЕ ТРАНЗАКЦИИ — COMMIT или ROLLBACK в контексте, где они недопустимы.

Класс 2F — Исключение SQL-процедуры

2F002

modifying_sql_data_not_permitted

ИЗМЕНЕНИЕ SQL-ДАННЫХ ЗАПРЕЩЕНО — процедура пытается изменить данные там, где это запрещено.

2F003

prohibited_sql_statement_attempted

ПОПЫТКА ЗАПРЕЩЁННОГО SQL-ОПЕРАТОРА — процедура пытается выполнить запрещённый оператор.

Класс 34 — Неверное имя курсора

34000

invalid_cursor_name

НЕДОПУСТИМОЕ ИМЯ КУРСОРА — обращение к несуществующему или недопустимому курсору.

Класс 38 — Исключение внешней процедуры

38001

containing_sql_not_permitted

SQL В ЭТОМ КОНТЕКСТЕ ЗАПРЕЩЁН — внешняя функция не может содержать SQL-операторы.

Класс 39 — Исключение вызова внешней процедуры

39P01

trigger_protocol_violated

НАРУШЕН ПРОТОКОЛ ТРИГГЕРА — триггерная функция вернула некорректное значение.

39P02

srf_protocol_violated

НАРУШЕН ПРОТОКОЛ SRF — функция, возвращающая набор строк (Set Returning Function), нарушила протокол.

Класс 3B — Исключение точки сохранения

3B001

invalid_savepoint_specification

НЕВЕРНАЯ СПЕЦИФИКАЦИЯ SAVEPOINT — обращение к несуществующей или недопустимой точке сохранения.

Класс 3D — Неверное имя каталога

3D000

invalid_catalog_name

НЕДОПУСТИМОЕ ИМЯ КАТАЛОГА — указанная база данных не существует на сервере.

Класс 3F — Неверное имя схемы

3F000

invalid_schema_name

НЕКОРРЕКТНОЕ ИМЯ СХЕМЫ — указанная схема не существует в текущей базе данных.

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

40001

serialization_failure

СБОЙ СЕРИАЛИЗАЦИИ — транзакция не может быть сериализована (конфликт блокировок). Решение: повторить транзакцию.

40P01

deadlock_detected

ОБНАРУЖЕНА ВЗАИМНАЯ БЛОКИРОВКА — две транзакции заблокировали друг друга. PostgreSQL автоматически откатывает одну из них. Решение: повторить транзакцию или пересмотреть порядок блокировок.

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

42601

syntax_error

СИНТАКСИЧЕСКАЯ ОШИБКА — неверный синтаксис SQL-запроса.

42501

insufficient_privilege

НЕДОСТАТОЧНО ПРИВИЛЕГИЙ — пользователь не имеет прав для выполнения этой операции. Выдайте нужные права через GRANT.

42803

grouping_error

ОШИБКА ГРУППИРОВКИ — столбец в SELECT не включён в GROUP BY и не является агрегатной функцией.

42830

invalid_foreign_key

НЕДОПУСТИМЫЙ ВНЕШНИЙ КЛЮЧ — определение FOREIGN KEY некорректно.

42804

datatype_mismatch

НЕСООТВЕТСТВИЕ ТИПОВ ДАННЫХ — операнды несовместимых типов в выражении или сравнении.

42703

undefined_column

НЕОПРЕДЕЛЁННЫЙ СТОЛБЕЦ — столбец с таким именем не существует в указанной таблице.

42883

undefined_function

НЕОПРЕДЕЛЁННАЯ ФУНКЦИЯ — функция с такой сигнатурой (именем и типами аргументов) не существует.

42P01

undefined_table

НЕОПРЕДЕЛЁННАЯ ТАБЛИЦА — таблица или представление с таким именем не существует в текущей схеме.

42701

duplicate_column

ДУБЛИРУЮЩИЙСЯ СТОЛБЕЦ — попытка добавить столбец с именем, которое уже используется в таблице.

42P07

duplicate_table

ДУБЛИРУЮЩАЯСЯ ТАБЛИЦА — таблица или представление с таким именем уже существует.

42723

duplicate_function

ДУБЛИРУЮЩАЯСЯ ФУНКЦИЯ — функция с такой сигнатурой уже существует.

Класс 44 — Нарушение опции проверки

44000

with_check_option_violation

НАРУШЕНИЕ WITH CHECK OPTION — обновление через представление нарушает условие WITH CHECK OPTION.

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

53100

disk_full

ДИСК ПЕРЕПОЛНЕН — на диске недостаточно места для завершения операции.

53200

out_of_memory

НЕДОСТАТОЧНО ПАМЯТИ — сервер исчерпал доступную оперативную память. Проверьте параметр work_mem в postgresql.conf.

53300

too_many_connections

СЛИШКОМ МНОГО СОЕДИНЕНИЙ — достигнут предел max_connections. Используйте пул соединений (PgBouncer) или увеличьте лимит.

Класс 54 — Превышен лимит программы

54001

statement_too_complex

СЛИШКОМ СЛОЖНЫЙ ЗАПРОС — запрос превысил ограничения по сложности (например, по глубине вложенности).

54011

too_many_columns

СЛИШКОМ МНОГО СТОЛБЦОВ — таблица или запрос содержит больше 1600 столбцов (ограничение PostgreSQL).

Класс 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.

57P02

crash_shutdown

АВАРИЙНОЕ ОТКЛЮЧЕНИЕ — сервер аварийно завершил работу.

57P03

cannot_connect_now

НЕВОЗМОЖНО ПОДКЛЮЧИТЬСЯ СЕЙЧАС — сервер запускается или восстанавливается после сбоя.

Класс 58 — Системная ошибка

58030

io_error

ОШИБКА ВВОДА-ВЫВОДА — ошибка чтения или записи на диск. Проверьте файловую систему и диск.

58P01

undefined_file

ФАЙЛ НЕ НАЙДЕН — PostgreSQL не может найти необходимый файл данных.

Класс F0 — Ошибка файла конфигурации

F0000

config_file_error

ОШИБКА ФАЙЛА КОНФИГУРАЦИИ — синтаксическая ошибка в postgresql.conf, pg_hba.conf или другом конфигурационном файле.

F0001

lock_file_exists

ФАЙЛ БЛОКИРОВКИ СУЩЕСТВУЕТ — файл postmaster.pid уже существует. PostgreSQL не запустится, если предыдущий процесс не был корректно завершён.

Класс P0 — Ошибка PL/pgSQL

P0001

raise_exception

ЯВНОЕ ИСКЛЮЧЕНИЕ — в коде PL/pgSQL выполнена команда RAISE EXCEPTION.

P0002

no_data_found

ДАННЫЕ НЕ НАЙДЕНЫ — в PL/pgSQL запрос SELECT INTO не вернул ни одной строки.

P0003

too_many_rows

СЛИШКОМ МНОГО СТРОК — в PL/pgSQL запрос SELECT INTO вернул более одной строки.

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

XX000

internal_error

ВНУТРЕННЯЯ ОШИБКА — ошибка внутри самого PostgreSQL. Сообщите разработчикам через систему отслеживания ошибок.

XX001

data_corrupted

ДАННЫЕ ПОВРЕЖДЕНЫ — повреждены данные на страницах базы данных. Требуется восстановление из резервной копии.

XX002

index_corrupted

ИНДЕКС ПОВРЕЖДЁН — повреждён индекс таблицы. Попробуйте REINDEX для восстановления.

FAQ

Что такое SQLSTATE и как его получить в приложении?

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

Как отличить ошибку приложения от ошибки сервера PostgreSQL?

Коды классов 00–2Z — стандартные SQL-ошибки (данные, транзакции, соединения). Коды классов начиная с 5X, XX — внутренние ошибки сервера или системы. Коды с буквой P — специфичные для PostgreSQL расширения.

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

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

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

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

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

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

Что означает класс ошибки, если я не знаю конкретный код?

Первые два символа всегда обозначают класс: 08 — проблемы соединения, 22 — неверные данные, 23 — нарушение ограничений, 42 — синтаксические ошибки и права, 53 — нехватка ресурсов. Этого часто достаточно для начальной диагностики.

Алексей Герзанов aka Gerzoid
Алекс Гезанов

Работаю в сервисном центре по ремонту и обслуживанию бытовой техники. За более чем 10 лет трудовой деятельности, я сталкивался с решением большого количества проблем в работе ОС Windows, периферийных устройств, бытовой техники, игровых консолей Playstation и т. д.

Добавить комментарий