You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
sql: do not attempt to re-execute portal after PL/pgSQL txn control
Previously, the PL/pgSQL transaction control statements (COMMIT/ROLLBACK)
did not work with the extended wire protocol. If the `CALL` statement was
executed via portal, we would attempt to re-execute the portal after the
original transaction ended. This would result in an error like
`unknown portal ""`.
This commit fixes the bug by replacing the original command with a dummy
`ExecStmt` command when resuming stored proc execution in a new transaction.
This allows the portal to be cleaned up with the first transaction without
attempting to resolve it after the fact. The fix is controlled by the session
var `use_proc_txn_control_extended_protocol_fix`, which is off by default,
and will be turned on in the following commit. Only this commit should be
backported prior to v25.3.
Informs #147701
Release note (bug fix): Fixed a bug that would cause a CALL statement
executed via a portal in the extended wire protocol to result in an error
like `unknown portal ""` if the stored procedure contained `COMMIT` or
`ROLLBACK` statements. The bug has existed since PL/pgSQL transaction
control statements were introduced in v24.1. The fix will be off by
default in versions prior to v25.3.
# Regression test for #147701: correctly handle a PL/pgSQL procedure that
51
+
# commits or rolls back the transaction.
52
+
send
53
+
Query {"String": "CREATE OR REPLACE PROCEDURE p() LANGUAGE PLpgSQL AS $$ BEGIN RAISE NOTICE 'foo'; COMMIT; RAISE NOTICE 'bar'; ROLLBACK; RAISE NOTICE 'baz'; END $$;"}
0 commit comments