On Tue, Feb 08, 2022 at 05:06:24AM -0500, Hellmuth Vargas wrote: > Hola lista > > Leyendo por ahí en el siguiente post > > > https://www.linkedin.com/posts/somdyuti-paul-042aa27_rds-postgresql-aws-activity-6896664452180131840-QZGN > > > Expone que cuando se altera el tamaño de una columna varchar INDEXADA > internamente se recrear el índice asociado.... Ojo solo estamos cambiando > el tamaño... Que opinan? >
Mejor que una opinión... una prueba (en postgres 14) """ postgres=# create table prueba (v varchar(10)); CREATE TABLE postgres=# create index on prueba (v); CREATE INDEX postgres=# select oid, relname, relfilenode from pg_class where relname like 'prueba%'; oid | relname | relfilenode --------+--------------+------------- 102710 | prueba | 102710 102713 | prueba_v_idx | 102713 (2 filas) postgres=# alter table prueba alter v type varchar(15); ALTER TABLE postgres=# select oid, relname, relfilenode from pg_class where relname like 'prueba%'; oid | relname | relfilenode --------+--------------+------------- 102710 | prueba | 102710 102714 | prueba_v_idx | 102713 (2 filas) """ ¿Cómo se que no se reindexó el índice? Porque al reindexar (igual que al reescribir la tabla) el relfilenode cambia. """ postgres=# reindex index prueba_v_idx ; REINDEX postgres=# select oid, relname, relfilenode from pg_class where relname like 'prueba%'; oid | relname | relfilenode --------+--------------+------------- 102710 | prueba | 102710 102714 | prueba_v_idx | 102715 (2 filas) """ Ahora, este no siempre fue el caso. Hace eones atras cualquier ALTER TABLE causaba que se reescribiera la tabla. Aunque nunca he sabido, y con eso quiero decir que no creo que alguna vez fuera así, este caso en particular tuviera el efecto de no reescribir la tabla pero si reindexar el índice. -- Jaime Casanova Director de Servicios Profesionales SystemGuards - Consultores de PostgreSQL