]> granicus.if.org Git - postgresql/commitdiff
Clarify comment about assignment and reset of temp namespace ID in MyProc
authorMichael Paquier <michael@paquier.xyz>
Mon, 20 Aug 2018 23:37:01 +0000 (08:37 +0900)
committerMichael Paquier <michael@paquier.xyz>
Mon, 20 Aug 2018 23:37:01 +0000 (08:37 +0900)
The new wording comes from Álvaro, which I modified a bit.

Reported-by: Andres Freund, Álvaro Herrera
Author: Álvaro Herrera, Michael Paquier
Discussion: https://postgr.es/m/20180809165047.GK13638@paquier.xyz
Backpatch-through: 11

src/backend/catalog/namespace.c

index 3971346e738d1d8e0c0fce89587a4cb51abb598b..5d13e6a3d70142016f5219c86fc5f4fc1c67c8f6 100644 (file)
@@ -3938,8 +3938,10 @@ InitTempTableNamespace(void)
         * decide if a temporary namespace is in use or not.  We assume that
         * assignment of namespaceId is an atomic operation.  Even if it is not,
         * the temporary relation which resulted in the creation of this temporary
-        * namespace is still locked until the current transaction commits, so it
-        * would not be accessible yet, acting as a barrier.
+        * namespace is still locked until the current transaction commits, and
+        * its pg_namespace row is not visible yet.  However it does not matter:
+        * this flag makes the namespace as being in use, so no objects created on
+        * it would be removed concurrently.
         */
        MyProc->tempNamespaceId = namespaceId;
 
@@ -3976,10 +3978,12 @@ AtEOXact_Namespace(bool isCommit, bool parallel)
 
                        /*
                         * Reset the temporary namespace flag in MyProc.  We assume that
-                        * this operation is atomic.  Even if it is not, the temporary
-                        * table which created this namespace is still locked until this
-                        * transaction aborts so it would not be visible yet, acting as a
-                        * barrier.
+                        * this operation is atomic.
+                        *
+                        * Because this transaction is aborting, the pg_namespace row is
+                        * not visible to anyone else anyway, but that doesn't matter:
+                        * it's not a problem if objects contained in this namespace are
+                        * removed concurrently.
                         */
                        MyProc->tempNamespaceId = InvalidOid;
                }
@@ -4037,10 +4041,12 @@ AtEOSubXact_Namespace(bool isCommit, SubTransactionId mySubid,
 
                        /*
                         * Reset the temporary namespace flag in MyProc.  We assume that
-                        * this operation is atomic.  Even if it is not, the temporary
-                        * table which created this namespace is still locked until this
-                        * transaction aborts so it would not be visible yet, acting as a
-                        * barrier.
+                        * this operation is atomic.
+                        *
+                        * Because this subtransaction is aborting, the pg_namespace row
+                        * is not visible to anyone else anyway, but that doesn't matter:
+                        * it's not a problem if objects contained in this namespace are
+                        * removed concurrently.
                         */
                        MyProc->tempNamespaceId = InvalidOid;
                }