diff options
Diffstat (limited to 'src/backend/parser/parse_relation.c')
-rw-r--r-- | src/backend/parser/parse_relation.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c index f2ccf0d7453..3840c2f3ed5 100644 --- a/src/backend/parser/parse_relation.c +++ b/src/backend/parser/parse_relation.c @@ -273,11 +273,17 @@ searchRangeTable(ParseState *pstate, RangeVar *relation) * If it's an unqualified name, check for possible CTE matches. A CTE * hides any real relation matches. If no CTE, look for a matching * relation. + * + * NB: It's not critical that RangeVarGetRelid return the correct answer + * here in the face of concurrent DDL. If it doesn't, the worst case + * scenario is a less-clear error message. Also, the tables involved in + * the query are already locked, which reduces the number of cases in + * which surprising behavior can occur. So we do the name lookup unlocked. */ if (!relation->schemaname) cte = scanNameSpaceForCTE(pstate, refname, &ctelevelsup); if (!cte) - relId = RangeVarGetRelid(relation, true); + relId = RangeVarGetRelid(relation, NoLock, true, false); /* Now look for RTEs matching either the relation/CTE or the alias */ for (levelsup = 0; |