Postgresql对象ID和元组

Postgresql对象ID和元组,postgresql,Postgresql,我有时会看到这样的消息 进程12990等待数据库17607的关系17720的元组(889,66)上的排他锁;被进程12992阻止 当然“流程”部分很清楚,但我不知道如何在关系ID和人类可读名称之间建立关联。我也不知道如何理解元组位 有人知道如何阅读这些信息以及如何从中收集有用的数据吗 谢谢 您可以在系统表中查找这一点:这里感兴趣的是 像这样做查询 SELECT OID, relname FROM pg_class oid | relname

我有时会看到这样的消息

进程12990等待数据库17607的关系17720的元组(889,66)上的排他锁;被进程12992阻止

当然“流程”部分很清楚,但我不知道如何在关系ID和人类可读名称之间建立关联。我也不知道如何理解元组位

有人知道如何阅读这些信息以及如何从中收集有用的数据吗


谢谢

您可以在系统表中查找这一点:这里感兴趣的是

像这样做查询

SELECT OID, relname FROM pg_class
 oid  |              relname               
-------+------------------------------------
  1247 | pg_type
 11550 | user_mapping_options
 11554 | user_mappings
 11494 | triggered_update_columns
 11497 | triggers
或者更确切地说

SELECT relname FROM pg_class WHERE OID=17720
“关系”是一个表,“元组”是一行

下面是从表id中获取表名的步骤(您也可以查询
pg_类
table):

现在,这一排怎么样?“元组位”是一个数组,数据库中的每个表都有一个特殊的名为
ctid
的表,其中存储了这些标识符。现在我们知道了所讨论的表格,我们可以做:

=> select * from my_table where ctid='(889,66)';

然而!从系统栏docs(强调添加):“[A]l尽管ctid可以很快地定位行版本,如果行的ctid被更新或移动,则该行的ctid将发生变化。因此,ctid作为长期行标识符是无用的。”换句话说,如果您足够快,您可能会相信返回的行就是死锁中涉及的行,但该信息不会永远可用。

谢谢!我算出了id到关系的映射,但仍然不确定元组是什么…实际上,我应该澄清-不确定如何读取元组符号(x,y)以及如何使用它来理解导致死锁的原因OK,找到的另一位数据-这些数字是插入或删除该元组/行的事务id。有没有办法让我知道这些事务运行的是哪种SQL?
=> select * from my_table where ctid='(889,66)';