Re: Concurrent ALTER SEQUENCE RESTART Regression
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
Cc: Michael Paquier <michael.paquier@gmail.com>, Jason Petersen <jason@citusdata.com>, PostgreSQL mailing lists <pgsql-bugs@postgresql.org>
Date: 2017-04-26T17:48:13Z
Lists: pgsql-bugs, pgsql-hackers
On 2017-04-26 12:15:53 -0400, Peter Eisentraut wrote: > On 4/25/17 21:24, Michael Paquier wrote: > > Yes, and that's fine, taking a stronger lock on pg_sequence would be > > disruptive for other sessions, including the ones updating pg_sequence > > for different sequences. The point I am trying to make here is that > > the code path updating pg_sequence should make sure that the > > underlying object is properly locked first, so as the update is > > concurrent-safe because this uses simple_heap_update that assumes that > > the operation will be concurrent-safe. For example, take tablecmds.c, > > we make sure that any relation ALTER TABLE works on gets a proper lock > > with relation_open first, in what sequences would be different now > > that they have their own catalog? > > Pretty much everything other than tables is a counterexample. > > git grep RowExclusiveLock src/backend/commands/*.c > > Only tables have an underlying object to lock. Most other DDL commands > don't have anything else to lock and run DDL under RowExclusiveLock. What's your proposed fix? - Andres
Commits
-
Make ALTER SEQUENCE, including RESTART, fully transactional.
- 3d79013b970d 10.0 landed
-
Modify sequence catalog tuple before invoking post alter hook.
- 665104557fdc 10.0 landed
-
Use weaker locks when updating pg_subscription_rel
- 521fd4795e3e 10.0 cited
-
Add pg_sequence system catalog
- 1753b1b02703 10.0 cited
-
Modify sequence state storage to eliminate dangling-pointer problem
- a2597ef17958 7.3.1 cited