From: | Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp> |
---|---|
To: | Etsuro Fujita <fujita(dot)etsuro(at)lab(dot)ntt(dot)co(dot)jp>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Oddity in COPY FROM handling of check constraints on partition tables |
Date: | 2018-03-28 01:28:52 |
Message-ID: | d71ee5d4-b4b7-f6d1-c375-0af053f7585f@lab.ntt.co.jp |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Fujita-san,
On 2018/03/27 22:00, Etsuro Fujita wrote:
> Hi,
>
> While updating the tuple-routing-for-foreign-partitions patch, I noticed
> oddity in the COPY FROM handling of check constraints on partition
> tables. Here is an example:
>
> postgres=# create table pt (a int, b int) partition by list (a);
> CREATE TABLE
> postgres=# create table p1 partition of pt for values in (1);
> CREATE TABLE
> postgres=# alter table p1 add check (b > 0);
> ALTER TABLE
> postgres=# copy pt from '/home/pgsql/copy_data.csv' (format csv,
> delimiter ',');
> COPY 1
> postgres=# select tableoid::regclass, * from pt;
> tableoid | a | b
> ----------+---+----
> p1 | 1 | -1
> (1 row)
>
> where the file '/home/pgsql/copy_data.csv' has a single row data
>
> $ cat /home/pgsql/copy_data.csv
> 1,-1
>
> which violates the constraint on the column b (ie, b > 0), so this
> should abort. The reason for that is because CopyFrom looks at the
> parent relation's constraints, not the partition's constraints, when
> checking the constraint against the input row.
Good catch, thanks!
> Attached is a patch for fixing this issue.
That looks good to me. This one would need to be back-patched to v10.
Thanks,
Amit
From | Date | Subject | |
---|---|---|---|
Next Message | Michael Paquier | 2018-03-28 01:34:49 | Re: PQHost() undefined behavior if connecting string contains both host and hostaddr types |
Previous Message | Andres Freund | 2018-03-28 00:58:46 | Re: [HACKERS] logical decoding of two-phase transactions |