diff options
author | Andrew Dunstan <andrew@dunslane.net> | 2023-10-01 10:18:41 -0400 |
---|---|---|
committer | Andrew Dunstan <andrew@dunslane.net> | 2023-10-01 10:25:33 -0400 |
commit | 910eb61b2bbdb729c242ed20d5f6e0a392eb62da (patch) | |
tree | 9af6f16220418332c163499bc13ba3b7d3a34ca2 /src/backend/commands/copyfrom.c | |
parent | d5c5312dc8b66b4ad652ec54ed32029d621e1e93 (diff) | |
download | postgresql-910eb61b2bbdb729c242ed20d5f6e0a392eb62da.tar.gz postgresql-910eb61b2bbdb729c242ed20d5f6e0a392eb62da.zip |
Only evaluate default values as required when doing COPY FROM
Commit 9f8377f7a2 was a little too eager in fetching default values.
Normally this would not matter, but if the default value is not valid
for the type (e.g. a varchar that's too long) it caused an unnecessary
error.
Complaint and fix from Laurenz Albe
Backpatch to release 16.
Discussion: https://postgr.es/m/75a7b7483aeb331aa017328d606d568fc715b90d.camel@cybertec.at
Diffstat (limited to 'src/backend/commands/copyfrom.c')
-rw-r--r-- | src/backend/commands/copyfrom.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c index b47cb5c66da..65b3e56cd49 100644 --- a/src/backend/commands/copyfrom.c +++ b/src/backend/commands/copyfrom.c @@ -1569,7 +1569,14 @@ BeginCopyFrom(ParseState *pstate, /* Get default info if available */ defexprs[attnum - 1] = NULL; - if (!att->attgenerated) + /* + * We only need the default values for columns that do not appear in + * the column list, unless the DEFAULT option was given. We never need + * default values for generated columns. + */ + if ((cstate->opts.default_print != NULL || + !list_member_int(cstate->attnumlist, attnum)) && + !att->attgenerated) { Expr *defexpr = (Expr *) build_column_default(cstate->rel, attnum); |