mirror of
https://github.com/postgres/postgres.git
synced 2025-07-17 06:41:09 +03:00
Report progress of CREATE INDEX operations
This uses the progress reporting infrastructure added by c16dc1aca5
,
adding support for CREATE INDEX and CREATE INDEX CONCURRENTLY.
There are two pieces to this: one is index-AM-agnostic, and the other is
AM-specific. The latter is fairly elaborate for btrees, including
reportage for parallel index builds and the separate phases that btree
index creation uses; other index AMs, which are much simpler in their
building procedures, have simplistic reporting only, but that seems
sufficient, at least for non-concurrent builds.
The index-AM-agnostic part is fairly complete, providing insight into
the CONCURRENTLY wait phases as well as block-based progress during the
index validation table scan. (The index validation index scan requires
patching each AM, which has not been included here.)
Reviewers: Rahila Syed, Pavan Deolasee, Tatsuro Yamada
Discussion: https://postgr.es/m/20181220220022.mg63bhk26zdpvmcj@alvherre.pgsql
This commit is contained in:
@ -445,3 +445,26 @@ pg_index_column_has_property(PG_FUNCTION_ARGS)
|
||||
|
||||
return indexam_property(fcinfo, propname, InvalidOid, relid, attno);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the name of the given phase, as used for progress reporting by the
|
||||
* given AM.
|
||||
*/
|
||||
Datum
|
||||
pg_indexam_progress_phasename(PG_FUNCTION_ARGS)
|
||||
{
|
||||
Oid amoid = PG_GETARG_OID(0);
|
||||
int32 phasenum = PG_GETARG_INT32(1);
|
||||
IndexAmRoutine *routine;
|
||||
char *name;
|
||||
|
||||
routine = GetIndexAmRoutineByAmId(amoid, true);
|
||||
if (routine == NULL || !routine->ambuildphasename)
|
||||
PG_RETURN_NULL();
|
||||
|
||||
name = routine->ambuildphasename(phasenum);
|
||||
if (!name)
|
||||
PG_RETURN_NULL();
|
||||
|
||||
PG_RETURN_TEXT_P(CStringGetTextDatum(name));
|
||||
}
|
||||
|
Reference in New Issue
Block a user