Re: Constraint's NO INHERIT option is ignored in CREATE TABLE LIKE statement
Amit Langote <amitlangote09@gmail.com>
From: Amit Langote <amitlangote09@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Ildar Musin <ildar@adjust.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2020-02-20T02:36:12Z
Lists: pgsql-hackers
Attachments
- copy_constr_noinherit_v2.patch (text/plain) patch v2
On Thu, Feb 20, 2020 at 8:02 AM Tom Lane <tgl@sss.pgh.pa.us> wrote: > Ildar Musin <ildar@adjust.com> writes: > > My colleague Chris Travers discovered something that looks like a bug. > > Let's say we have a table with a constraint that is declared as NO INHERIT. > > ... > > Now when we want to make a copy of the table structure into a new table > > the `NO INHERIT` option is ignored. > > Hm, I agree that's a bug, since the otherwise-pretty-detailed CREATE TABLE > LIKE documentation makes no mention of such a difference between original > and cloned constraint. By the way, partitioned tables to not allow constraints that are marked NO INHERIT. For example, create table b (a int check (a > 0) no inherit) partition by list (a); ERROR: cannot add NO INHERIT constraint to partitioned table "b" We must ensure that partitioned tables don't accidentally end up with one via CREATE TABLE LIKE path. I tested Ildar's patch and things seem fine, but it might be better to add a test. Attached updated patch with that taken care of. Thanks, Amit
Commits
-
Ensure that CREATE TABLE LIKE copies any NO INHERIT constraint property.
- cacef172237f 13.0 landed