Respuestas:
De acuerdo con la página de Mantenimiento del Índice de Postgres Wiki , puede averiguar el estado actual de todos sus índices con:
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;
La columna num_rows
indica cuántas filas está cubierto por su índice y index_size
crecerá a medida que se va creando el índice.
Por lo tanto, no hay una buena manera de hacerlo, pero si realmente necesita saber ... primero calcule la cantidad de espacio que debe tomar el índice, en función del tamaño de los datos * filas + sobrecarga. Luego puede usar algo como pfiles o pgtruss para encontrar los archivos que se escriben dentro de $ PGDATA; Si sus índices superan 1 GB, será una serie de archivos como nnnnn.n, donde el primer conjunto de n es coherente y el último n se incrementa para cada archivo GB. Una vez que sepa cuántos archivos se crean, puede ver el crecimiento y determinar qué tan cerca está de terminar. Estimación aproximada, pero tal vez ayuda.
Será posible en la próxima versión de PostgreSQL 12 (debería lanzarse el 3 de octubre de 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;
Consulte los documentos de la vista pg_stat_progress_create_index y la publicación de blog de depesz para obtener más detalles.