表名称以0结尾时,在插入期间出现奇怪的psql行为

时间:2018-10-25 00:58:13

标签: postgresql insert

我遇到插入失败。确切地说,它不会引起错误,但是在运行以下代码时它会冻结并且不执行任何操作:

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

请注意我要插入的表名如何以0结尾。但是,如果我插入名称不以数字0结尾的其他表,则插入效果很好。

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

为什么会这样?

1 个答案:

答案 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)