diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c index 47879994f78..9139a407858 100644 --- a/src/backend/commands/copyfrom.c +++ b/src/backend/commands/copyfrom.c @@ -657,7 +657,6 @@ CopyFrom(CopyFromState cstate) CopyMultiInsertInfo multiInsertInfo = {0}; /* pacify compiler */ int64 processed = 0; int64 excluded = 0; - int64 skipped = 0; bool has_before_insert_row_trig; bool has_instead_insert_row_trig; bool leafpart_use_multi_insert = false; @@ -1004,26 +1003,22 @@ CopyFrom(CopyFromState cstate) if (!NextCopyFrom(cstate, econtext, myslot->tts_values, myslot->tts_isnull)) break; - if (cstate->opts.on_error != COPY_ON_ERROR_STOP && + if (cstate->opts.on_error == COPY_ON_ERROR_IGNORE && cstate->escontext->error_occurred) { /* - * Soft error occurred, skip this tuple and deal with error - * information according to ON_ERROR. + * Soft error occurred, skip this tuple and just make + * ErrorSaveContext ready for the next NextCopyFrom. Since we + * don't set details_wanted and error_data is not to be filled, + * just resetting error_occurred is enough. */ - if (cstate->opts.on_error == COPY_ON_ERROR_IGNORE) - - /* - * Just make ErrorSaveContext ready for the next NextCopyFrom. - * Since we don't set details_wanted and error_data is not to - * be filled, just resetting error_occurred is enough. - */ - cstate->escontext->error_occurred = false; + cstate->escontext->error_occurred = false; /* Report that this tuple was skipped by the ON_ERROR clause */ pgstat_progress_update_param(PROGRESS_COPY_TUPLES_SKIPPED, - ++skipped); + cstate->num_errors); + /* Repeat NextCopyFrom() until no soft error occurs */ continue; }