我遇到插入失败。确切地说,它不会引起错误,但是在运行以下代码时它会冻结并且不执行任何操作:
INSERT INTO public.table_0 VALUES(CURRENT_TIMESTAMP, -999.25);
请注意我要插入的表名如何以0
结尾。但是,如果我插入名称不以数字0
结尾的其他表,则插入效果很好。
INSERT INTO public.table_50 VALUES(CURRENT_TIMESTAMP, -999.25);
为什么会这样?
答案 0 :(得分:1)
很可能是某些东西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)