Re: [HACKERS] REINDEX CONCURRENTLY 2.0 - Mailing list pgsql-hackers

From Sergei Kornilov
Subject Re: [HACKERS] REINDEX CONCURRENTLY 2.0
Date
Msg-id 36712441546604286@sas1-890ba5c2334a.qloud-c.yandex.net
Whole thread Raw
In response to Re: [HACKERS] REINDEX CONCURRENTLY 2.0  (Peter Eisentraut <peter.eisentraut@2ndquadrant.com>)
Responses Re: [HACKERS] REINDEX CONCURRENTLY 2.0  (Pavel Stehule <pavel.stehule@gmail.com>)
Re: [HACKERS] REINDEX CONCURRENTLY 2.0  (Michael Paquier <michael@paquier.xyz>)
List pgsql-hackers
Hello
Thank you! I review new patch version. It applied, builds and pass tests. Code looks good, but i notice new behavior
notes:

> postgres=# reindex (verbose) table CONCURRENTLY measurement ;
> WARNING:  REINDEX of partitioned tables is not yet implemented, skipping "measurement"
> NOTICE:  table "measurement" has no indexes
> REINDEX
> postgres=# \d measurement
>         Partitioned table "public.measurement"
>   Column   |  Type   | Collation | Nullable | Default 
> -----------+---------+-----------+----------+---------
>  city_id   | integer |           | not null | 
>  logdate   | date    |           | not null | 
>  peaktemp  | integer |           |          | 
>  unitsales | integer |           |          | 
> Partition key: RANGE (logdate)
> Indexes:
>     "measurement_logdate_idx" btree (logdate)
> Number of partitions: 0

NOTICE seems unnecessary here.

Unfortunally concurrenttly reindex loses comments, reproducer:

> create table testcomment (i int);
> create index testcomment_idx1 on testcomment (i);
> comment on index testcomment_idx1 IS 'test comment';
> \di+ testcomment_idx1
> reindex table testcomment ;
> \di+ testcomment_idx1 # ok
> reindex table CONCURRENTLY testcomment ;
> \di+ testcomment_idx1 # we lose comment

Also i think we need change REINDEX to "<command>REINDEX</command> (without <option>CONCURRENTLY</option>)" in ACCESS
EXCLUSIVEsection Table-level Lock Modes documentation (to be similar with REFRESH MATERIALIZED VIEW and CREATE INDEX
description)

About reindex invalid indexes - i found one good question in archives [1]: how about toast indexes?
I check it now, i am able drop invalid toast index, but i can not drop reduntant valid index.
Reproduce:
session 1: begin; select from test_toast ... for update;
session 2: reindex table CONCURRENTLY test_toast ;
session 2: interrupt by ctrl+C
session 1: commit
session 2: reindex table test_toast ;
and now we have two toast indexes. DROP INDEX is able to remove only invalid ones. Valid index gives "ERROR:
permissiondenied: "pg_toast_16426_index_ccnew" is a system catalog"
 

About syntax: i vote for current syntax "reindex table CONCURRENTLY tablename". This looks consistent with existed
CREATEINDEX CONCURRENTLY and REFRESH MATERIALIZED VIEW CONCURRENTLY.
 

regards, Sergei

[1]: https://www.postgresql.org/message-id/CAB7nPqT%2B6igqbUb59y04NEgHoBeUGYteuUr89AKnLTFNdB8Hyw%40mail.gmail.com


pgsql-hackers by date:

Previous
From: Peter Eisentraut
Date:
Subject: Re: New GUC to sample log queries
Next
From: Pavel Stehule
Date:
Subject: Re: [HACKERS] REINDEX CONCURRENTLY 2.0