diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c index 64ac3063c61..0087585b2c4 100644 --- a/src/backend/commands/copyfrom.c +++ b/src/backend/commands/copyfrom.c @@ -1636,8 +1636,6 @@ BeginCopyFrom(ParseState *pstate, if (cstate->opts.on_error == COPY_ON_ERROR_SET_NULL) { - int attr_count = list_length(cstate->attnumlist); - /* * When data type conversion fails and ON_ERROR is SET_NULL, we need * ensure that the input column allow null values. ExecConstraints() @@ -1646,15 +1644,13 @@ BeginCopyFrom(ParseState *pstate, * check must be performed during the initial string-to-datum * conversion (see CopyFromTextLikeOneRow()). */ - cstate->domain_with_constraint = palloc0_array(bool, attr_count); + cstate->domain_with_constraint = palloc0_array(bool, num_phys_attrs); foreach_int(attno, cstate->attnumlist) { - int i = foreach_current_index(attno); - Form_pg_attribute att = TupleDescAttr(tupDesc, attno - 1); - cstate->domain_with_constraint[i] = DomainHasConstraints(att->atttypid, NULL); + cstate->domain_with_constraint[attno - 1] = DomainHasConstraints(att->atttypid, NULL); } } diff --git a/src/test/regress/expected/copy2.out b/src/test/regress/expected/copy2.out index 7600e5239d2..919eabd5f78 100644 --- a/src/test/regress/expected/copy2.out +++ b/src/test/regress/expected/copy2.out @@ -805,6 +805,10 @@ COPY t_on_error_null FROM STDIN WITH (on_error set_null); -- fail ERROR: domain d_int_not_null does not allow null values DETAIL: ON_ERROR SET_NULL cannot be applied because column "a" (domain d_int_not_null) does not accept null values. CONTEXT: COPY t_on_error_null, line 1, column a: null input +COPY t_on_error_null(c, a) FROM STDIN WITH (on_error set_null); -- fail +ERROR: domain d_int_not_null does not allow null values +DETAIL: ON_ERROR SET_NULL cannot be applied because column "a" (domain d_int_not_null) does not accept null values. +CONTEXT: COPY t_on_error_null, line 1, column a: null input COPY t_on_error_null FROM STDIN WITH (on_error set_null); -- fail ERROR: domain d_int_not_null does not allow null values DETAIL: ON_ERROR SET_NULL cannot be applied because column "a" (domain d_int_not_null) does not accept null values. diff --git a/src/test/regress/sql/copy2.sql b/src/test/regress/sql/copy2.sql index e0810109473..f853499021d 100644 --- a/src/test/regress/sql/copy2.sql +++ b/src/test/regress/sql/copy2.sql @@ -555,6 +555,10 @@ COPY t_on_error_null FROM STDIN WITH (on_error set_null); -- fail \N 11 13 \. +COPY t_on_error_null(c, a) FROM STDIN WITH (on_error set_null); -- fail +11 \N +\. + COPY t_on_error_null FROM STDIN WITH (on_error set_null); -- fail ss 11 14 \.