mirror of
https://github.com/postgres/postgres.git
synced 2025-07-17 06:41:09 +03:00
Report progress of COPY commands
This commit introduces a view pg_stat_progress_copy, reporting progress of COPY commands. This allows rough estimates how far a running COPY progressed, with the caveat that the total number of bytes may not be available in some cases (e.g. when the input comes from the client). Author: Josef Šimánek Reviewed-by: Fujii Masao, Bharath Rupireddy, Vignesh C, Matthias van de Meent Discussion: https://postgr.es/m/CAFp7QwqMGEi4OyyaLEK9DR0+E+oK3UtA4bEjDVCa4bNkwUY2PQ@mail.gmail.com Discussion: https://postgr.es/m/CAFp7Qwr6_FmRM6pCO0x_a0mymOfX_Gg+FEKet4XaTGSW=LitKQ@mail.gmail.com
This commit is contained in:
@ -25,6 +25,7 @@
|
||||
#include "access/xlog.h"
|
||||
#include "commands/copy.h"
|
||||
#include "commands/copyfrom_internal.h"
|
||||
#include "commands/progress.h"
|
||||
#include "commands/trigger.h"
|
||||
#include "executor/execPartition.h"
|
||||
#include "executor/executor.h"
|
||||
@ -35,6 +36,7 @@
|
||||
#include "libpq/pqformat.h"
|
||||
#include "miscadmin.h"
|
||||
#include "optimizer/optimizer.h"
|
||||
#include "pgstat.h"
|
||||
#include "rewrite/rewriteHandler.h"
|
||||
#include "storage/fd.h"
|
||||
#include "tcop/tcopprot.h"
|
||||
@ -1100,9 +1102,10 @@ CopyFrom(CopyFromState cstate)
|
||||
/*
|
||||
* We count only tuples not suppressed by a BEFORE INSERT trigger
|
||||
* or FDW; this is the same definition used by nodeModifyTable.c
|
||||
* for counting tuples inserted by an INSERT command.
|
||||
* for counting tuples inserted by an INSERT command. Update
|
||||
* progress of the COPY command as well.
|
||||
*/
|
||||
processed++;
|
||||
pgstat_progress_update_param(PROGRESS_COPY_LINES_PROCESSED, ++processed);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1415,6 +1418,12 @@ BeginCopyFrom(ParseState *pstate,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* initialize progress */
|
||||
pgstat_progress_start_command(PROGRESS_COMMAND_COPY,
|
||||
cstate->rel ? RelationGetRelid(cstate->rel) : InvalidOid);
|
||||
cstate->bytes_processed = 0;
|
||||
|
||||
/* We keep those variables in cstate. */
|
||||
cstate->in_functions = in_functions;
|
||||
cstate->typioparams = typioparams;
|
||||
@ -1479,6 +1488,8 @@ BeginCopyFrom(ParseState *pstate,
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("\"%s\" is a directory", cstate->filename)));
|
||||
|
||||
pgstat_progress_update_param(PROGRESS_COPY_BYTES_TOTAL, st.st_size);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1522,6 +1533,8 @@ EndCopyFrom(CopyFromState cstate)
|
||||
cstate->filename)));
|
||||
}
|
||||
|
||||
pgstat_progress_end_command();
|
||||
|
||||
MemoryContextDelete(cstate->copycontext);
|
||||
pfree(cstate);
|
||||
}
|
||||
|
Reference in New Issue
Block a user