diff options
Diffstat (limited to 'src/backend/utils/adt/ruleutils.c')
-rw-r--r-- | src/backend/utils/adt/ruleutils.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 4df8cc5abf6..c92958149e8 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -2973,7 +2973,7 @@ pg_get_functiondef(PG_FUNCTION_ARGS) } /* And finally the function definition ... */ - tmp = SysCacheGetAttr(PROCOID, proctup, Anum_pg_proc_prosqlbody, &isnull); + (void) SysCacheGetAttr(PROCOID, proctup, Anum_pg_proc_prosqlbody, &isnull); if (proc->prolang == SQLlanguageId && !isnull) { print_function_sqlbody(&buf, proctup); @@ -3439,7 +3439,10 @@ print_function_sqlbody(StringInfo buf, HeapTuple proctup) { Query *query = lfirst_node(Query, lc); - get_query_def(query, buf, list_make1(&dpns), NULL, PRETTYFLAG_INDENT, WRAP_COLUMN_DEFAULT, 1); + /* It seems advisable to get at least AccessShareLock on rels */ + AcquireRewriteLocks(query, false, false); + get_query_def(query, buf, list_make1(&dpns), NULL, + PRETTYFLAG_INDENT, WRAP_COLUMN_DEFAULT, 1); appendStringInfoChar(buf, ';'); appendStringInfoChar(buf, '\n'); } @@ -3448,7 +3451,12 @@ print_function_sqlbody(StringInfo buf, HeapTuple proctup) } else { - get_query_def(castNode(Query, n), buf, list_make1(&dpns), NULL, 0, WRAP_COLUMN_DEFAULT, 0); + Query *query = castNode(Query, n); + + /* It seems advisable to get at least AccessShareLock on rels */ + AcquireRewriteLocks(query, false, false); + get_query_def(query, buf, list_make1(&dpns), NULL, + 0, WRAP_COLUMN_DEFAULT, 0); } } @@ -3467,7 +3475,7 @@ pg_get_function_sqlbody(PG_FUNCTION_ARGS) if (!HeapTupleIsValid(proctup)) PG_RETURN_NULL(); - SysCacheGetAttr(PROCOID, proctup, Anum_pg_proc_prosqlbody, &isnull); + (void) SysCacheGetAttr(PROCOID, proctup, Anum_pg_proc_prosqlbody, &isnull); if (isnull) { ReleaseSysCache(proctup); |