pgsql: Fix assert in nested SQL procedure call

Поиск
Список
Период
Сортировка
От Peter Eisentraut
Тема pgsql: Fix assert in nested SQL procedure call
Дата
Msg-id E1fbYQs-0001Nd-Bg@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix assert in nested SQL procedure call

When executing CALL in PL/pgSQL, we need to set a snapshot before
invoking the to-be-called procedure.  Otherwise, the to-be-called
procedure might end up running without a snapshot.  For LANGUAGE SQL
procedures, this would result in an assertion failure.  (For most other
languages, this is usually not a problem, because those use SPI and SPI
sets snapshots in most cases.)  Setting the snapshot restores the
behavior of how CALL worked when it was handled as a generic SQL
statement in PL/pgSQL (exec_stmt_execsql()).

This change revealed another problem:  In SPI_commit(), we popped the
active snapshot before committing the transaction, to avoid "snapshot %p
still active" errors.  However, there is no particular reason why only
at most one snapshot should be on the stack.  So change this to pop all
active snapshots instead of only one.

Branch
------
REL_11_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/d89348976c51952293ffe35845c372ffa7e93b47

Modified Files
--------------
src/backend/executor/spi.c                         |  7 ++++-
.../plpgsql/src/expected/plpgsql_transaction.out   | 19 +++++++++++++
src/pl/plpgsql/src/pl_exec.c                       | 32 ++++++++++++++++++----
src/pl/plpgsql/src/sql/plpgsql_transaction.sql     | 20 ++++++++++++++
4 files changed, 72 insertions(+), 6 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Peter Eisentraut
Дата:
Сообщение: pgsql: Allow CALL with polymorphic type arguments
Следующее
От: Michael Paquier
Дата:
Сообщение: pgsql: Add note in pg_rewind documentation about read-only files