relation中的id怎么取到表名
时间: 2024-03-05 11:53:51 浏览: 16
在 PostgreSQL 的 pg_locks 视图中,被锁定的关系(表)在 relation 字段中以 Oid 的形式存储。要将 Oid 转换为表名,可以使用以下 SQL 语句:
```
SELECT relname
FROM pg_class
WHERE oid = <relation_oid>;
```
其中,pg_class 是 PostgreSQL 系统自带的用于存储关系(表)信息的系统表,oid 是每个关系(表)的唯一标识符。通过在 pg_class 表中查询 oid = <relation_oid> 的记录,可以获取到对应的表名 relname。
举个例子,假设查询 pg_locks 视图时得到了以下结果:
```
locktype | relation | page | tuple | virtualxid | transactionid | classid | objid | objsubid | virtualtransaction | pid | mode | granted
------------+-----------+------+-------+------------+---------------+---------+-------+----------+--------------------+------+---------------------+---------
relation | 16384 | | | | | | | | 3/5 | 9984 | AccessShareLock | t
relation | 16384 | | | | | | | | 3/5 | 9984 | RowExclusiveLock | t
```
可以看到,relation 字段中的值为 16384,需要将其转换为表名。可以使用以下 SQL 语句完成转换:
```
SELECT relname
FROM pg_class
WHERE oid = 16384;
```
查询结果为:
```
relname
----------
pg_class
(1 row)
```
因此,可以得知锁定的关系(表)为 pg_class。