From: | Hellmuth Vargas <hivs77(at)gmail(dot)com> |
---|---|
To: | Jaime Casanova <jcasanov(at)systemguards(dot)com(dot)ec> |
Cc: | Lista Postgres ES <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Alter varchar column size recrea índice? |
Date: | 2022-02-08 17:32:08 |
Message-ID: | CAN3Qy4rZ=gxR1_vK9theSBejFq02iBoFRXHmRndbENWhHKzYhg@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Hola Jaime, muchas gracias, tenía la duda porque en varias ocasiones lo
he hecho (en las condiciones antes descritas) y no había evidenciado un
REINDEX como efecto colateral.
El mar, 8 feb 2022 a la(s) 11:09, Jaime Casanova (
jcasanov(at)systemguards(dot)com(dot)ec) escribió:
> 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
>
--
Cordialmente,
Ing. Hellmuth I. Vargas S.
Esp. Telemática y Negocios por Internet
Oracle Database 10g Administrator Certified Associate
EnterpriseDB Certified PostgreSQL 9.3 Associate
From | Date | Subject | |
---|---|---|---|
Next Message | kernel | 2022-02-22 09:55:16 | current_query() |
Previous Message | Jaime Casanova | 2022-02-08 16:25:49 | Re: Réplica lenta después de purgado en master |