node-postgres: мультизапрос атомарный? - PullRequest
0 голосов
/ 31 августа 2018

При использовании pg-promise (на основе node-postgres) запрос multi кажется атомарным.

Например, следующий запрос PostgreSQL вообще не вставляет никаких строк, даже если только второй INSERT завершается с ошибкой из-за повторяющегося идентификатора. Транзакции не используются.

insert into mytable (id) values (1); insert into mytable (id) values (1)

Такое поведение кажется нелогичным и отличается от поведения psql. Это ошибка?

1 Ответ

0 голосов
/ 09 сентября 2018

Мои тесты показывают, что да, на удивление, это атомарно, то есть, если один запрос завершается неудачно, все они терпят неудачу, так же, как и внутри транзакции.

Я выясню, почему это так, и выложу обновление, если найду что-нибудь. См. открытый выпуск .

UPDATE

Расследование подтвердило, что именно PostgreSQL работает, когда несколько запросов отправляются в одной строке.

Документация для методов multi и multiResult была изменена соответственно:

Операция является атомарной, то есть все запросы выполняются в одной транзакции, если в строку запроса не включены явные BEGIN/COMMIT команды для разделения ее на несколько транзакций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...