pgsql: Collect dependency information for parsed CallStmts.
От | Tom Lane |
---|---|
Тема | pgsql: Collect dependency information for parsed CallStmts. |
Дата | |
Msg-id | E1qkqXS-005uYK-01@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Collect dependency information for parsed CallStmts. Parse analysis of a CallStmt will inject mutable information, for instance the OID of the called procedure, so that subsequent DDL may create a need to re-parse the CALL. We failed to detect this for CALLs in plpgsql routines, because no dependency information was collected when putting a CallStmt into the plan cache. That could lead to misbehavior or strange errors such as "cache lookup failed". Before commit ee895a655, the issue would only manifest for CALLs appearing in atomic contexts, because we re-planned non-atomic CALLs every time through anyway. It is now apparent that extract_query_dependencies() probably needs a special case for every utility statement type for which stmt_requires_parse_analysis() returns true. I wanted to add something like Assert(!stmt_requires_parse_analysis(...)) when falling out of extract_query_dependencies_walker without doing anything, but there are API issues as well as a more fundamental point: stmt_requires_parse_analysis is supposed to be applied to raw parser output, so it'd be cheating to assume it will give the correct answer for post-parse-analysis trees. I contented myself with adding a comment. Per bug #18131 from Christian Stork. Back-patch to all supported branches. Discussion: https://postgr.es/m/18131-576854e79c5cd264@postgresql.org Branch ------ REL_15_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/0e59266a5daf31ff5c9976dae1b328b6a0e52b3e Modified Files -------------- src/backend/optimizer/plan/setrefs.c | 23 ++++++++++++-- src/pl/plpgsql/src/expected/plpgsql_call.out | 47 ++++++++++++++++++++++++++++ src/pl/plpgsql/src/sql/plpgsql_call.sql | 38 ++++++++++++++++++++++ 3 files changed, 106 insertions(+), 2 deletions(-)
В списке pgsql-committers по дате отправления: