Re: Regression in COPY FROM caused by 9f8377f7a2

Andrew Dunstan <andrew@dunslane.net>

From: Andrew Dunstan <andrew@dunslane.net>
To: Laurenz Albe <laurenz.albe@cybertec.at>, pgsql-hackers@lists.postgresql.org
Date: 2023-09-25T15:06:58Z
Lists: pgsql-hackers
On 2023-09-25 Mo 04:59, Laurenz Albe wrote:
> On Mon, 2023-09-25 at 09:54 +0200, Laurenz Albe wrote:
>> In v16 and later, the following fails:
>>
>> CREATE TABLE boom (t character varying(5) DEFAULT 'a long string');
>>
>> COPY boom FROM STDIN;
>> ERROR:  value too long for type character varying(5)
>>
>> In PostgreSQL v15 and earlier, the COPY statement succeeds.
>>
>> The error is thrown in BeginCopyFrom in line 1578 (HEAD)
>>
>>    defexpr = expression_planner(defexpr);
>>
>> Bisecting shows that the regression was introduced by commit 9f8377f7a2,
>> which introduced DEFAULT values for COPY FROM.


Oops :-(


> I suggest the attached fix, which evaluates default values only if
> the DEFAULT option was specified or if the column does not appear in
> the column list of COPY.
>

Patch looks reasonable, haven't tested yet.


cheers


andrew

--
Andrew Dunstan
EDB:https://www.enterprisedb.com

Commits

  1. Only evaluate default values as required when doing COPY FROM

  2. Add a DEFAULT option to COPY FROM