Re: Assertion on create index concurrently

Michael Paquier <michael@paquier.xyz>

From: Michael Paquier <michael@paquier.xyz>
To: Andrey Lepikhov <a.lepikhov@postgrespro.ru>
Cc: pgsql-bugs@lists.postgresql.org
Date: 2021-06-27T01:35:49Z
Lists: pgsql-bugs
On Sat, Jun 26, 2021 at 09:48:45PM +0300, Andrey Lepikhov wrote:
> I found one annoying assertion in the CREATE INDEX CONCURRENTLY operation.
> It will happen if you add into WHERE part of CREATE INDEX CONCURRENTLY some
> function that will make transactional update (see an example in the attached
> patch).
> 
> It looks like a hack, but it lead to assertion and restart of the instance,
> that isn't good.
> I suggest to perform error, not assertion in this case (see the patch).
> 
> This problem affects PG 9.6 - 13. The master branch was fixed 9 months ago
> by commit 83158f7, that made this operation transactional, but still.

This looks like a good argument for back-patching 83158f7 all the way
down, as 813fb03 exists since 9.4.  Any thoughts from others?
--
Michael

Commits

  1. Add test for CREATE INDEX CONCURRENTLY with not-so-immutable predicate

  2. Make index_set_state_flags() transactional