Странное поведение psql во время вставки, когда имя таблицы заканчивается на 0 - PullRequest
0 голосов
/ 25 октября 2018

У меня возникла ошибка вставки.Если быть точным, то это не вызывает ошибку, но просто зависает и ничего не делает, когда я запускаю следующий код:

INSERT INTO public.table_0 VALUES(CURRENT_TIMESTAMP, -999.25);

Обратите внимание, что имя таблицы, которую я вставляю, заканчивается на 0,Однако, если я вставляю в другую таблицу, имя которой не заканчивается цифрой 0, вставка работает отлично.

INSERT INTO public.table_50 VALUES(CURRENT_TIMESTAMP, -999.25);

Почему это происходит?

1 Ответ

0 голосов
/ 25 октября 2018

Скорее всего, есть что-то, что удерживает блокировку на public.table_0, которая блокирует вашу вставку.

Вы можете идентифицировать блокирующую блокировку следующим запросом:

SELECT locktype, relation, transactionid, pid, mode
FROM pg_locks WHERE NOT granted;

   locktype    | relation | transactionid | pid  |   mode    
---------------+----------+---------------+------+-----------
 transactionid |          |          4125 | 4434 | ShareLock
(1 row)

Тогдав последних версиях PostgreSQL вы можете видеть, кто блокирует этот бэкэнд:

SELECT pg_blocking_pids(4434);

 pg_blocking_pids 
------------------
 {4589}
(1 row)

И вы должны найти оператор, который активен или бездействует в транзакции:

SELECT datname, usename, application_name, xact_start, state
FROM pg_stat_activity WHERE pid = 4589;

 datname | usename | application_name |          xact_start           |        state        
---------+---------+------------------+-------------------------------+---------------------
 test    | laurenz | psql             | 2018-10-25 07:03:13.112879+02 | idle in transaction
(1 row)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...