Thread
-
Re: BUG #19097: System catalog modifications are allowed by alter
Laurenz Albe <laurenz.albe@cybertec.at> — 2025-10-29T12:09:32Z
On Wed, 2025-10-29 at 04:41 +0000, PG Bug reporting form wrote: > > PostgreSQL version: 18.0 > > ```sql > create table pg_catalog.t (i int); > ERROR: permission denied to create "pg_catalog.t" > DETAIL: System catalog modifications are currently disallowed. > > create table t (i int); > CREATE TABLE > > alter table t set schema pg_catalog; > ALTER TABLE > > \dS+ t > Table "pg_catalog.t" > Column | Type | Collation | Nullable | Default | Storage | Compression | > Stats target | Description > --------+---------+-----------+----------+---------+---------+-------------+--------------+------------- > i | integer | | | | plain | | > > > Replica Identity: NOTHING > Access method: heap > > drop table pg_catalog.t; > DROP TABLE > ``` That is confusing, but it seems intentional. See the following comment in src/backend/catalog/heap.c: /* * Don't allow creating relations in pg_catalog directly, even though it * is allowed to move user defined relations there. Semantics with search * paths including pg_catalog are too confusing for now. * * But allow creating indexes on relations in pg_catalog even if * allow_system_table_mods = off, upper layers already guarantee it's on a * user defined relation, not a system one. */ This was deliberately added by commit 8e18d04d4daf. I couldn't find the pertinent discussion in the archives. I don't think it is necessary to document that... Yours, Laurenz Albe