Progress Reporting
Tacnode 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 | 
|---|
| pidintegerProcess ID of backend. | 
| datidoidOID of the database to which this backend is connected. | 
| datnamenameName of the database to which this backend is connected. | 
| relidoidOID of the table on which the index is being created. | 
| index_relidoidOID of the index being created or reindexed. During a non-concurrent CREATE INDEX, this is 0. | 
| commandtextThe command that is running: CREATE INDEX,CREATE INDEX CONCURRENTLY,REINDEX, orREINDEX CONCURRENTLY. | 
| phasetextCurrent processing phase of index creation. | 
| lockers_totalbigintTotal number of lockers to wait for, when applicable. | 
| lockers_donebigintNumber of lockers already waited for. | 
| current_locker_pidbigintProcess ID of the locker currently being waited for. | 
| blocks_totalbigintTotal number of blocks to be processed in the current phase. | 
| blocks_donebigintNumber of blocks already processed in the current phase. | 
| tuples_totalbigintTotal number of tuples to be processed in the current phase. | 
| tuples_donebigintNumber of tuples already processed in the current phase. | 
| partitions_totalbigintWhen 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 0during aREINDEX. | 
| partitions_donebigintWhen 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 0during aREINDEX. | 
Table CREATE INDEX Phases
| Phase | Description | 
|---|---|
| initializing | CREATE INDEXorREINDEXis preparing to create the index. This phase is expected to be very brief. | 
| waiting for writers before build | CREATE INDEX CONCURRENTLYorREINDEX CONCURRENTLYis waiting for transactions with write locks that can potentially see the table to finish. This phase is skipped when not in concurrent mode. Columnslockers_total,lockers_doneandcurrent_locker_pidcontain the progress information for this phase. | 
| building index | The 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_totalandblocks_donewill contain progress data, as well as potentiallytuples_totalandtuples_done. | 
| waiting for writers before validation | CREATE INDEX CONCURRENTLYorREINDEX CONCURRENTLYis waiting for transactions with write locks that can potentially write into the table to finish. This phase is skipped when not in concurrent mode. Columnslockers_total,lockers_doneandcurrent_locker_pidcontain the progress information for this phase. | 
| index validation: scanning index | CREATE INDEX CONCURRENTLYis scanning the index searching for tuples that need to be validated. This phase is skipped when not in concurrent mode. Columnsblocks_total(set to the total size of the index) andblocks_donecontain the progress information for this phase. | 
| index validation: sorting tuples | CREATE INDEX CONCURRENTLYis sorting the output of the index scanning phase. | 
| index validation: scanning table | CREATE INDEX CONCURRENTLYis scanning the table to validate the index tuples collected in the previous two phases. This phase is skipped when not in concurrent mode. Columnsblocks_total(set to the total size of the table) andblocks_donecontain the progress information for this phase. | 
| waiting for old snapshots | CREATE INDEX CONCURRENTLYorREINDEX CONCURRENTLYis waiting for transactions that can potentially see the table to release their snapshots. This phase is skipped when not in concurrent mode. Columnslockers_total,lockers_doneandcurrent_locker_pidcontain the progress information for this phase. | 
| waiting for readers before marking dead | REINDEX CONCURRENTLYis 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. Columnslockers_total,lockers_doneandcurrent_locker_pidcontain the progress information for this phase. | 
| waiting for readers before dropping | REINDEX CONCURRENTLYis 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. Columnslockers_total,lockers_doneandcurrent_locker_pidcontain 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 | 
|---|
| pidintegerProcess ID of backend. | 
| datidoidOID of the database to which this backend is connected. | 
| datnamenameName of the database to which this backend is connected. | 
| relidoidOID of the table on which the COPYcommand is executed. It is set to0if copying from aSELECTquery. | 
| commandtextThe command that is running: COPY FROM, orCOPY TO. | 
| typetextThe io type that the data is read from or written to: FILE,PROGRAM,PIPE(forCOPY FROM STDINandCOPY TO STDOUT), orCALLBACK(used for example during the initial table synchronization in logical replication). | 
| bytes_processedbigintNumber of bytes already processed by COPYcommand. | 
| bytes_totalbigintSize of source file for COPY FROMcommand in bytes. It is set to0if not available. | 
| tuples_processedbigintNumber of tuples already processed by COPYcommand. | 
| tuples_excludedbigintNumber of tuples not processed because they were excluded by the WHEREclause of theCOPYcommand. |