Thread: Issue with listing same tablenames from different schemas in the search_path
Issue with listing same tablenames from different schemas in the search_path
From
Nikhil Sontakke
Date:
Hi, <br /><br />Consider the following sequence of commands in a psql session:<br /><br />postgres=#create table public.sample(xint);<br />postgres=#create schema new;<br />postgres=#create table new.sample(x int);<br />postgres=#setsearch_path=public,new;<br /><br />postgres=#\dt<br />Schema | Name | Type | Owner<br />-------------------------------------------<br/>public | sample | table | postgres<br />(1 row)<br /><br />We shouldhave seen two entries in the above listing. So looks like a bug to me.<br /><br />The issue is with the call to pg_table_is_visible().While scanning for the second entry, it breaks out because there is a matching entry with the samename in the first schema. What we need is a variation of this function which checks for visibility of the correspondingnamespace in the search path and emit it out too if so.<br /><br />Thoughts? I can cook up a patch for this.<br /><br />Regards,<br />Nikhils<br />
Re: Issue with listing same tablenames from different schemas in the search_path
From
Heikki Linnakangas
Date:
On 02.10.2011 08:31, Nikhil Sontakke wrote: > Consider the following sequence of commands in a psql session: > > postgres=#create table public.sample(x int); > postgres=#create schema new; > postgres=#create table new.sample(x int); > postgres=#set search_path=public,new; > > postgres=#\dt > Schema | Name | Type | Owner > ------------------------------------------- > public | sample | table | postgres > (1 row) > > We should have seen two entries in the above listing. So looks like a bug to > me. No, that's the way it's designed to work. It shows the objects that are visible to you, without schema-qualifying them. See http://www.postgresql.org/docs/9.0/interactive/app-psql.html#APP-PSQL-PATTERNS : > Whenever the pattern parameter is omitted completely, the \d commands display all objects that are visible in the currentschema search path — this is equivalent to using * as the pattern. (An object is said to be visible if its containingschema is in the search path and no object of the same kind and name appears earlier in the search path. This isequivalent to the statement that the object can be referenced by name without explicit schema qualification.) To see allobjects in the database regardless of visibility, use *.* as the pattern. -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com
Re: Issue with listing same tablenames from different schemas in the search_path
From
Nikhil Sontakke
Date:
postgres=#create table public.sample(x int);
Hmmm, ok. Makes sense after reading the documentation, but seems a bit surprising/confusing at first glance. Never mind.
Regards,
Nikhils
No, that's the way it's designed to work. It shows the objects that are visible to you, without schema-qualifying them. See http://www.postgresql.org/docs/9.0/interactive/app-psql.html#APP-PSQL-PATTERNS :postgres=#create schema new;
postgres=#create table new.sample(x int);
postgres=#set search_path=public,new;
postgres=#\dt
Schema | Name | Type | Owner
-------------------------------------------
public | sample | table | postgres
(1 row)
We should have seen two entries in the above listing. So looks like a bug to
me.
Hmmm, ok. Makes sense after reading the documentation, but seems a bit surprising/confusing at first glance. Never mind.
Regards,
Nikhils
Whenever the pattern parameter is omitted completely, the \d commands display all objects that are visible in the current schema search path — this is equivalent to using * as the pattern. (An object is said to be visible if its containing schema is in the search path and no object of the same kind and name appears earlier in the search path. This is equivalent to the statement that the object can be referenced by name without explicit schema qualification.) To see all objects in the database regardless of visibility, use *.* as the pattern.
--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com