In 9af4159f in combination with cb9b66d3 a bunch of error messages were
changed from something like
"SELECT FOR UPDATE/SHARE is not allowed with UNION/INTERSECT/EXCEPT"
to
"row-level locks are not allowed with UNION/INTERSECT/EXCEPT"
because the intermediate state of
"SELECT FOR UPDATE/SHARE/KEY UPDATE/KEY SHARE is not allowed with
UNION/INTERSECT/EXCEPT"
was presumably considered too bulky.
I think that went too far in some cases. For example, the new message
"row-level locks must specify unqualified relation names"
has little to do with its original meaning.
In general, I find these new wordings to be a loss of clarity. There is
no indication on the SELECT man page or in the documentation index what
a "row-level lock" is at all.
I would suggest that these changes be undone, except that the old
"SELECT FOR ..." be replaced by a dynamic string that reverse-parses the
LockingClause to provide the actual clause that was used.