Re: Two constraints with the same name not always allowed
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Andrew Gierth <andrew@tao11.riddles.org.uk>
Cc: André Hänsel <andre@webkr.de>, pgsql-bugs@postgresql.org
Date: 2018-09-02T22:31:04Z
Lists: pgsql-bugs
Attachments
- 0001-enforce-constraint-name-uniqueness.patch (text/x-diff) patch 0001
- 0002-enforce-constraint-name-uniqueness-more.patch (text/x-diff) patch 0002
I wrote: > I think the code supposes that checking for duplicate relation name > is sufficient; but of course it is not if we want a table's constraints > to have distinct names, since they may not all correspond to indexes. > I do not think we can back-patch a change here --- it might break > databases that are working satisfactorily today. But it seems like > we could tighten this up in HEAD and maybe v11. Attached is a draft patchset for this. 0001 replaces the existing index with a unique one and makes necessary backend code adjustments. Said adjustments could have been as simple as s/ConstraintRelidIndexId/ConstraintRelidTypidNameIndexId/g -- I tried that, and it passed regression tests -- but I couldn't resist the temptation to fix a few places that could make better use of the redesigned index. 0002 adds user-friendliness by installing a nicer error message for the complained-of case and by improving ChooseIndexName to avoid autogenerating index names that will conflict with existing constraints. I didn't look for possible documentation changes yet, but I think the code changes are OK. regards, tom lane
Commits
-
Fully enforce uniqueness of constraint names.
- fb466d7b5dbe 11.0 landed
- 17b7c302b5fc 12.0 landed