ALTER COLUMN TYPE vs. domain constraints
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: pgsql-hackers@postgreSQL.org
Date: 2017-10-27T18:15:30Z
Lists: pgsql-hackers
Attachments
- handle-domain-constraints-when-altering-column-type.patch (text/x-diff) patch
I found out that altering a column's type does not play nicely with domain constraints: tablecmds.c expects that only table constraints could depend on a column. Now, it's easy to hit that with domains over composite, so I propose to fix it in HEAD with the attached patch. However, if you really work at it, you can make it fail in the back branches too: regression=# create type comptype as (r float8, i float8); CREATE TYPE regression=# create domain silly as float8 check ((row(value,0)::comptype).r > 0); CREATE DOMAIN regression=# alter type comptype alter attribute r type varchar; ERROR: cache lookup failed for relation 0 Before commit 6784d7a1d, the ALTER actually went through, leaving a mess. Fortunately it doesn't actually crash afterwards, but you get things like regression=# select 0::silly; ERROR: ROW() column has type double precision instead of type character varying We could consider back-patching the attached to cover this, but I'm not entirely sure it's worth the trouble, because I haven't thought of any non-silly use-cases in the absence of domains over composite. Comments? regards, tom lane
Commits
-
Fix ALTER TABLE code to update domain constraints when needed.
- af20e2d728eb 11.0 landed
-
Rethink the dependencies recorded for FieldSelect/FieldStore nodes.
- 6784d7a1dc69 11.0 cited