Better error messages for %TYPE and %ROWTYPE in plpgsql
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: pgsql-hackers@lists.postgresql.org
Date: 2024-02-26T20:02:20Z
Lists: pgsql-hackers
Attachments
- v1-improve-percent-type-errors.patch (text/x-diff) patch v1
Per recent discussion[1], plpgsql returns fairly unhelpful "syntax error" messages when a %TYPE or %ROWTYPE construct references a nonexistent object. Here's a quick little finger exercise to try to improve that. The basic point is that plpgsql_parse_wordtype and friends are designed to return NULL rather than failing (at least when it's easy to do so), but that leaves the caller without enough info to deliver a good error message. There is only one caller, and it has no use at all for this behavior, so let's just change those functions to throw appropriate errors. Amusingly, plpgsql_parse_wordrowtype was already behaving that way, and plpgsql_parse_cwordrowtype did so in more cases than not, so we didn't even have a consistent "return NULL" story. Along the way I got rid of plpgsql_parse_cwordtype's restriction on what relkinds can be referenced. I don't really see the point of that --- as long as the relation has the desired column, the column's type is surely well-defined. regards, tom lane [1] https://www.postgresql.org/message-id/flat/88b574f4-cc08-46c5-826b-020849e5a356%40gelassene-pferde.biz
Commits
-
Improve plpgsql's error messages for incorrect %TYPE and %ROWTYPE.
- 2a6b47cb50eb 17.0 landed