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


Reply via email to