The following bug has been logged online:
Bug reference: 5909
Logged by: tushar
Email address: tushar.qa@gmail.com
PostgreSQL version: 9.0.2
Operating system: RHEL-5 32 bit
Description: Function pg_get_expr throwing error for non superuser
Details:
Pls refer this below scenario
PG 8.4.4:-
=========
connect to non superuser :-
postgres=# \c - t
psql (8.4.4)
You are now connected to database "postgres" as user "t".
postgres=> select pg_get_expr('a',null);
pg_get_expr
-------------
(1 row)
postgres=>
PG 9.0.2
=========
connect to non superuser :-
postgres=# \c - t
You are now connected to database "postgres" as user "t".
postgres=> select pg_get_expr('a',null);
ERROR: argument to pg_get_expr() must come from system catalogs
postgres=>
Workaround:- if user is superuser then it is working fine..
I found a thread somewhat related to this above issue :-
http://archives.postgresql.org/pgsql-hackers/2010-07/msg00503.php
which look fixed now in PG 9.0.2
e.g:-
postgres=> 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 limit 0;
pg_get_expr
-------------
(0 rows)
postgres=>
so i feel this query :-select pg_get_expr('a',null);
should also work in PG 9.0.2 but it is not working. is this an expected
behavior