Thread: BUG #8405: user can create a system table(eg, pg_class)

BUG #8405: user can create a system table(eg, pg_class)

From
syxjxia@gmail.com
Date:
The following bug has been logged on the website:

Bug reference:      8405
Logged by:          xjxia
Email address:      syxjxia@gmail.com
PostgreSQL version: 9.2.2
Operating system:   ubuntu11.04 x86_64
Description:

postgres=# create table pg_class(a int);
CREATE TABLE
postgres=# insert into pg_class values (1);
ERROR:  null value in column "relnamespace" violates not-null constraint
DETAIL:  Failing row contains (1, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null).
postgres=#

Re: BUG #8405: user can create a system table(eg, pg_class)

From
Heikki Linnakangas
Date:
On 28.08.2013 05:01, syxjxia@gmail.com wrote:
> postgres=# create table pg_class(a int);
> CREATE TABLE
> postgres=# insert into pg_class values (1);
> ERROR:  null value in column "relnamespace" violates not-null constraint
> DETAIL:  Failing row contains (1, null, null, null, null, null, null, null,
> null, null, null, null, null, null, null, null, null, null, null, null,
> null, null, null, null, null, null, null).

That's not a bug. The table created is in the public schema, while all
the system tables are in pg_catalog schema. Yes, it's possible to create
a table in another schema with the same name. To avoid hijacking
applications that access the system tables, pg_catalog is implicitly in
front of search_path, if it's not listed there explicitly. So when you
do the insert, it refers to pg_catalog.pg_class.

- Heikki