Document concurrent indexes waiting on each other
authorAlvaro Herrera <[email protected]>
Mon, 30 Nov 2020 21:24:55 +0000 (18:24 -0300)
committerAlvaro Herrera <[email protected]>
Mon, 30 Nov 2020 21:24:55 +0000 (18:24 -0300)
Because regular CREATE INDEX commands are independent, and there's no
logical data dependency, it's not immediately obvious that transactions
held by concurrent index builds on one table will block the second phase
of concurrent index creation on an unrelated table, so document this
caveat.

Backpatch this all the way back.  In branch master, mention that only
some indexes are involved.

Author: James Coleman <[email protected]>
Reviewed-by: David Johnston <[email protected]>
Discussion: https://postgr.es/m/CAAaqYe994=PUrn8CJZ4UEo_S-FfRr_3ogERyhtdgHAb2WG_Ufg@mail.gmail.com

doc/src/sgml/ref/create_index.sgml

index 93e7ceaf6263655c6927a7a9c7cfa8fe0a2bf6a9..4ad061509c26b60ca776a7b71a404e92744e93f6 100644 (file)
@@ -446,8 +446,9 @@ CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] <replaceable class=
     wait for existing transactions that have modified the table to terminate.
     After the second scan, the index build must wait for any transactions
     that have a snapshot (see <xref linkend="mvcc">) predating the second
-    scan to terminate.  Then finally the index can be marked ready for use,
-    and the <command>CREATE INDEX</> command terminates.
+    scan to terminate, including transactions used by any phase of concurrent
+    index builds on other tables.  Then finally the index can be marked ready for use,
+    and the <command>CREATE INDEX</command> command terminates.
     Even then, however, the index may not be immediately usable for queries:
     in the worst case, it cannot be used as long as transactions exist that
     predate the start of the index build.