Odpowiedzi:
Zgodnie ze stroną utrzymania indeksu Postgres Wiki , możesz sprawdzić aktualny stan wszystkich swoich indeksów za pomocą:
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;
Kolumna num_rows
wskazuje liczbę wierszy objętych indeksem i index_size
będzie rosła w miarę budowania indeksu.
Tak więc nie ma dobrego sposobu, aby to zrobić, ale jeśli naprawdę musisz wiedzieć ... najpierw obliczyć ilość miejsca, jaką powinien zająć indeks, na podstawie rozmiaru danych * wierszy + narzutu. Następnie możesz użyć czegoś takiego jak pfiles lub pgtruss, aby znaleźć pliki, które są zapisywane w $ PGDATA; jeśli indeksy przekraczają 1 GB, będzie to seria plików takich jak nnnnn.n, w której pierwszy zestaw n jest spójny, a ostatnie n przyrostów dla każdego pliku GB. Gdy dowiesz się, ile plików zostało utworzonych, możesz obserwować wzrost i dowiedzieć się, jak blisko jesteś ukończenia. Szacunkowe przybliżenie, ale może to pomaga.
Będzie to możliwe w nadchodzącym wydaniu PostgreSQL 12 (powinno zostać wydane 3 października 2019 r.).
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;
Zobacz dokumentację widoku pg_stat_progress_create_index i post na blogu depesz, aby uzyskać szczegółowe informacje.