в другую, и произошла ошибка во внутренней транзакции, то внешняя отменится?
Если речь про ванильный постгрес, то у вас не будет вложенных транзакций вообще. Если про автономные транзакции от Постгреспро, то фейл внутренней транзакции на внешнюю не повлияет.
А что будет делать ванильный постгрес, если написать это BEGIN делаем что-то BEGIN делаем что-то еще тут ошибка COMMIT COMMIT
В чистом Postgres SQL подобная вещь называется "savepoint". У неё нет своего commit. Только rollback. По, в принцыпе, достаточно понятным синтаксическим причинам. rollback to <savepoint> -- возвращает ситуацыю к его началу, независимо от того, была ошыбка после или нет. Так что позволяет отменить ошыбку. В pl/pgsql -- запрещены savepoint, вместо них есть begin .. exception . На том жэ коде внутри. Собственно, именно потому savepoint там и неработают -- что вместо них висит begin .. exception. В общем, если так обрабатывать ошыбки -- то тожэ можно восстановиться от ошбыки внутри блока.
Обсуждают сегодня