【问题标题】:"SET LOCAL can only be used in transaction blocks" warning in PostgreSQL\"SET LOCAL can only be used in transaction blocks\" PostgreSQL 中的警告
【发布时间】:2023-01-05 17:14:52
【问题描述】:

在psql本地设置lock_timeout10秒时如下图:

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; 应用于以下交易?

【问题讨论】:

    标签: database postgresql psql table-lock lock-timeout


    【解决方案1】:

    正如下面的警告所说:

    警告: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=!#
    

    【讨论】:

      猜你喜欢
      • 2018-07-28
      • 2022-12-02
      • 1970-01-01
      • 2022-12-19
      • 2017-05-05
      • 2022-12-02
      • 1970-01-01
      • 2022-11-12
      相关资源
      最近更新 更多