Re: ATTACH/DETACH PARTITION CONCURRENTLY
Alvaro Herrera <alvherre@2ndquadrant.com>
From: Alvaro Herrera <alvherre@2ndquadrant.com>
To: Robert Haas <robertmhaas@gmail.com>
Cc: Simon Riggs <simon@2ndquadrant.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2018-11-06T19:10:51Z
Lists: pgsql-hackers
On 2018-Nov-06, Robert Haas wrote: > If you don't throw an error when a partition is concurrently detached > and then someone routes a tuple to that portion of the key space, what > DO you do? Continue inserting tuples into the table even though it's > no longer a partition? Yes -- the table was a partition when the query started, so it's still a partition from the point of view of that query's snapshot. > Throw tuples destined for that partition away? Surely not. (/me doesn't beat straw men anyway.) > You can make an argument for both of those behaviors, but they're > both pretty strange. The first one means that for an arbitrarily long > period of time after detaching a partition, the partition may continue > to receive inserts that were destined for its former parent. Not arbitrarily long -- only as long as those old snapshots live. I don't find this at all surprising. (I think DETACH is not related to DROP in any way. My proposal is that DETACH can work concurrently, and if people want to drop the partition later they can wait until snapshots/queries that could see that partition are gone.) -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
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