Re: ATTACH/DETACH PARTITION CONCURRENTLY
Robert Haas <robertmhaas@gmail.com>
From: Robert Haas <robertmhaas@gmail.com>
To: Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>
Cc: David Rowley <david.rowley@2ndquadrant.com>,
Alvaro Herrera <alvherre@2ndquadrant.com>, Andres Freund <andres@anarazel.de>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>,
Simon Riggs <simon@2ndquadrant.com>
Date: 2018-11-21T18:37:21Z
Lists: pgsql-hackers
On Wed, Nov 14, 2018 at 9:03 PM Amit Langote <Langote_Amit_f8@lab.ntt.co.jp> wrote: > On 2018/11/15 4:27, Robert Haas wrote: > > RelationBuildPartitionDesc doesn't lock the children > > whose relpartbounds it is fetching (!), so unless we're guaranteed to > > have already locked them children earlier for some other reason, we > > could grab the partition bound at this point and then it could change > > again before we get a lock on them. > > Hmm, I think that RelationBuildPartitionDesc doesn't need to lock a > partition before fetching its relpartbound, because the latter can't > change if the caller is holding a lock on the parent, which it must be if > we're in RelationBuildPartitionDesc for parent at all. Am I missing > something? After thinking about this for a bit, I think that right now it's fine, because you can't create or drop or attach or detach a partition without holding AccessExclusiveLock on both the parent and the child, so if you hold even AccessShareLock on the parent, the child's relpartbound can't be changing. However, what we want to do is get the lock level on the parent down to ShareUpdateExclusiveLock, at which point the child's relpartbound could indeed change under us. I think, however, that what I previously posted as 0002 is sufficient to fix that part of the problem. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Commits
-
Allow ATTACH PARTITION with only ShareUpdateExclusiveLock.
- 898e5e3290a7 12.0 landed
-
Change lock acquisition order in expand_inherited_rtentry.
- f4b6341d5fcb 12.0 landed
-
Move code for managing PartitionDescs into a new file, partdesc.c
- 1bb5e7821810 12.0 landed
-
Remove more redundant relation locking during executor startup.
- f2343653f5b2 12.0 cited
-
Add assertions that we hold some relevant lock during relation open.
- b04aeb0a053e 12.0 cited
-
Try to acquire relation locks in RangeVarGetRelid.
- 4240e429d0c2 9.2.0 cited