Предупреждение «SET LOCAL можно использовать только в блоках транзакций» в PostgreSQL

При установке lock_timeout на 10 секунд локально в psql, как показано ниже:

      SET LOCAL lock_timeout = 10000;

Я получил предупреждение ниже на psql:

ВНИМАНИЕ: SET LOCAL можно использовать только в блоках транзакций.

Затем вообще не применяется к следующей транзакции, поэтому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;к следующей транзакции?

1 ответ

Как сказано в предупреждении ниже:

ВНИМАНИЕ: SET LOCAL можно использовать только в блоках транзакций.

Вам нужно использоватьSET LOCALв транзакции после запускаBEGINтогда он работает правильно, как показано ниже:

      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=!#
Другие вопросы по тегам