Обсуждение: BUG #2850: Cannot select from information_schema.schemat
The following bug has been logged online: Bug reference: 2850 Logged by: Tony Marston Email address: tony@marston-home.demon.co.uk PostgreSQL version: 8.2 Operating system: Windows XP Description: Cannot select from information_schema.schemat Details: If I am logged on as a user other than 'postgres' and I try the query SELECT * FROM information_schema.schemata I get no results. Yet if I try the equivalent query SELECT * FROM pg_namespace I can see all the available schema names. Why is there a difference when the two queries are supposed to provide the same results?
"Tony Marston" <tony@marston-home.demon.co.uk> writes:
> If I am logged on as a user other than 'postgres' and I try the query
> SELECT * FROM information_schema.schemata
> I get no results. Yet if I try the equivalent query
> SELECT * FROM pg_namespace
> I can see all the available schema names.
> Why is there a difference when the two queries are supposed to provide the
> same results?
They're not "supposed to provide the same results". Per SQL99, the
schemata view is supposed to
Identify the schemata in a catalog that are owned by a given user.
and the SQL definition in the spec makes it clear that it only shows
schemas owned by CURRENT_USER or a role that CURRENT_USER is a member
of.
regards, tom lane
--On Donnerstag, Dezember 21, 2006 15:47:40 +0000 Tony Marston
<tony@marston-home.demon.co.uk> wrote:
> The fact that the SQL standard says that the schemata view is supposed to
> "Identify the schemata in a catalog that are owned by a given user" does
> not automatically mean that the information can *ONLY* be accessed by the
> owner. Any user should be able to see the schema to which they have
> access, owner or not.
The standard doesn't specify any given user, it specifies CURRENT_USER. Only
if CURRENT_USER is the owner of a schema (or CURRENT_USER inherits
ownership by membership) you are able (and allowed) to see the schema. While
I admit that this makes it hard to identify catalog schemata by an DBA via
the information_schema, the standard is quite clear here. I don't see any
ambiguity here....
If you need to go beyond what the standard allows, you have to use the
system
catalog.
--
Thanks
Bernd