Esto es similar a un problema reciente que publiqué en el que el comando COPIAR estaba colgado para un gran conjunto de datos. En ese caso, se debió a una restricción de clave externa. Pero en este caso estoy creando un índice, por lo que creo que un FK no sería un problema, aunque todavía deshabilité los disparadores en la mesa por si acaso. Estoy tratando de agregar un btree index regular en una tabla con 10 mil millones de filas. El índice está en dos campos int . Intenté ejecutarlo y duraba una eternidad, así que pensé que podría ser demasiado lento, max_parallel_maintenance_workers a 8 y maintenance_work_mem a 2047 MB (estoy en Windows, así que es el máximo).
En ese momento, las cosas parecían ir más rápido, pero ocurrió el mismo problema: puedo ver que los archivos crecen en la carpeta pgsql_tmp/pgsql_tmpxxxx.x.sharedfileset , hasta que simplemente se detienen, pero la creación del índice nunca parece terminar.
Me preguntaba si había configurado demasiados trabajadores por alguna razón, así que intenté configurarlo en 4, el mismo problema. Los archivos se modificaron por última vez alrededor de las 3:20 am, son las 7:35 am y todavía se está ejecutando. Los archivos en la carpeta tienen 261 GB, lo que se ve bien en comparación con el tamaño de la tabla y cada vez que ejecuto el proceso se detiene en ese tamaño, por lo que asumo que ya terminó con la creación del índice, simplemente no tengo idea de lo que podría estar haciendo. en este punto. En caso de que importe, la tabla tiene una clave externa en otra tabla que tiene mil millones de registros, pero los disparadores están deshabilitados en la tabla, lo que me ha funcionado para cargar datos en la tabla. Revisé si hay bloqueos, no hay ninguno, no está esperando ningún bloqueo, lo cual tiene sentido porque esta es una base de datos de prueba con datos ficticios que creé para probar algunas cosas, por lo que nadie más sabe que existe o tiene algún uso.
La creación de un índice se ejecuta en varias etapas. La tabla debe leerse, los valores deben ordenarse y el índice debe crearse en el disco.
En ciertas etapas, verá que los archivos temporales crecen, en otras no, aunque CREATE INDEX todavía esté funcionando. Tal vez esté escribiendo el archivo de índice en este momento.
Así que ten paciencia, se acabará.
Si está nervioso, mire en pg_locks para ver si CREATE INDEX está bloqueado por algo. Ese puede ser el caso si se trata de CREATE INDEX CONCURRENTLY , que tiene un procesamiento más complicado.