我正在运行Postgresql 9.5.2服务器,偶尔会看到如下消息:
错误:检测到死锁 详细信息:进程1234在事务3042999324上等待ShareLock;被进程5678阻止。
进程5678在事务3042999328上等待ShareLock;被进程1234阻止。
提示:有关查询详细信息,请参阅服务器日志 其中:同时锁定元组(5389,30)" asset"
如果它包含导致死锁的行或列的任何信息,它将帮助我调试导致错误的大丑common-table expression。
答案 0 :(得分:0)
我在查询正确的术语时想出了问题:tuple指的是行ctid,每行的系统列表示版本的物理位置有问题的一行。 (当更新行时,Postgresql会将旧版本保留一段时间,以便履行ACID保证。)
您可以使用以下方式选择数据:
SELECT * from "asset" where ctid = '(5389,30)';
但是,如果您等待的时间过长(就像我一样),autovacuum作业可能会清除该行的版本(如果它已不再使用)。