Предупреждение «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=!#