I wrote: > So somehow the constraint-validation code isn't getting applied in > this case. I suspect you'll find it's a pretty localized fix.
I traced through this and found that for alter table t1 add column f2 int not null; transformAlterTableStmt will produce an AT_AddColumn subcommand containing a ColumnDef with is_not_null = false, followed by an AT_SetNotNull subcommand. But for alter table t1 add column f2 int primary key; it produces an AT_AddColumn subcommand containing a ColumnDef with is_not_null = true, followed by an AT_AddIndex subcommand. This is not super consistent, and maybe should be cleaned up; but the intent is perfectly clear in both cases so I think tablecmds.c should be able to do the right thing with either. It looks to me that the appropriate fix involves doing tab->new_notnull |= colDef->is_not_null; somewhere in ATExecAddColumn; but I haven't tested this much. regards, tom lane -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers