mirror of
https://github.com/postgres/postgres.git
synced 2025-07-02 09:02:37 +03:00
Apply identity sequence values on COPY
A COPY into a table should apply identity sequence values just like it does for ordinary defaults. This was previously forgotten, leading to null values being inserted, which in turn would fail because identity columns have not-null constraints. Author: Michael Paquier <michael.paquier@gmail.com> Reported-by: Steven Winfield <steven.winfield@cantabcapital.com> Bug: #14952
This commit is contained in:
@ -23,6 +23,7 @@
|
||||
#include "access/sysattr.h"
|
||||
#include "access/xact.h"
|
||||
#include "access/xlog.h"
|
||||
#include "catalog/dependency.h"
|
||||
#include "catalog/pg_type.h"
|
||||
#include "commands/copy.h"
|
||||
#include "commands/defrem.h"
|
||||
@ -3067,8 +3068,19 @@ BeginCopyFrom(ParseState *pstate,
|
||||
{
|
||||
/* attribute is NOT to be copied from input */
|
||||
/* use default value if one exists */
|
||||
Expr *defexpr = (Expr *) build_column_default(cstate->rel,
|
||||
attnum);
|
||||
Expr *defexpr;
|
||||
|
||||
if (att->attidentity)
|
||||
{
|
||||
NextValueExpr *nve = makeNode(NextValueExpr);
|
||||
|
||||
nve->seqid = getOwnedSequence(RelationGetRelid(cstate->rel),
|
||||
attnum);
|
||||
nve->typeId = att->atttypid;
|
||||
defexpr = (Expr *) nve;
|
||||
}
|
||||
else
|
||||
defexpr = (Expr *) build_column_default(cstate->rel, attnum);
|
||||
|
||||
if (defexpr != NULL)
|
||||
{
|
||||
|
Reference in New Issue
Block a user