PostgreSQL 中的"SET LOCAL 只能在事务块中使用"警告



在psql上本地设置lock_timeout 10秒,如下所示:

SET LOCAL lock_timeout = 10000;

我在psql上得到了下面的警告:

警告:SET LOCAL只能在事务块中使用

那么,SET LOCAL lock_timeout = 10000;根本不适用于下面的事务,所以lock table person;等待10秒后永远锁定表而不超时,如下所示:

postgres=# SET LOCAL lock_timeout = 10000;
WARNING:  SET LOCAL can only be used in transaction blocks
SET
postgres=# BEGIN;
BEGIN
postgres=*# LOCK TABLE person; # Waits to lock the table forever

那么,我如何解决警告,然后将SET LOCAL lock_timeout = 10000;应用于以下事务?

如下所示:

警告:SET LOCAL只能在事务块中使用

您需要在运行BEGIN之后在事务中使用SET LOCAL,然后它可以正常工作,如下所示:

postgres=# BEGIN;
BEGIN
postgres=*# SET LOCAL lock_timeout = 10000;
SET
postgres=*# LOCK TABLE person; # Waits to lock the table for 10 seconds
ERROR:  canceling statement due to lock timeout # Cancelled after 10 seconds
postgres=!#

最新更新