Progress Reporting

ProtonBase has the ability to report the progress of certain commands during command execution. Currently, the only commands which support progress reporting are CREATE INDEX and COPY.

CREATE INDEX Progress Reporting

Whenever CREATE INDEX or REINDEX is running, the pg_stat_progress_create_index view will contain one row for each backend that is currently creating indexes. The tables below describe the information that will be reported and provide information about how to interpret it.

Table pg_stat_progress_create_index View

Column TypeDescription
pid integer
Process ID of backend.
datid oid
OID of the database to which this backend is connected.
datname name
Name of the database to which this backend is connected.
relid oid
OID of the table on which the index is being created.
index_relid oid
OID of the index being created or reindexed. During a non-concurrent CREATE INDEX, this is 0.
command text
The command that is running: CREATE INDEXCREATE INDEX CONCURRENTLYREINDEX, or REINDEX CONCURRENTLY.
phase text
Current processing phase of index creation.
lockers_total bigint
Total number of lockers to wait for, when applicable.
lockers_done bigint
Number of lockers already waited for.
current_locker_pid bigint
Process ID of the locker currently being waited for.
blocks_total bigint
Total number of blocks to be processed in the current phase.
blocks_done bigint
Number of blocks already processed in the current phase.
tuples_total bigint
Total number of tuples to be processed in the current phase.
tuples_done bigint
Number of tuples already processed in the current phase.
partitions_total bigint
When creating an index on a partitioned table, this column is set to the total number of partitions on which the index is to be created. This field is 0 during a REINDEX.
partitions_done bigint
When creating an index on a partitioned table, this column is set to the number of partitions on which the index has been created. This field is 0 during a REINDEX.

Table CREATE INDEX Phases

PhaseDescription
initializingCREATE INDEX or REINDEX is preparing to create the index. This phase is expected to be very brief.
waiting for writers before buildCREATE INDEX CONCURRENTLY or REINDEX CONCURRENTLY is waiting for transactions with write locks that can potentially see the table to finish. This phase is skipped when not in concurrent mode. Columns lockers_totallockers_done and current_locker_pid contain the progress information for this phase.
building indexThe index is being built by the access method-specific code. In this phase, access methods that support progress reporting fill in their own progress data, and the subphase is indicated in this column. Typically, blocks_total and blocks_done will contain progress data, as well as potentially tuples_total and tuples_done.
waiting for writers before validationCREATE INDEX CONCURRENTLY or REINDEX CONCURRENTLY is waiting for transactions with write locks that can potentially write into the table to finish. This phase is skipped when not in concurrent mode. Columns lockers_totallockers_done and current_locker_pid contain the progress information for this phase.
index validation: scanning indexCREATE INDEX CONCURRENTLY is scanning the index searching for tuples that need to be validated. This phase is skipped when not in concurrent mode. Columns blocks_total (set to the total size of the index) and blocks_done contain the progress information for this phase.
index validation: sorting tuplesCREATE INDEX CONCURRENTLY is sorting the output of the index scanning phase.
index validation: scanning tableCREATE INDEX CONCURRENTLY is scanning the table to validate the index tuples collected in the previous two phases. This phase is skipped when not in concurrent mode. Columns blocks_total (set to the total size of the table) and blocks_done contain the progress information for this phase.
waiting for old snapshotsCREATE INDEX CONCURRENTLY or REINDEX CONCURRENTLY is waiting for transactions that can potentially see the table to release their snapshots. This phase is skipped when not in concurrent mode. Columns lockers_totallockers_done and current_locker_pid contain the progress information for this phase.
waiting for readers before marking deadREINDEX CONCURRENTLY is waiting for transactions with read locks on the table to finish, before marking the old index dead. This phase is skipped when not in concurrent mode. Columns lockers_totallockers_done and current_locker_pid contain the progress information for this phase.
waiting for readers before droppingREINDEX CONCURRENTLY is waiting for transactions with read locks on the table to finish, before dropping the old index. This phase is skipped when not in concurrent mode. Columns lockers_totallockers_done and current_locker_pid contain the progress information for this phase.

COPY Progress Reporting

Whenever COPY is running, the pg_stat_progress_copy view will contain one row for each backend that is currently running a COPY command. The table below describes the information that will be reported and provides information about how to interpret it.

Table 28.44. pg_stat_progress_copy View

Column TypeDescription
pid integer
Process ID of backend.
datid oid
OID of the database to which this backend is connected.
datname name
Name of the database to which this backend is connected.
relid oid
OID of the table on which the COPY command is executed. It is set to 0 if copying from a SELECT query.
command text
The command that is running: COPY FROM, or COPY TO.
type text
The io type that the data is read from or written to: FILEPROGRAMPIPE (for COPY FROM STDIN and COPY TO STDOUT), or CALLBACK (used for example during the initial table synchronization in logical replication).
bytes_processed bigint
Number of bytes already processed by COPY command.
bytes_total bigint
Size of source file for COPY FROM command in bytes. It is set to 0 if not available.
tuples_processed bigint
Number of tuples already processed by COPY command.
tuples_excluded bigint
Number of tuples not processed because they were excluded by the WHERE clause of the COPY command.