Обсуждение: BUG #5910: Function pg_get_expr throwing error for non superuser
The following bug has been logged online:
Bug reference: 5910
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?
On 03.03.2011 10:59, tushar wrote:
> 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)
It was an oversight that we allowed that previously, because the user
can easily crash the backend by passing bogus values. Try 8.4.5 or
later, and you will get the same error that you do on 9.0.2.
--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com