Give better hints for ambiguous or unreferenceable columns

Enterprise / PostgreSQL - Tom Lane [sss.pgh.pa.us] - 22 November 2022 23:46 UTC

Examine ParseNamespaceItem flags to detect whether a column name is unreferenceable for lack of LATERAL, or could be referenced if a qualified name were used, and give better hints for such cases. Also, don't phrase the message to imply that there's only one matching column when there is really more than one.

Many of the regression test output changes are not very interesting, but just reflect reclassifying the "There is a column ... but it cannot be referenced from this part of the query" messages as DETAIL rather than HINT. They are details per our style guide, in the sense of being factual rather than offering advice; and this change provides room to offer actual HINTs about what to do.

While here, adjust the fuzzy-name-matching code to be a shade less impenetrable. It was overloading the meanings of FuzzyAttrMatchState fields way too much IMO, so splitting them into multiple fields seems to make it clearer. It's not like we need to shave bytes in that struct.

Per discussion of bug #17233 from Alexander Korolev.

Discussion: https://postgr.es/m/17233-afb9d806aaa64b17@postgresql.org

56d0ed3b75 Give better hints for ambiguous or unreferenceable columns.
src/backend/parser/parse_relation.c | 291 ++++++++++++++++++--------
src/test/regress/expected/insert_conflict.out | 2 +-
src/test/regress/expected/join.out | 31 ++-
src/test/regress/expected/merge.out | 8 +-
src/test/regress/expected/rules.out | 3 +-
src/test/regress/expected/union.out | 2 +-
src/test/regress/sql/join.sql | 2 +
7 files changed, 233 insertions(+), 106 deletions(-)

Upstream: git.postgresql.org


  • Share