Prevent ALTER TABLE DROP NOT NULL on child tables if parent column has it
От | Michael Paquier |
---|---|
Тема | Prevent ALTER TABLE DROP NOT NULL on child tables if parent column has it |
Дата | |
Msg-id | CAB7nPqTPXgX9HiyhhtAgpW7jbA1iskMCSoqXPEEB_KYXYy1E1Q@mail.gmail.com обсуждение исходный текст |
Ответы |
Re: Prevent ALTER TABLE DROP NOT NULL on child tables if parent column has it
|
Список | pgsql-hackers |
Hi all, A couple of months back the $subject has been mentioned, though nobody actually wrote a patch to prevent that: http://www.postgresql.org/message-id/21633.1448383428@sss.pgh.pa.us So here is one.. To put it short, it should not be possible to drop a NOT NULL constraint on a child relation when its parent table is using it, this should only be possible from the parent. Attached is a patch handling this problem by adding a new function in pg_inherits.c to fetch the list of parent relations for a given relation OID, and did some refactoring to stick with what is done when scanning child relations. And here is what this patch can do: =# create table parent (a int not null); CREATE TABLE =# create table child (a int not null); CREATE TABLE =# alter table child inherit parent ; ALTER TABLE =# alter table child alter COLUMN a drop not null; -- would work on HEAD ERROR: 42P16: cannot drop NOT NULL constraint for attribute "a" DETAIL: The same column in parent relation "parent" is marked NOT NULL LOCATION: ATExecDropNotNull, tablecmds.c:5281 =# alter table parent alter COLUMN a drop not null; -- works on parent ALTER TABLE =# \d child Table "public.child" Column | Type | Modifiers --------+---------+----------- a | integer | Inherits: parent I have added a new index to pg_inherits, so that's not something that could be back-patched, still it would be good to fix this weird behavior on HEAD. I am adding that to the next CF. Regards, -- Michael
Вложения
В списке pgsql-hackers по дате отправления: