Re: ERROR: argument to pg_get_expr() must come from system catalogs
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Dave Page <dpage@pgadmin.org>
Cc: PostgreSQL Hackers <pgsql-hackers@postgresql.org>, Heikki Linnakangas <heikki@enterprisedb.com>
Date: 2010-07-13T18:36:32Z
Lists: pgsql-hackers
Dave Page <dpage@pgadmin.org> writes: > We had a report of the above error from a pgAdmin user testing > 1.12.0b3 with PG 9.0b3. The (highly simplified) query below works fine > as a superuser: > SELECT pg_get_expr(proargdefaults, 'pg_catalog.pg_class'::regclass) > FROM pg_proc pr > LEFT OUTER JOIN pg_description des ON des.objoid=pr.oid > Run as a regular user though, we get the error. If I remove the join, > it works fine as the normal user. This is in a database owned by the > regular user. > Am I missing something obvious, or is there a bug here? Yeah, it's a bug. The code Heikki added in parse_expr.c isn't allowing for the possibility of join alias Vars. (There's another problem with it too, which is you can trivially circumvent the check, just by creating an operator based on pg_get_expr ...) I wasn't terribly happy with that approach to begin with. I think we need to rethink. regards, tom lane