Postgresql error 53300

The issue We're occasionally getting unexpected PostgresExceptions while executing queries: Npgsql.PostgresException : 53300: remaining connection slots are reserved for non-replication superus...

We’re occasionally getting unexpected PostgresExceptions while executing queries:

Npgsql.PostgresException : 53300: remaining connection slots are reserved for non-replication superuser connections

We expected this exception to only appear during NpgsqlConnection.Open when the server is running out of connections.
But instead we’re getting it on an already open connection while executing queries.

Is this exception to be expected on already open connections / while executing queries?
What can cause this exception on an already open connection?

The following stacktrace shows that it does not happen during NpgsqlConnection.Open, but while executing queries:

   System.AggregateException : One or more errors occurred. (53300: remaining connection slots are reserved for non-replication superuser connections)
---- Npgsql.PostgresException : 53300: remaining connection slots are reserved for non-replication superuser connections
  Stack Trace:
  --- End of stack trace from previous location ---
----- Inner Stack Trace -----
   at Npgsql.Internal.NpgsqlConnector.<ReadMessage>g__ReadMessageLong|211_0(NpgsqlConnector connector, Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage)
=> at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)
   at Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken)
=> at Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken)
=> at Npgsql.FSharp.Sql.executeAsync@397-9.Invoke(Unit unitVar0)
   at Ply.TplPrimitives.AwaitableContinuation`3.Invoke(Unit r)
   at Ply.TplPrimitives.tryFinally@257.Invoke(AwaitableContinuation`3 this)
   at Ply.TplPrimitives.AwaitableContinuation`3.Invoke(Unit r)
   at Ply.TplPrimitives.tryFinally@257.Invoke(AwaitableContinuation`3 this)
   at Ply.TplPrimitives.ContinuationStateMachine`1.System-Runtime-CompilerServices-IAsyncStateMachine-MoveNext()

We tried but so far we failed to reproduce the problem with a succinct piece of code and it only happens occasionally in production.

Npgsql version: 6.0.4
PostgreSQL version: 11
Operating system: Docker / Linux / debian:11-slim with .NET 6

I have a PostgreSQL 12.1 database system (I’ll refer to it as PGSQL) running on a remotely hosted VM server (Windows Server 2019). We upgraded the server OS and PGSQL a couple of months ago. Everything has been running more-or-less normally since then, until this morning when I started receiving the above-mentioned database error in pretty much every one of our in-house applications that connect to this PGSQL instance.

To check the connections, I ran SELECT * FROM pg_stat_activity;, which returned 103 rows. My postgresql.conf file has max_connections = 100, so that makes sense, but what doesn’t make sense is that, of those 103 connections, 90+ of them are listed as idle with query text of DISCARD ALL. All of these show as being executed by the same, non-superuser account from the server’s own internal address. However, several of the connections show a query_start date value from a month or more ago.

Now, many of the applications we have in place are unfortunately built with hard-coded credentials (I have a lot of «clean-up» work to do on the code for these applications that I inherited) and are generally being executed from shortcuts pointing to an «Application» share on the server that’s hosting the PGSQL database, so none of this looks particularly «suspicious». I tried to simply kill the processes using SELECT pg_cancel_backend(<pid>); on one of the pid values from the previous query, but requerying pg_stat_activity still shows the same record in the result set (all of the values appear to be exactly the same, from what I can tell).

Perhaps I’m not using the correct function to terminate these «hung» processes or something, but I could not figure out how to clear out these connections individually. Because I needed to get our production environment back to a usable state, I ended up just stopping and restarting the PGSQL service on the server which did clear out all of those old DISCARD ALL statements, but I’m curious if there’s something I could do to prevent this backlog of «hung» statements in the future.

My question here is, how can I prevent this from happening in the future? One thing to note is that, prior to upgrading our PGSQL server to v12.1, we ran v9.4 for a number of years and never once encountered this issue. I’m wondering if there might be something inherent to the newer version of PGSQL, or perhaps even something about running PGSQL in the Windows Server 2019 environment that might be causing this behavior.


EDIT

For reference and consolidation, the following information comes from the comments:

I do not have anything server-side for managing connection pooling (I’ve seen some references in other questions about PgBouncer, but haven’t had an opportunity to look at that for whether or not it would be helpful in our environment). Most of my applications are implementing pooling in the connection string via the Npgsql library. I’ve built a «common library» for managing my applications’ connections — connecting, disconnecting, disposing, etc. — which at least seems to be working normally.

However, it’s certainly possible that some of the «legacy» code I’ve inherited does not have this implemented correctly, but that’s something that’ll take me a bit of time to dig through the code to find all of the connections (there are a lot of issues with some of that code). I’ll investigate that as a potential/likely source of the issue as time permits.

As stated above, I’ve not encountered this issue until we upgraded PGSQL to v12.1 and that same legacy code has been in place for several years. As a 1-man IT Dept, the server’s reboot «schedule» is generally managed by me and I’ve rarely rebooted the server or restarted the PGSQL service due to its nature as a production environment. Hopefully, I’m just being hyper-sensitive about stuff because of the recent upgrade and this whole thing is a «one-off» situation I won’t see again.

I guess what triggered my question was wondering why the database hadn’t dumped these idle connections that have been hanging around for a month or more. I’ll keep an eye on things and, if the problem persists, I’ll look into more aggressive connection pool management options.


UPDATE/EDIT

Since posting this question 4 months ago, I, unfortunately, haven’t been actively checking the status of the idle connections. This morning, however, the error popped back up and I was reminded of this post. Again, executing SELECT * FROM pg_stat_activity; showed over 100 connections (the max defined by my server configuration), of which over 70 were idle / DISCARD ALL with «older» (several weeks/months) values for the backend_start / query_start date.

Understanding that the database itself doesn’t «manage» these, I still find it odd that I never encountered this error in more than a decade of running previous versions of PostgreSQL. It wasn’t until after we upgraded to v12, even though the environment has remained basically the same.

Regardless, because I have so many «legacy» applications that potentially could be leaving these connections open, I’ve decided to implement a check in one of my daily routines that should prevent this issue from reoccurring. I have an application that is run every day to replicate and clean up certain information in the database. In that application, I am adding a small function that will execute the following SQL command to keep the backend clear of these «leftover» idle connections:

SELECT
    pg_terminate_backend(pid)
FROM
    pg_stat_activity
WHERE
    pid <> pg_backend_pid()
    AND backend_start < (SELECT (NOW() - INTERVAL '2 WEEK')::DATE)
    AND state = 'idle';

As you can see, this should look for any idle connections older than 2 weeks and terminate them. Since this application is run daily, I believe this will help to keep the pool as clear as possible. Of course, if there’s a better way — one that does not require the implementation of some new 3rd-party solution (at least, at this time) — I’m all ears, but, for the time being, I believe this will «solve» my problem.


ADDITIONAL REFERENCE / POSSIBLE ALTERNATE SOLUTION

As I was looking around a bit more, I also came across this answer on StackOverflow:

How to close idle connections in PostgreSQL automatically?

The linked answer refers to using the idle_in_transaction_session_timeout setting introduced in PostgreSQL 9.6. As stated in fresko‘s answer, I should be able to set this with a single SQL command sent to the server either as a superuser for the entirety of the server:

ALTER SYSTEM SET idle_in_transaction_session_timeout = '5min';

or for individual user connections on a per-session basis (if needed)

SET SESSION idle_in_transaction_session_timeout = '5min';

I checked this setting on my server and it appears to be disabled (0), so I may look into configuring this setting as well. I’ll be referring to the v12 documentation page for Client Connection Defaults in case anyone wants to «follow along».

PostgreSQL присваивает пятисимвольные коды ошибок, которые соответствуют «SQLSTATE». Приложения обычно проверяют код ошибки и только потом обращаются к текстовому сообщению об ошибке. Коды ошибок и текстовое сообщение не меняются в новых выпусках. Обратите внимание, что не все коды ошибок, создаваемые 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

НУЛЕВОЕ ЗНАЧЕНИЕ ИСКЛЮЧЕНО В ФУНКЦИИ SET

01007

privilege_not_granted

ПРИВИЛЕГИЯ НЕ ПРЕДОСТАВЛЕНА

1006

privilege_not_revoked

ПРИВИЛЕГИЯ НЕ ОТОЗВАНА

01004

string_data_right_truncation

УСЕЧЕНИЕ ПРАВОЙ ЧАСТИ СТРОКОВЫХ ДАННЫХ

01P01

deprecated_feature

УСТАРЕВШАЯ ФУНКЦИЯ

Класс 02 — Нет данных (это также класс предупреждения в соответствии со стандартом SQL)

02000

no_data

НЕТ ДАННЫХ

02001

no_additional_dynamic_result_sets_returned

ДОПОЛНИТЕЛЬНЫЕ ДИНАМИЧЕСКИЕ НАБОРЫ РЕЗУЛЬТАТОВ НЕ ВОЗВРАЩАЮТСЯ

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

03000

sql_statement_not_yet_complete

SQL-ЗАПРОС ЕЩЕ НЕ ЗАВЕРШЕН

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

08000

connection_exception

ИСКЛЮЧЕНИЕ СОЕДИНЕНИЯ

08003

connection_does_not_exist

СОЕДИНЕНИЕ НЕ СУЩЕСТВУЕТ

08006

connection_failure

СБОЙ СОЕДИНЕНИЯ

08001

sqlclient_unable_to_establish_sqlconnection

SQLCLIENT НЕ МОЖЕТ УСТАНОВИТЬ SQL-СОЕДИНЕНИЕ

008004

sqlserver_rejected_establishment_of_sqlconnection

SQLSERVER ОТКЛОНИЛ СОЗДАНИЕ SQL-СОЕДИНЕНИЯ

08007

transaction_resolution_unknown

РАЗРЕШЕНИЕ ТРАНЗАКЦИИ НЕИЗВЕСТНО

08P01

protocol_violation

Нарушение ПРОТОКОЛА

Класс 09 — Спровоцированное исключение действия

09000

triggered_action_exception

ИСКЛЮЧЕНИЕ СРАБОТАВШЕГО ДЕЙСТВИЯ

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

0A000

feature_not_supported

ФАТУРА НЕ ПОДДЕРЖИВАЕТСЯ Класс 0B — Неправильная инициация транзакции

0B000

invalid_transaction_initiation

НЕКОРРЕКТНОЕ ИНИЦИИРОВАНИЕ ТРАНЗАКЦИИ

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

0F000

locator_exception

ИСКЛЮЧЕНИЕ ЛОКАТОРА

0F001

invalid_locator_specification

НЕДЕЙСТВИТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЛОКАТОРА

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

0L000

invalid_grantor

НЕДЕЙСТВИТЕЛЬНЫЙ ПРАВОДАТЕЛЬ

0LP01

invalid_grant_operation

НЕДОПУСТИМАЯ ОПЕРАЦИЯ ГРАНТА

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

0P000

invalid_role_specification

НЕДОПУСТИМАЯ СПЕЦИФИКАЦИЯ РОЛИ

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

21000

cardinality_violation

НАРУШЕНИЕ КАРДИНАЛЬНОСТИ

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

22000

data_exception

ИСКЛЮЧЕНИЕ ДАННЫХ

2202E

array_subscript_error

ОШИБКА ПОДСКРИПТА МАССИВА

22021

character_not_in_repertoire

СИМВОЛ ОТСУТСТВУЕТ В РЕПЕРТУАРЕ

22008

datetime_field_overflow

ПЕРЕПОЛНЕНИЕ ПОЛЯ DATETIME

22012

division_by_zero

ДЕЛЕНИЕ НА НОЛЬ

22005

error_in_assignment

ОШИБКА В ПРИСВОЕНИИ

2200B

escape_character_conflict

КОНФЛИКТ УПРАВЛЯЮЩИХ СИМВОЛОВ

22022

indicator_overflow

ПЕРЕПОЛНЕНИЕ ИНДИКАТОРА

22015

interval_field_overflow

ПЕРЕПОЛНЕНИЕ ПОЛЯ ИНТЕРВАЛА

2201E

invalid_argument_for_logarithm

НЕДОПУСТИМЫЙ АРГУМЕНТ ДЛЯ ЛОГАРИФМА

2201F

invalid_argument_for_power_function

НЕДОПУСТИМЫЙ АРГУМЕНТ ДЛЯ ФУНКЦИИ ПИТАНИЯ

2201G

invalid_argument_for_width_bucket_function

НЕДОПУСТИМЫЙ АРГУМЕНТ ДЛЯ ФУНКЦИИ ШИРИНЫ ВЕДРА

22018

invalid_character_value_for_cast

НЕДОПУСТИМОЕ ЗНАЧЕНИЕ СИМВОЛА ДЛЯ БРОСКА

22007

invalid_datetime_format

НЕВЕРНЫЙ ФОРМАТ ВРЕМЕНИ ДАТЫ

22019

invalid_escape_character

НЕДОПУСТИМЫЙ УПРАВЛЯЮЩИЙ СИМВОЛ

2200D

invalid_escape_octet

НЕДОПУСТИМЫЙ УПРАВЛЯЮЩИЙ ОКТЕТ

22025

invalid_escape_sequence

НЕВЕРНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ СИМВОЛОВ

22P06

nonstandard_use_of_escape_character

НЕСТАНДАРТНОЕ ИСПОЛЬЗОВАНИЕ УПРАВЛЯЮЩЕГО СИМВОЛА

22010

invalid_indicator_parameter_value

НЕДОПУСТИМОЕ ЗНАЧЕНИЕ ПАРАМЕТРА ИНДИКАТОРА

22020

invalid_limit_value

НЕДОПУСТИМОЕ ПРЕДЕЛЬНОЕ ЗНАЧЕНИЕ

22023

invalid_parameter_value

НЕДОПУСТИМОЕ ЗНАЧЕНИЕ ПАРАМЕТРА

2201B

invalid_regular_expression

НЕВЕРНОЕ РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ

22009

invalid_time_zone_displacement_value

НЕДОПУСТИМОЕ ЗНАЧЕНИЕ СМЕЩЕНИЯ ЧАСОВОГО ПОЯСА

2200C

invalid_use_of_escape_character

НЕКОРРЕКТНОЕ ИСПОЛЬЗОВАНИЕ УПРАВЛЯЮЩЕГО СИМВОЛА

2200G

most_specific_type_mismatch

НАИБОЛЕЕ СПЕЦИФИЧЕСКОЕ НЕСООТВЕТСТВИЕ ТИПОВ

22004

null_value_not_allowed

НУЛЕВОЕ ЗНАЧЕНИЕ НЕДОПУСТИМО

22002

null_value_no_indicator_parameter

НУЛЕВОЕ ЗНАЧЕНИЕ НЕТ ПАРАМЕТРА ИНДИКАТОРА

22003

numeric_value_out_of_range

ЧИСЛОВОЕ ЗНАЧЕНИЕ ВНЕ ДИАПАЗОНА

22026

string_data_length_mismatch

НЕСООТВЕТСТВИЕ ДЛИНЫ СТРОКОВЫХ ДАННЫХ

22001

string_data_right_truncation

УСЕЧЕНИЕ СТРОКОВЫХ ДАННЫХ СПРАВА

22011

substring_error

ОШИБКА ПОДСТРОКИ

22027

trim_error

ОШИБКА ТРИМ

22024

unterminated_c_string

НЕЗАВЕРШЕННАЯ СТРОКА C

2200F

zero_length_character_string

СТРОКА СИМВОЛОВ НУЛЕВОЙ ДЛИНЫ

22P01

floating_point_exception

ИСКЛЮЧЕНИЕ ПЛАВАЮЩЕЙ ТОЧКИ

22P02

invalid_text_representation

НЕКОРРЕКТНОЕ ПРЕДСТАВЛЕНИЕ ТЕКСТА

22P03

invalid_binary_representation

НЕКОРРЕКТНОЕ ДВОИЧНОЕ ПРЕДСТАВЛЕНИЕ

22P04

bad_copy_file_format

НЕПРАВИЛЬНЫЙ ФОРМАТ ФАЙЛА КОПИИ

22P05

untranslatable_character

НЕПЕРЕВОДИМЫЙ СИМВОЛ

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

23000

integrity_constraint_violation

НАРУШЕНИЕ ОГРАНИЧЕНИЯ ЦЕЛОСТНОСТИ

23001

restrict_violation

НАРУШЕНИЕ ОГРАНИЧЕНИЙ

23502

not_null_violation

НАРУШЕНИЕ НЕ НУЛЯ

23503

foreign_key_violation

НАРУШЕНИЕ ВНЕШНЕГО КЛЮЧА

23505

unique_violation

УНИКАЛЬНОЕ НАРУШЕНИЕ

23514

check_violation

НАРУШЕНИЕ ПРОВЕРКИ

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

24000

invalid_cursor_state

НЕДОПУСТИМОЕ СОСТОЯНИЕ КУРСОРА

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

25000

invalid_transaction_state

НЕДЕЙСТВИТЕЛЬНОЕ СОСТОЯНИЕ ТРАНЗАКЦИИ

25001

active_sql_transaction

АКТИВНАЯ SQL ТРАНЗАКЦИЯ

25002

branch_transaction_already_active

ТРАНЗАКЦИЯ ОТДЕЛЕНИЯ УЖЕ АКТИВНА

25008

held_cursor_requires_same_isolation_level

УДЕРЖИВАЕМЫЙ КУРСОР ТРЕБУЕТ ОДИНАКОВОГО УРОВНЯ ИЗОЛЯЦИИ

25003

inappropriate_access_mode_for_branch_transaction

НЕСООТВЕТСТВУЮЩИЙ РЕЖИМ ДОСТУПА ДЛЯ ТРАНЗАКЦИИ ВЕТВЛЕНИЯ

25004

inappropriate_isolation_level_for_branch_transaction

НЕСООТВЕТСТВУЮЩИЙ УРОВЕНЬ ИЗОЛЯЦИИ ДЛЯ ТРАНЗАКЦИИ ФИЛИАЛА

25005

no_active_sql_transaction_for_branch_transaction

НЕТ АКТИВНОЙ SQL-ТРАНЗАКЦИИ ДЛЯ ТРАНЗАКЦИИ ФИЛИАЛА

25006

read_only_sql_transaction

SQL-ТРАНЗАКЦИЯ ТОЛЬКО ДЛЯ ЧТЕНИЯ

25007

schema_and_data_statement_mixing_not_supported

СМЕШИВАНИЕ СХЕМЫ И ОПЕРАТОРА ДАННЫХ НЕ ПОДДЕРЖИВАЕТСЯ

25P01

no_active_sql_transaction

НЕТ АКТИВНОЙ SQL ТРАНЗАКЦИИ

25P02

in_failed_sql_transaction

В НЕУДАЧНОЙ ТРАНЗАКЦИИ SQL

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

26000

invalid_sql_statement_name

НЕДОПУСТИМОЕ ИМЯ SQL-ОПЕРАТОРА

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

27000

triggered_data_change_violation

НАРУШЕНИЕ ПРАВИЛ ИЗМЕНЕНИЯ ДАННЫХ

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

28000

invalid_authorization_specification

НЕДОПУСТИМАЯ СПЕЦИФИКАЦИЯ АВТОРИЗАЦИИ

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

2B000

dependent_privilege_descriptors_still_exist

ЗАВИСИМЫЕ ДЕСКРИПТОРЫ ПРИВИЛЕГИЙ ВСЕ ЕЩЕ СУЩЕСТВУЮТ

2BP01

dependent_objects_still_exist

ЗАВИСИМЫЕ ОБЪЕКТЫ ВСЕ ЕЩЕ СУЩЕСТВУЮТ

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

2D000

invalid_transaction_termination

НЕКОРРЕКТНОЕ ЗАВЕРШЕНИЕ ТРАНЗАКЦИИ

Класс 2F — Исключение SQL-маршрута

2F000

sql_routine_exception

ИСКЛЮЧЕНИЕ SQL-ПРОЦЕДУРЫ

2F005

function_executed_no_return_statement

ФУНКЦИЯ ВЫПОЛНЕНА НЕТ ЗАЯВЛЕНИЯ О ВОЗВРАТЕ

2F002

modifying_sql_data_not_permitted

МОДИФИКАЦИЯ ДАННЫХ SQL ЗАПРЕЩЕНА

2F003

prohibited_sql_statement_attempted

ПОПЫТКА ЗАПРЕЩЕННОГО SQL-ОПЕРАТОРА

2F004

reading_sql_data_not_permitted

ЧТЕНИЕ SQL-ДАННЫХ ЗАПРЕЩЕНО

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

34000

invalid_cursor_name

НЕДОПУСТИМОЕ ИМЯ КУРСОРА

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

38000

external_routine_exception

ИСКЛЮЧЕНИЕ ВНЕШНЕЙ ПРОЦЕДУРЫ

38001

containing_sql_not_permitted

СОДЕРЖАНИЕ SQL НЕ РАЗРЕШЕНО

38002

modifying_sql_data_not_permitted

МОДИФИКАЦИЯ ДАННЫХ SQL НЕ РАЗРЕШЕНА

38003

prohibited_sql_statement_attempted

ПРЕДПРИНЯТА ПОПЫТКА ВЫПОЛНЕНИЯ ЗАПРЕЩЕННОГО SQL-ЗАПРОСА

38004

reading_sql_data_not_permitted

ЧТЕНИЕ SQL-ДАННЫХ НЕ РАЗРЕШЕНО

Класс 39 — Исключение при вызове внешнего маршрута

39000

external_routine_invocation_exception

ИСКЛЮЧЕНИЕ ВЫЗОВА ВНЕШНЕЙ ПРОЦЕДУРЫ

39001

invalid_sqlstate_returned

ВОЗВРАЩЕНО НЕВЕРНОЕ СОСТОЯНИЕ SQLSTATE

39004

null_value_not_allowed

НУЛЕВОЕ ЗНАЧЕНИЕ НЕДОПУСТИМО

39P01

trigger_protocol_violated

НАРУШЕН ПРОТОКОЛ ТРИГГЕРА

39P02

srf_protocol_violated

НАРУШЕН ПРОТОКОЛ SRF

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

3B000

savepoint_exception

ИСКЛЮЧЕНИЕ ТОЧКИ СОХРАНЕНИЯ

3B001

invalid_savepoint_specification

НЕВЕРНАЯ СПЕЦИФИКАЦИЯ ТОЧКИ СОХРАНЕНИЯ

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

3D000

invalid_catalog_name

НЕДОПУСТИМОЕ ИМЯ КАТАЛОГА

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

3F000

invalid_schema_name

НЕКОРРЕКТНОЕ ИМЯ СХЕМЫ

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

40000

transaction_rollback

ОТКАТ ТРАНЗАКЦИИ

40002

transaction_integrity_constraint_violation

НАРУШЕНИЕ ОГРАНИЧЕНИЙ ЦЕЛОСТНОСТИ ТРАНЗАКЦИИ

40001

serialization_failure

СБОЙ СЕРИАЛИЗАЦИИ

40003

statement_completion_unknown

ЗАВЕРШЕНИЕ ОПЕРАЦИИ НЕИЗВЕСТНО

40P01

deadlock_detected

ОБНАРУЖЕН ТУПИК

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

42000

syntax_error_or_access_rule_violation

СИНТАКСИЧЕСКАЯ ОШИБКА ИЛИ НАРУШЕНИЕ ПРАВИЛА ДОСТУПА

42601

syntax_error

ОШИБКА СИНТАКСИСА

42501

insufficient_privilege

НЕДОСТАТОЧНАЯ ПРИВИЛЕГИЯ

42846

cannot_coerce

НЕ МОЖЕТ СОХРАНИТЬСЯ

42803

grouping_error

ОШИБКА ГРУППИРОВКИ

42830

invalid_foreign_key

НЕДОПУСТИМЫЙ ВНЕШНИЙ КЛЮЧ

42602

invalid_name

НЕПРАВИЛЬНОЕ ИМЯ

42622

name_too_long

СЛИШКОМ ДЛИННОЕ ИМЯ

42939

reserved_name

ЗАРЕГИСТРИРОВАННОЕ ИМЯ

42804

datatype_mismatch

НЕСООТВЕТСТВИЕ ТИПОВ ДАННЫХ

42P18

indeterminate_datatype

НЕОПРЕДЕЛЕННЫЙ ТИП ДАННЫХ

42809

wrong_object_type

НЕПРАВИЛЬНЫЙ ТИП ОБЪЕКТА

42703

undefined_column

НЕОПРЕДЕЛЁННЫЙ СТОЛБЕЦ

42883

undefined_function

НЕОПРЕДЕЛЁННАЯ ФУНКЦИЯ

42P01

undefined_table

НЕОПРЕДЕЛЁННАЯ ТАБЛИЦА

42P02

undefined_parameter

НЕОПРЕДЕЛЁННЫЙ ПАРАМЕТР

42704

undefined_object

НЕОПРЕДЕЛЕННЫЙ ОБЪЕКТ

42701

duplicate_column

ДУБЛИРУЮЩИЙ СТОЛБЕЦ

42P03

duplicate_cursor

ДУБЛИРУЮЩИЙ КУРСОР

42P04

duplicate_database

ДУБЛИРОВАНИЕ БАЗЫ ДАННЫХ

42723

duplicate_function

ДУБЛИРУЮЩАЯ ФУНКЦИЯ

42P05

duplicate_prepared_statement

ДУБЛИРОВАНИЕ ПОДГОТОВЛЕННОГО ОПЕРАТОРА

42P06

duplicate_schema

ДУБЛИРОВАНИЕ СХЕМЫ

42P07

duplicate_table

ДУБЛИРУЮЩАЯ ТАБЛИЦА

42712

duplicate_alias

ДУБЛИКАТ ПСЕВДОНИМА

42710

duplicate_object

ДУБЛИРУЮЩИЙ ОБЪЕКТ

42702

ambiguous_column

НЕОДНОЗНАЧНЫЙ СТОЛБЕЦ

42725

ambiguous_function

НЕОДНОЗНАЧНАЯ ФУНКЦИЯ

42P08

ambiguous_parameter

НЕОДНОЗНАЧНЫЙ ПАРАМЕТР

42P09

ambiguous_alias

НЕОДНОЗНАЧНЫЙ ПСЕВДОНИМ

42P10

invalid_column_reference

НЕДОПУСТИМАЯ ССЫЛКА НА СТОЛБЕЦ

42611

invalid_column_definition

НЕКОРРЕКТНОЕ ОПРЕДЕЛЕНИЕ СТОЛБЦА

42P11

invalid_cursor_definition

НЕКОРРЕКТНОЕ ОПРЕДЕЛЕНИЕ КУРСОРА

42P12

invalid_database_definition

НЕДОПУСТИМОЕ ОПРЕДЕЛЕНИЕ БАЗЫ ДАННЫХ

42P13

invalid_function_definition

НЕВЕРНОЕ ОПРЕДЕЛЕНИЕ ФУНКЦИИ

42P14

invalid_prepared_statement_definition

НЕДОПУСТИМОЕ ОПРЕДЕЛЕНИЕ ПОДГОТОВЛЕННОГО ОПЕРАТОРА

42P15

invalid_schema_definition

НЕВЕРНОЕ ОПРЕДЕЛЕНИЕ СХЕМЫ

42P16

invalid_table_definition

НЕВЕРНОЕ ОПРЕДЕЛЕНИЕ ТАБЛИЦЫ

42P17

invalid_object_definition

НЕВЕРНОЕ ОПРЕДЕЛЕНИЕ ОБЪЕКТА

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

44000

with_check_option_violation

НАРУШЕНИЕ ОПЦИИ ПРОВЕРКИ

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

53000

insufficient_resources

НЕДОСТАТОЧНОЕ КОЛИЧЕСТВО РЕСУРСОВ

53100

disk_full

ДИСК ПЕРЕПОЛНЕН

53200

out_of_memory

МАЛО ПАМЯТИ

53300

too_many_connections

СЛИШКОМ МНОГО СОЕДИНЕНИЙ

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

54000

program_limit_exceeded

ПРЕВЫШЕН ЛИМИТ ПРОГРАММЫ

54001

statement_too_complex

СЛИШКОМ СЛОЖНОЕ УТВЕРЖДЕНИЕ

54011

too_many_columns

СЛИШКОМ МНОГО СТОЛБЦОВ

54023

too_many_arguments

СЛИШКОМ МНОГО АРГУМЕНТОВ

Класс 55 — Объект не находится в состоянии предпосылки

55000

object_not_in_prerequisite_state

ОБЪЕКТ НЕ НАХОДИТСЯ В СОСТОЯНИИ ПРЕДПОСЫЛКИ

55006

object_in_use

ОБЪЕКТ В ИСПОЛЬЗОВАНИИ

55P02

cant_change_runtime_param

НЕВОЗМОЖНО ИЗМЕНИТЬ ПАРАМЕТР ВРЕМЕНИ ВЫПОЛНЕНИЯ

55P03

lock_not_available

БЛОКИРОВКА НЕДОСТУПНА

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

57000

operator_intervention

ВМЕШАТЕЛЬСТВО ОПЕРАТОРА

57014

query_canceled

ЗАПРОС ОТМЕНЕН

57P01

admin_shutdown

ОТКЛЮЧЕНИЕ АДМИНИСТРАТОРА

57P02

crash_shutdown

АВАРИЙНОЕ ОТКЛЮЧЕНИЕ

57P03

cannot_connect_now

НЕВОЗМОЖНО ПОДКЛЮЧИТЬСЯ

Класс 58 — Системная ошибка (ошибки, внешние по отношению к самому PostgreSQL)

58030

io_error

ОШИБКА ВВОДА-ВЫВОДА

58P01

undefined_file

НЕОПРЕДЕЛЕННЫЙ ФАЙЛ

58P02

duplicate_file

ДУБЛИКАТ ФАЙЛА

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

F0000

config_file_error

ОШИБКА ФАЙЛА КОНФИГУРАЦИИ

F0001

lock_file_exists

СУЩЕСТВУЕТ ФАЙЛ БЛОКИРОВКИ

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

P0000

plpgsql_error

PLPGSQL ERROR

P0001

raise_exception

ПОДНЯТЬ ИСКЛЮЧЕНИЕ

P0002

no_data_found

НЕ НАЙДЕНЫ ДАННЫЕ

P0003

too_many_rows

СЛИШКОМ МНОГО СТРОК

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

XX000

internal_error

ВНУТРЕННЯЯ ОШИБКА

XX001

data_corrupted

ДАННЫЕ ИСПОРЧЕНЫ

XX002

index_corrupted

ПОВРЕЖДЁННЫЙ ИНДЕКС

Понравилась статья? Поделить с друзьями:
  • Power alpha error
  • Postgresql error 53200
  • Pow overflow error c builder
  • Pow domain error
  • Postgresql error 42p01 relation does not exist