Estoy considerando usar CLUSTER para reordenar una tabla por un índice. Entiendo que esta recreación de los datos de la tabla hace que todos los índices existentes se hinchen o sean inútiles. He visto algunas indicaciones de que se requiere un REINDEX después de un CLUSTER. He encontrado otras referencias que indican que CLUSTER hace un REINDEX. La documentación oficial no dice nada acerca de que REINDEX sea parte de CLUSTER o sea obligatorio (aunque sí sugiere ejecutar ANALYZE después del CLUSTER)
¿Puede alguien definitivamente (es decir, con algún tipo de referencia a documentos oficiales) decir si se requiere o no un REINDEX después de un CLUSTER?
postgresql
ÁRBOL
fuente
fuente

clusterreubica las filas, por lo que tendrá que actualizar la información del índice de todos modos.Respuestas:
No necesita reindexar, porque
CLUSTERefectivamente lo hace por usted.Más específicamente,
CLUSTERbloquea la tabla de origen y luego crea una nueva copia ordenada de acuerdo con el índice de destino. Crea índices en la nueva copia y luego reemplaza la tabla antigua e indexa con las nuevas.Tenga en cuenta que esto también es cierto
VACUUM FULLen 9.0+.Si ha estado viendo una discusión que sugiere que los
CLUSTERíndices de hinchazón podrían ser personas que suponen queCLUSTERfunciona como pre-9.0VACUUM FULL. También podría estar viendo y leyendo mal las discusiones que mencionan la hinchazón del índice causada por laVACUUM FULLimplementación anterior y sugiriendoCLUSTERcomo alternativa .Esto está implícito en la documentación :
Lo que no dice, pero debería, es que esas copias temporales reemplacen la tabla original . (Negrita mía).
fuente
CLUSTERno se reescriban los índices, y el examen de los archivos realesbase/mostrará claramente nuevosrelfilenodecorreos electrónicos. Parece que te preocupan los problemas que aún no tienes.Estoy con a_horse_with_no_name en esto: no necesita volver a crear los índices. Además de que la
CLUSTERdocumentación no lo menciona, también podemos consultar laREINDEXpágina:Claramente,
CLUSTERno cae en ninguno de estos casos.Y hay una pequeña oración en los
CLUSTERdocumentos:Esto sugiere que, al igual que la tabla en sí, los índices también se reordenan durante el proceso, lo que hace que la reindexación sea inútil.
fuente
Encontró una referencia, en la sección Recuperando espacio en disco .
fuente
Analizando todas las respuestas, en mi opinión, la forma correcta de hacerlo es reindexar ANTES del clúster. Como la documentación no dice si el clúster hace o no una reindexación, y solo una copia del índice, ordenada o no, creo que un índice indexado dará como resultado una mejor tabla agrupada. Después de eso, un análisis finalizará el trabajo. Un vacío lleno antes de todo parece ser inútil, a menos que el clúster y / o la reindexación no liberen tuplas muertas
fuente
CLUSTERyVACUUM FULLproduce una nueva tabla física, simplemente no puede haber ningún muerto después de ella. El espacio utilizado por la copia anterior se liberará al final de la operación.