postgresql 有没有一种方法可以让一个会话等待所有其他会话中某个表上所有未提交的事务在Postgres中提交或回滚

nwlls2ji  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(121)

在Postgres中。我会让我的会话等待,直到一个表的所有未提交的事务都被提交或回滚。是否有一个查询可以运行来检测任何会话,这些会话对表和事务的开始时间戳具有未提交的DML。我想实现一些类似于Oracle的WAIT_ON_PENDING_DML函数的东西:
https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_UTILITY.html#GUID-314EDB9B-7948-4093-8A74-7159186168CE
我一直在看pg_locks视图。我不确定我是否能使用它。

fslejnso

fslejnso1#

你可以这样做:

SET lock_timeout = '1s';
LOCK tab IN SHARE MODE;

字符串
SHARE锁与所有DML冲突,如果语句无法在一秒内获取SHARE锁,则将终止并返回错误。
请注意,所有其他数据修改语句都会被阻塞,直到LOCK语句结束,这与您所希望的不同。您可以选择一个更小的lock_timeout,并暂时停止,直到重试。

相关问题