BUG #5630: CREATE INDEX does not use schema search path
The following bug has been logged online:
Bug reference: 5630
Logged by: tbz
Email address: tbb@vollbio.de
PostgreSQL version: 8.3.11
Operating system: Debian Sqeeze
Description: CREATE INDEX does not use schema search path
Details:
1. Create a new schema like a login user
2. Write a script, that creates a new table pg_user (system table!) and
seperately an index on it
3. Run the script
The table is created in the "user" schema. The creating of the index results
in
[Error Code: 0, SQL State: 42501] FEHLER: Berechtigung nur für
Eigentümer der Relation pg_user
I have to use the full qualified table name while creating the index.
pg_user seems to be a system table, but I think this error will also be
occured, when there is an table with an identical name in schema public.
Bye Thomas
---------- Snip ----------
CREATE TABLE pg_user (
login_name VARCHAR(50) NOT NULL
);
CREATE UNIQUE INDEX ak1_login_name ON pg_user(login_name);
---------- Snap ----------
"tbz" <tbb@vollbio.de> writes:
CREATE TABLE pg_user (
login_name VARCHAR(50) NOT NULL
);
CREATE UNIQUE INDEX ak1_login_name ON pg_user(login_name);
[fails]
This is expected, given the default search_path settings in which
pg_catalog is implicitly at the front of the path. When you create
pg_user, it's created in whichever schema is the creation target schema
(ie, the first schema listed explicitly in search_path, perhaps
"public"). However, that's still behind pg_catalog, so the unqualified
reference to pg_user in the CREATE INDEX command resolves as
pg_catalog.pg_user. See
http://www.postgresql.org/docs/8.3/static/ddl-schemas.html#DDL-SCHEMAS-CATALOG
regards, tom lane