Автокоммит выключен, НАЧАЛО и предупреждение о транзакции в процессе - PullRequest
0 голосов
/ 29 ноября 2018

Мне нравится иметь это в моих ~/.psqlrc:

\set autocommit off

Мне также нравится это в верхней части моих filename.sql сценариев:

BEGIN;

... вЕсли эти сценарии выполняются другими пользователями, использующими автокоммит.

Однако при этом выдаются предупреждения:

WARNING:  there is already a transaction in progress

Как отключить эти раздражающие предупреждения?Есть ли какая-то команда BEGIN IF NOT ALREADY BEGUN?

1 Ответ

0 голосов
/ 29 ноября 2018

Ваши две настройки противоречат друг другу.

Если вы включите режим автоматической фиксации в psql, ваши сценарии должны выглядеть следующим образом:

-- statement 1
-- statement 2
...
COMMIT;
-- statement 3
...
COMMIT;

Это потому, что режим автоматической фиксации автоматически добавитBEGIN перед первым оператором и перед каждым оператором после COMMIT или ROLLBACK.Это связано с тем, что PostgreSQL не имеет режима автоматической фиксации, поэтому psql «притворяется».

Теперь, если ваш скрипт начинается с BEGIN, это приведет к двум BEGIN с сразу после каждогодругое, что приведет к наблюдаемому предупреждению.

Возможно, было бы лучше начать свои сценарии с

\set autocommit on

, чтобы убедиться, что все согласовано.

...