> Yeah, there's a bunch of conflicts in current master. I rebased > yesterday but I'm still composing the email for v4. Coming soon.
Okay, so here is v4 with these problems fixed, including correct propagation of constraint names to children tables, which I had inadvertently broken earlier. This one does pass the pg_upgrade tests and as far as I can see pg_dump does all the correct things also. I cleaned up the tests to remove everything that's unneeded, redundant, or testing behavior that no longer exists.
I changed the behavior of ALTER TABLE ONLY <parent> ADD PRIMARY KEY, so that it throws error in case a child does not have a NOT NULL constraint on one of the columns, rather than silently creating such a constraint. (This is how `master` currently behaves). I think this is better behavior, because it lets the user decide whether they want to scan the table to create that constraint or not. It's a bit crude at present, because (1) a child could have a NO INHERIT constraint and have further children, which would foil the check (I think changing find_inheritance_children to find_all_inheritors would be sufficient to fix this, but that's only needed in legacy inheritance not partitioning); (2) the error message doesn't have an errcode, and the wording might need work.
The indexing test case in regress failed with v4 patch.
alter table only idxpart add primary key (a); -- fail, no not-null constraint -ERROR: column a of table idxpart0 is not marked not null
+ERROR: column "a" of table "idxpart0" is not marked NOT NULL