Транзакции не работают нормально в хранимой процедуре PostgreSQL 11

У меня тоже была эта проблема. Простой «gradlew clean» и «gradlew build» сделали трюк.


Нажмите Build-> Clean Project и выполнит очистку gradle

0
задан Laurenz Albe 27 March 2019 в 14:13
поделиться

1 ответ

Ошибка возникает в самом начале вашей процедуры в выражении

START TRANSACTION;

Как и в документации говорится:

Новая транзакция запускается автоматически после завершения транзакции с использованием этих команд, поэтому отдельной команды START TRANSACTION не существует.

Это должно ответить на ваш первый вопрос.

Что касается второго, когда вы находитесь в ветви исключений, вы фактически откатили субтранзакцию, которая началась с BEGIN, который принадлежит предложению EXCEPTION (или после последнего COMMIT). Вы все еще в транзакции, поэтому вы можете выдать COMMIT и ROLLBACK.

К твоему третьему вопросу: нет, нет способа зафиксировать все до последнего исключения & rdquo ;. Вы можете получить это, только обернув каждый оператор в блок BEGIN ... EXCEPTION ... END, но это серьезно ухудшит вашу производительность (не считая код нечитабельным).

Используйте BEGIN ... EXCEPTION ... END блоков разумно, когда вы ожидаете, что оператор может потерпеть неудачу.

0
ответ дан Laurenz Albe 27 March 2019 в 14:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: