PostgreSQL - аналог неявных транзакций - PullRequest
0 голосов
/ 16 января 2019

Я использую PostgreSQL 10 от RDS (AWS).Так что учтите, что у меня нет полных прав на все, что я хочу

В PostgreSQL у меня есть некоторые функции, написанные на PL / pgSQL.

Из моего опыта работы с этими функциями я не могу запускать / фиксировать / откатывать транзакции.В блоке DO я тоже не могу этого сделать.

Это правильно?Так что за этим стоит логика ... Кажется, PostgreSQL ожидает, что каждая функция будет вызываться в контексте существующей транзакции.Правильно?

Но что, если я хочу, чтобы каждое выражение в моей функции выполнялось в отдельной (короткой) транзакции, т.е. иметь поведение, похожее на AUTOCOMMIT = ON?

Я нашел расширение, которое, возможно, может это сделать, но я не уверен.Я не знаю, имеет ли это отношение.https://www.postgresql.org/docs/10/ecpg-sql-set-autocommit.html

Нет ли в Postgres стандартного способа сделать это без необходимости загружать и устанавливать дополнительные пакеты / расширения?

Еще раз: я хочу, чтобы каждое утверждение в моей функции быловыполняется в отдельной (короткой) транзакции, т. е. иметь поведение, похожее на AUTOCOMMIT = ON.

Итак, я хочу что-то вроде этого: https://docs.microsoft.com/en-us/sql/t-sql/statements/set-implicit-transactions-transact-sql?view=sql-server-2017

1 Ответ

0 голосов
/ 16 января 2019

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

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

Я подозреваю, что лучше всего было бы запускать ваши функции на клиенте базы данных, где вы выполняете автоматическую фиксацию автоматически, а не как функцию в базе данных.

...