1/*-------------------------------------------------------------------------
2 *
3 * progress.h
4 * Constants used with the progress reporting facilities defined in
5 * pgstat.h. These are possibly interesting to extensions, so we
6 * expose them via this header file. Note that if you update these
7 * constants, you probably also need to update the views based on them
8 * in system_views.sql.
9 *
10 * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
11 * Portions Copyright (c) 1994, Regents of the University of California
12 *
13 * src/include/commands/progress.h
14 *
15 *-------------------------------------------------------------------------
16 */
17#ifndef PROGRESS_H
18#define PROGRESS_H
19
20/* Progress parameters for (lazy) vacuum */
21#define PROGRESS_VACUUM_PHASE 0
22#define PROGRESS_VACUUM_TOTAL_HEAP_BLKS 1
23#define PROGRESS_VACUUM_HEAP_BLKS_SCANNED 2
24#define PROGRESS_VACUUM_HEAP_BLKS_VACUUMED 3
25#define PROGRESS_VACUUM_NUM_INDEX_VACUUMS 4
26#define PROGRESS_VACUUM_MAX_DEAD_TUPLES 5
27#define PROGRESS_VACUUM_NUM_DEAD_TUPLES 6
28
29/* Phases of vacuum (as advertised via PROGRESS_VACUUM_PHASE) */
30#define PROGRESS_VACUUM_PHASE_SCAN_HEAP 1
31#define PROGRESS_VACUUM_PHASE_VACUUM_INDEX 2
32#define PROGRESS_VACUUM_PHASE_VACUUM_HEAP 3
33#define PROGRESS_VACUUM_PHASE_INDEX_CLEANUP 4
34#define PROGRESS_VACUUM_PHASE_TRUNCATE 5
35#define PROGRESS_VACUUM_PHASE_FINAL_CLEANUP 6
36
37/* Progress parameters for cluster */
38#define PROGRESS_CLUSTER_COMMAND 0
39#define PROGRESS_CLUSTER_PHASE 1
40#define PROGRESS_CLUSTER_INDEX_RELID 2
41#define PROGRESS_CLUSTER_HEAP_TUPLES_SCANNED 3
42#define PROGRESS_CLUSTER_HEAP_TUPLES_WRITTEN 4
43#define PROGRESS_CLUSTER_TOTAL_HEAP_BLKS 5
44#define PROGRESS_CLUSTER_HEAP_BLKS_SCANNED 6
45#define PROGRESS_CLUSTER_INDEX_REBUILD_COUNT 7
46
47/* Phases of cluster (as advertised via PROGRESS_CLUSTER_PHASE) */
48#define PROGRESS_CLUSTER_PHASE_SEQ_SCAN_HEAP 1
49#define PROGRESS_CLUSTER_PHASE_INDEX_SCAN_HEAP 2
50#define PROGRESS_CLUSTER_PHASE_SORT_TUPLES 3
51#define PROGRESS_CLUSTER_PHASE_WRITE_NEW_HEAP 4
52#define PROGRESS_CLUSTER_PHASE_SWAP_REL_FILES 5
53#define PROGRESS_CLUSTER_PHASE_REBUILD_INDEX 6
54#define PROGRESS_CLUSTER_PHASE_FINAL_CLEANUP 7
55
56/* Commands of PROGRESS_CLUSTER */
57#define PROGRESS_CLUSTER_COMMAND_CLUSTER 1
58#define PROGRESS_CLUSTER_COMMAND_VACUUM_FULL 2
59
60/* Progress parameters for CREATE INDEX */
61/* 3, 4 and 5 reserved for "waitfor" metrics */
62#define PROGRESS_CREATEIDX_COMMAND 0
63#define PROGRESS_CREATEIDX_INDEX_OID 6
64#define PROGRESS_CREATEIDX_ACCESS_METHOD_OID 8
65#define PROGRESS_CREATEIDX_PHASE 9 /* AM-agnostic phase # */
66#define PROGRESS_CREATEIDX_SUBPHASE 10 /* phase # filled by AM */
67#define PROGRESS_CREATEIDX_TUPLES_TOTAL 11
68#define PROGRESS_CREATEIDX_TUPLES_DONE 12
69#define PROGRESS_CREATEIDX_PARTITIONS_TOTAL 13
70#define PROGRESS_CREATEIDX_PARTITIONS_DONE 14
71/* 15 and 16 reserved for "block number" metrics */
72
73/* Phases of CREATE INDEX (as advertised via PROGRESS_CREATEIDX_PHASE) */
74#define PROGRESS_CREATEIDX_PHASE_WAIT_1 1
75#define PROGRESS_CREATEIDX_PHASE_BUILD 2
76#define PROGRESS_CREATEIDX_PHASE_WAIT_2 3
77#define PROGRESS_CREATEIDX_PHASE_VALIDATE_IDXSCAN 4
78#define PROGRESS_CREATEIDX_PHASE_VALIDATE_SORT 5
79#define PROGRESS_CREATEIDX_PHASE_VALIDATE_TABLESCAN 6
80#define PROGRESS_CREATEIDX_PHASE_WAIT_3 7
81#define PROGRESS_CREATEIDX_PHASE_WAIT_4 8
82#define PROGRESS_CREATEIDX_PHASE_WAIT_5 9
83
84/*
85 * Subphases of CREATE INDEX, for index_build.
86 */
87#define PROGRESS_CREATEIDX_SUBPHASE_INITIALIZE 1
88/* Additional phases are defined by each AM */
89
90/* Commands of PROGRESS_CREATEIDX */
91#define PROGRESS_CREATEIDX_COMMAND_CREATE 1
92#define PROGRESS_CREATEIDX_COMMAND_CREATE_CONCURRENTLY 2
93#define PROGRESS_CREATEIDX_COMMAND_REINDEX 3
94#define PROGRESS_CREATEIDX_COMMAND_REINDEX_CONCURRENTLY 4
95
96/* Lock holder wait counts */
97#define PROGRESS_WAITFOR_TOTAL 3
98#define PROGRESS_WAITFOR_DONE 4
99#define PROGRESS_WAITFOR_CURRENT_PID 5
100
101/* Block numbers in a generic relation scan */
102#define PROGRESS_SCAN_BLOCKS_TOTAL 15
103#define PROGRESS_SCAN_BLOCKS_DONE 16
104
105#endif
106