来说是不可见的:
select * from t1;
ERROR: relation "t1" does not exist
LINE 1: select * from t1;
^
虽然我们不再处于任何可见的事务中,但由于我们预备好
的事务,在后台还持有锁:
select * from pg_locks
where database = (select oid from pg_database where datname =
'postgres')
and mode like '%Exclusive%';
locktype | database | relation | page | tuple | virtualxid | transactionid | classid
| objid | objsubid | virtualtransaction | pid | mode | granted | fastpath
| waitstart
----------+----------+----------+------+-------+------------+---------------+---------+-------
+----------+--------------------+-----+---------------------+---------+----------+-----------
relation | 12969 | 24582 | | | | | | | |
-1/562 | | RowExclusiveLock | t | f |
relation | 12969 | 24582 | | | | | | | |
-1/562 | | AccessExclusiveLock | t | f |
(2 rows)
有一个
AccessExclusiveLock
锁,它是 “
t1”
表上的锁。
另一个锁 “
RowExclusiveLock”
,它是保护我们在上面插
入的行的锁。我们怎么知道呢?目前这只是一个猜测,因
为 “
t1”
表是不可见的:
select relname from pg_class where oid = 24582;
relname
---------
(0 rows)
在提交预备好的事务后,我们可以验证它是否真的是关
于 “
t1”
的:
commit prepared 'abc';
select relname from pg_class where oid = 24582;
relname
相关文档
评论