Ответы:
Согласно странице обслуживания индексов Postgres Wiki , вы можете узнать текущее состояние всех ваших индексов с помощью:
SELECT
t.tablename,
indexname,
c.reltuples AS num_rows,
pg_size_pretty(pg_relation_size(quote_ident(t.tablename)::text)) AS table_size,
pg_size_pretty(pg_relation_size(quote_ident(indexrelname)::text)) AS index_size,
CASE WHEN indisunique THEN 'Y'
ELSE 'N'
END AS UNIQUE,
idx_scan AS number_of_scans,
idx_tup_read AS tuples_read,
idx_tup_fetch AS tuples_fetched
FROM pg_tables t
LEFT OUTER JOIN pg_class c ON t.tablename=c.relname
LEFT OUTER JOIN
( SELECT c.relname AS ctablename, ipg.relname AS indexname, x.indnatts AS number_of_columns, idx_scan, idx_tup_read, idx_tup_fetch, indexrelname, indisunique FROM pg_index x
JOIN pg_class c ON c.oid = x.indrelid
JOIN pg_class ipg ON ipg.oid = x.indexrelid
JOIN pg_stat_all_indexes psai ON x.indexrelid = psai.indexrelid )
AS foo
ON t.tablename = foo.ctablename
WHERE t.schemaname='public'
ORDER BY 1,2;
Столбец num_rows
показывает, сколько строк покрыто вашим индексом и index_size
будет расти по мере его построения.
Таким образом, нет хорошего способа сделать это, но если вам действительно нужно знать ... сначала рассчитайте объем пространства, который должен занимать индекс, исходя из размера данных * строк + накладных расходов. Затем вы можете использовать что-то вроде pfiles или pgtruss, чтобы найти файлы, которые пишутся внутри $ PGDATA; если ваши индексы превышают 1 ГБ, это будет серия файлов, таких как nnnnn.n, где первый набор n является последовательным, а последние n увеличиваются для каждого файла в ГБ. Как только вы знаете, сколько файлов создано, вы можете наблюдать за ростом и выяснить, насколько вы близки к завершению. Грубая оценка, но, возможно, это поможет.
Это станет возможным в следующем выпуске PostgreSQL 12 (должен быть выпущен 3 октября 2019 года).
SELECT
now()::TIME(0),
a.query,
p.phase,
p.blocks_total,
p.blocks_done,
p.tuples_total,
p.tuples_done
FROM pg_stat_progress_create_index p
JOIN pg_stat_activity a ON p.pid = a.pid;
Подробности смотрите в документации по pg_stat_progress_create_index и в блоге depesz .