From: | Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp> |
---|---|
To: | Pg Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | ALTER TABLE parent SET WITHOUT OIDS and the oid column |
Date: | 2016-12-26 10:06:59 |
Message-ID: | cb13cfe7-a48c-5720-c383-bb843ab28298@lab.ntt.co.jp |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
I suspect the following is a bug:
create table foo (a int) with oids;
CREATE TABLE
create table bar (a int);
CREATE TABLE
alter table bar inherit foo;
ERROR: table "bar" without OIDs cannot inherit from table "foo" with OIDs
alter table bar set with oids;
ALTER TABLE
alter table bar inherit foo;
ALTER TABLE
alter table foo set without oids;
ERROR: relation 16551 has non-inherited attribute "oid"
Because:
select attinhcount from pg_attribute where attrelid = 'bar'::regclass and
attname = 'oid';
attinhcount
-------------
0
(1 row)
Which also means "oid" can be safely dropped from bar breaking the
invariant that if the parent table has oid column, its child tables must too:
alter table bar drop oid; -- or, alter table bar set without oids;
ALTER TABLE
Attached patches modifies MergeAttributesIntoExisting() such that we
increment attinhcount not only for user attributes, but also for the oid
system column if one exists.
Thoughts?
Thanks,
Amit
Attachment | Content-Type | Size |
---|---|---|
alter-table-inherit-oid-column-bug-1.patch | text/x-diff | 2.9 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Amit Langote | 2016-12-26 10:11:42 | Re: ALTER TABLE parent SET WITHOUT OIDS and the oid column |
Previous Message | Pavel Stehule | 2016-12-26 10:02:12 | Re: proposal: session server side variables |