aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/subscriptioncmds.c
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2017-07-03 22:47:06 -0400
committerPeter Eisentraut <peter_e@gmx.net>2017-07-03 22:47:06 -0400
commitcb9079cd51a2df677dc182aec72d88383b9c2a79 (patch)
treed4e940aec147b7b21b3a5db5f21ffa991b77ccc8 /src/backend/commands/subscriptioncmds.c
parent42794d6749f24636efbb198db17c30c63df10900 (diff)
downloadpostgresql-cb9079cd51a2df677dc182aec72d88383b9c2a79.tar.gz
postgresql-cb9079cd51a2df677dc182aec72d88383b9c2a79.zip
Improve subscription locking
This avoids "tuple concurrently updated" errors when a ALTER or DROP SUBSCRIPTION writes to pg_subscription_rel at the same time as a worker. Author: Petr Jelinek <petr.jelinek@2ndquadrant.com>
Diffstat (limited to 'src/backend/commands/subscriptioncmds.c')
-rw-r--r--src/backend/commands/subscriptioncmds.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c
index 9cbd36f6463..6dc3f6ee000 100644
--- a/src/backend/commands/subscriptioncmds.c
+++ b/src/backend/commands/subscriptioncmds.c
@@ -644,6 +644,9 @@ AlterSubscription(AlterSubscriptionStmt *stmt)
subid = HeapTupleGetOid(tup);
sub = GetSubscription(subid, false);
+ /* Lock the subscription so nobody else can do anything with it. */
+ LockSharedObject(SubscriptionRelationId, subid, 0, AccessExclusiveLock);
+
/* Form a new tuple. */
memset(values, 0, sizeof(values));
memset(nulls, false, sizeof(nulls));