Re: REINDEX CONCURRENTLY causes ALTER TABLE to fail

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Manuel Rigger <rigger.manuel@gmail.com>
Cc: PostgreSQL mailing lists <pgsql-bugs@lists.postgresql.org>
Date: 2019-07-21T03:19:12Z
Lists: pgsql-bugs
Manuel Rigger <rigger.manuel@gmail.com> writes:
> Consider the following statement sequence:

> CREATE TABLE t0(c0 INTEGER , c1 BOOLEAN);
> INSERT INTO t0(c0, c1) VALUES(1369652450, FALSE), (414515746, TRUE),
> (897778963, FALSE);
> CREATE UNIQUE INDEX i0 ON t0((1 / t0.c0)) WHERE ('-H') >=
> (t0.c1::TEXT) COLLATE "C";
> REINDEX TABLE CONCURRENTLY t0;
> ALTER TABLE t0 ALTER c1 TYPE TEXT; -- could not create unique index
> "i0" DETAIL:  Key ((1 / c0))=(0) is duplicated.

> The REINDEX TABLE CONCURRENTLY causes the ALTER TABLE to fail, which
> is unexpected.

BTW, a note for anybody trying to follow along at home --- this example
does not reproduce if the database's default collation is "C".

			regards, tom lane



Commits

  1. Fix handling of expressions and predicates in REINDEX CONCURRENTLY