Mark advisory-lock functions as parallel restricted, not parallel unsafe.
authorTom Lane
Thu, 1 Aug 2019 15:36:21 +0000 (11:36 -0400)
committerTom Lane
Thu, 1 Aug 2019 15:36:21 +0000 (11:36 -0400)
There seems no good reason not to allow a parallel leader to execute
these functions.  (The workers still can't, though.  Although the code
would work, any such lock would go away at worker exit, which is not
the documented behavior of advisory locks.)

Discussion: https://postgr.es/m/11847.1564496844@sss.pgh.pa.us

src/include/catalog/catversion.h
src/include/catalog/pg_proc.dat

index 34466b432c14482033010bcafeebddc3a78ca08c..da0110e3e8d08b4ac3cae3a9462b950d3386d8de 100644 (file)
@@ -53,6 +53,6 @@
  */
 
 /*                         yyyymmddN */
-#define CATALOG_VERSION_NO 201907222
+#define CATALOG_VERSION_NO 201908011
 
 #endif
index 0902dce5f140c963deee8671dc5aa70b6f44f07b..4f43c39f535f01d3b6d7e6b8f0eba6fe5da896c3 100644 (file)
 
 # userlock replacements
 { oid => '2880', descr => 'obtain exclusive advisory lock',
-  proname => 'pg_advisory_lock', provolatile => 'v', proparallel => 'u',
+  proname => 'pg_advisory_lock', provolatile => 'v', proparallel => 'r',
   prorettype => 'void', proargtypes => 'int8',
   prosrc => 'pg_advisory_lock_int8' },
 { oid => '3089', descr => 'obtain exclusive advisory lock',
-  proname => 'pg_advisory_xact_lock', provolatile => 'v', proparallel => 'u',
+  proname => 'pg_advisory_xact_lock', provolatile => 'v', proparallel => 'r',
   prorettype => 'void', proargtypes => 'int8',
   prosrc => 'pg_advisory_xact_lock_int8' },
 { oid => '2881', descr => 'obtain shared advisory lock',
-  proname => 'pg_advisory_lock_shared', provolatile => 'v', proparallel => 'u',
+  proname => 'pg_advisory_lock_shared', provolatile => 'v', proparallel => 'r',
   prorettype => 'void', proargtypes => 'int8',
   prosrc => 'pg_advisory_lock_shared_int8' },
 { oid => '3090', descr => 'obtain shared advisory lock',
   proname => 'pg_advisory_xact_lock_shared', provolatile => 'v',
-  proparallel => 'u', prorettype => 'void', proargtypes => 'int8',
+  proparallel => 'r', prorettype => 'void', proargtypes => 'int8',
   prosrc => 'pg_advisory_xact_lock_shared_int8' },
 { oid => '2882', descr => 'obtain exclusive advisory lock if available',
-  proname => 'pg_try_advisory_lock', provolatile => 'v', proparallel => 'u',
+  proname => 'pg_try_advisory_lock', provolatile => 'v', proparallel => 'r',
   prorettype => 'bool', proargtypes => 'int8',
   prosrc => 'pg_try_advisory_lock_int8' },
 { oid => '3091', descr => 'obtain exclusive advisory lock if available',
   proname => 'pg_try_advisory_xact_lock', provolatile => 'v',
-  proparallel => 'u', prorettype => 'bool', proargtypes => 'int8',
+  proparallel => 'r', prorettype => 'bool', proargtypes => 'int8',
   prosrc => 'pg_try_advisory_xact_lock_int8' },
 { oid => '2883', descr => 'obtain shared advisory lock if available',
   proname => 'pg_try_advisory_lock_shared', provolatile => 'v',
-  proparallel => 'u', prorettype => 'bool', proargtypes => 'int8',
+  proparallel => 'r', prorettype => 'bool', proargtypes => 'int8',
   prosrc => 'pg_try_advisory_lock_shared_int8' },
 { oid => '3092', descr => 'obtain shared advisory lock if available',
   proname => 'pg_try_advisory_xact_lock_shared', provolatile => 'v',
-  proparallel => 'u', prorettype => 'bool', proargtypes => 'int8',
+  proparallel => 'r', prorettype => 'bool', proargtypes => 'int8',
   prosrc => 'pg_try_advisory_xact_lock_shared_int8' },
 { oid => '2884', descr => 'release exclusive advisory lock',
-  proname => 'pg_advisory_unlock', provolatile => 'v', proparallel => 'u',
+  proname => 'pg_advisory_unlock', provolatile => 'v', proparallel => 'r',
   prorettype => 'bool', proargtypes => 'int8',
   prosrc => 'pg_advisory_unlock_int8' },
 { oid => '2885', descr => 'release shared advisory lock',
   proname => 'pg_advisory_unlock_shared', provolatile => 'v',
-  proparallel => 'u', prorettype => 'bool', proargtypes => 'int8',
+  proparallel => 'r', prorettype => 'bool', proargtypes => 'int8',
   prosrc => 'pg_advisory_unlock_shared_int8' },
 { oid => '2886', descr => 'obtain exclusive advisory lock',
-  proname => 'pg_advisory_lock', provolatile => 'v', proparallel => 'u',
+  proname => 'pg_advisory_lock', provolatile => 'v', proparallel => 'r',
   prorettype => 'void', proargtypes => 'int4 int4',
   prosrc => 'pg_advisory_lock_int4' },
 { oid => '3093', descr => 'obtain exclusive advisory lock',
-  proname => 'pg_advisory_xact_lock', provolatile => 'v', proparallel => 'u',
+  proname => 'pg_advisory_xact_lock', provolatile => 'v', proparallel => 'r',
   prorettype => 'void', proargtypes => 'int4 int4',
   prosrc => 'pg_advisory_xact_lock_int4' },
 { oid => '2887', descr => 'obtain shared advisory lock',
-  proname => 'pg_advisory_lock_shared', provolatile => 'v', proparallel => 'u',
+  proname => 'pg_advisory_lock_shared', provolatile => 'v', proparallel => 'r',
   prorettype => 'void', proargtypes => 'int4 int4',
   prosrc => 'pg_advisory_lock_shared_int4' },
 { oid => '3094', descr => 'obtain shared advisory lock',
   proname => 'pg_advisory_xact_lock_shared', provolatile => 'v',
-  proparallel => 'u', prorettype => 'void', proargtypes => 'int4 int4',
+  proparallel => 'r', prorettype => 'void', proargtypes => 'int4 int4',
   prosrc => 'pg_advisory_xact_lock_shared_int4' },
 { oid => '2888', descr => 'obtain exclusive advisory lock if available',
-  proname => 'pg_try_advisory_lock', provolatile => 'v', proparallel => 'u',
+  proname => 'pg_try_advisory_lock', provolatile => 'v', proparallel => 'r',
   prorettype => 'bool', proargtypes => 'int4 int4',
   prosrc => 'pg_try_advisory_lock_int4' },
 { oid => '3095', descr => 'obtain exclusive advisory lock if available',
   proname => 'pg_try_advisory_xact_lock', provolatile => 'v',
-  proparallel => 'u', prorettype => 'bool', proargtypes => 'int4 int4',
+  proparallel => 'r', prorettype => 'bool', proargtypes => 'int4 int4',
   prosrc => 'pg_try_advisory_xact_lock_int4' },
 { oid => '2889', descr => 'obtain shared advisory lock if available',
   proname => 'pg_try_advisory_lock_shared', provolatile => 'v',
-  proparallel => 'u', prorettype => 'bool', proargtypes => 'int4 int4',
+  proparallel => 'r', prorettype => 'bool', proargtypes => 'int4 int4',
   prosrc => 'pg_try_advisory_lock_shared_int4' },
 { oid => '3096', descr => 'obtain shared advisory lock if available',
   proname => 'pg_try_advisory_xact_lock_shared', provolatile => 'v',
-  proparallel => 'u', prorettype => 'bool', proargtypes => 'int4 int4',
+  proparallel => 'r', prorettype => 'bool', proargtypes => 'int4 int4',
   prosrc => 'pg_try_advisory_xact_lock_shared_int4' },
 { oid => '2890', descr => 'release exclusive advisory lock',
-  proname => 'pg_advisory_unlock', provolatile => 'v', proparallel => 'u',
+  proname => 'pg_advisory_unlock', provolatile => 'v', proparallel => 'r',
   prorettype => 'bool', proargtypes => 'int4 int4',
   prosrc => 'pg_advisory_unlock_int4' },
 { oid => '2891', descr => 'release shared advisory lock',
   proname => 'pg_advisory_unlock_shared', provolatile => 'v',
-  proparallel => 'u', prorettype => 'bool', proargtypes => 'int4 int4',
+  proparallel => 'r', prorettype => 'bool', proargtypes => 'int4 int4',
   prosrc => 'pg_advisory_unlock_shared_int4' },
 { oid => '2892', descr => 'release all advisory locks',
-  proname => 'pg_advisory_unlock_all', provolatile => 'v', proparallel => 'u',
+  proname => 'pg_advisory_unlock_all', provolatile => 'v', proparallel => 'r',
   prorettype => 'void', proargtypes => '', prosrc => 'pg_advisory_unlock_all' },
 
 # XML support