diff --git a/doc/src/sgml/mvcc.sgml b/doc/src/sgml/mvcc.sgml
index 2ca423c..7e6b4b3 100644
--- a/doc/src/sgml/mvcc.sgml
+++ b/doc/src/sgml/mvcc.sgml
@@ -865,7 +865,8 @@ ERROR:  could not serialize access due to read/write dependencies among transact
         <para>
          Acquired by <command>VACUUM</command> (without <option>FULL</option>),
          <command>ANALYZE</>, <command>CREATE INDEX CONCURRENTLY</>, and
-         some forms of <command>ALTER TABLE</command>.
+         <command>ALTER TABLE VALIDATE</command> and other
+         <command>ALTER TABLE</command> variants that set options.
         </para>
        </listitem>
       </varlistentry>
@@ -951,7 +952,7 @@ ERROR:  could not serialize access due to read/write dependencies among transact
         </para>
 
         <para>
-         Acquired by the <command>ALTER TABLE</>, <command>DROP TABLE</>,
+         Acquired by the <command>ALTER TABLE</> for rewriting, <command>DROP TABLE</>,
          <command>TRUNCATE</command>, <command>REINDEX</command>,
          <command>CLUSTER</command>, and <command>VACUUM FULL</command>
          commands.
diff --git a/doc/src/sgml/ref/alter_index.sgml b/doc/src/sgml/ref/alter_index.sgml
index 94a7af0..a79caf2 100644
--- a/doc/src/sgml/ref/alter_index.sgml
+++ b/doc/src/sgml/ref/alter_index.sgml
@@ -33,7 +33,10 @@ ALTER INDEX [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> RESE
 
   <para>
    <command>ALTER INDEX</command> changes the definition of an existing index.
-   There are several subforms:
+   There are several subforms described below. Note that the lock level required
+   may differ for each subform. An <literal>ACCESS EXCLUSIVE</literal>
+   lock is held unless explicitly noted. When multiple subcommands are listed, the
+   lock held will be the strictest one required from any subcommand.
 
   <variablelist>
 
@@ -82,6 +85,10 @@ ALTER INDEX [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> RESE
       <xref linkend="SQL-REINDEX">
       to get the desired effects.
      </para>
+     <para>
+      Changing storage parameters requires only a
+      <literal>SHARE UPDATE EXCLUSIVE</literal> lock.
+     </para>
     </listitem>
    </varlistentry>
 
@@ -93,6 +100,10 @@ ALTER INDEX [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> RESE
       their defaults.  As with <literal>SET</>, a <literal>REINDEX</literal>
       might be needed to update the index entirely.
      </para>
+     <para>
+      Changing storage parameters requires only a
+      <literal>SHARE UPDATE EXCLUSIVE</literal> lock.
+     </para>
     </listitem>
    </varlistentry>
 
diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml
index 2b02e66..2d5aeb0 100644
--- a/doc/src/sgml/ref/alter_table.sgml
+++ b/doc/src/sgml/ref/alter_table.sgml
@@ -84,7 +84,10 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable>
 
   <para>
    <command>ALTER TABLE</command> changes the definition of an existing table.
-   There are several subforms:
+   There are several subforms described below. Note that the lock level required
+   may differ for each subform. An <literal>ACCESS EXCLUSIVE</literal> lock is held
+   unless explicitly noted. When multiple subcommands are listed, the lock
+   held will be the strictest one required from any subcommand.
 
   <variablelist>
    <varlistentry>
@@ -181,6 +184,9 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable>
       <productname>PostgreSQL</productname> query planner, refer to
       <xref linkend="planner-stats">.
      </para>
+     <para>
+      SET STATISTICS requires only a <literal>SHARE UPDATE EXCLUSIVE</literal> lock.
+     </para>
     </listitem>
    </varlistentry>
 
@@ -213,6 +219,10 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable>
       of statistics by the <productname>PostgreSQL</productname> query
       planner, refer to <xref linkend="planner-stats">.
      </para>
+     <para>
+      Changing per-attribute options uses a
+      <literal>SHARE UPDATE EXCLUSIVE</literal> lock.
+     </para>
     </listitem>
    </varlistentry>
 
@@ -338,11 +348,17 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable>
       Nothing happens if the constraint is already marked valid.
      </para>
      <para>
-      Validation can be a long process on larger tables and currently requires
-      an <literal>ACCESS EXCLUSIVE</literal> lock.  The value of separating
+      Validation can be a long process on larger tables. The value of separating
       validation from initial creation is that you can defer validation to less
       busy times, or can be used to give additional time to correct pre-existing
-      errors while preventing new errors.
+      errors while preventing new errors. Note also that validation on its own
+      does not prevent normal write commands against the table while it runs.
+     </para>
+     <para>
+      Validation requires only a <literal>SHARE UPDATE EXCLUSIVE</literal> lock
+      on the table being altered. If the constraint is a foreign key then
+      a <literal>ROW SHARE</literal> lock is also required on
+      the table referenced by the constraint.
      </para>
     </listitem>
    </varlistentry>
@@ -408,6 +424,9 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable>
       <xref linkend="SQL-CLUSTER">
       operations.  It does not actually re-cluster the table.
      </para>
+     <para>
+      Changing cluster options uses a <literal>SHARE UPDATE EXCLUSIVE</literal> lock.
+     </para>
     </listitem>
    </varlistentry>
 
@@ -420,6 +439,9 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable>
       index specification from the table.  This affects
       future cluster operations that don't specify an index.
      </para>
+     <para>
+      Changing cluster options uses a <literal>SHARE UPDATE EXCLUSIVE</literal> lock.
+     </para>
     </listitem>
    </varlistentry>
 
@@ -467,6 +489,10 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable>
       FULL</>, <xref linkend="SQL-CLUSTER"> or one of the forms
       of <command>ALTER TABLE</> that forces a table rewrite.
      </para>
+     <para>
+      Changing storage parameters requires only a
+      <literal>SHARE UPDATE EXCLUSIVE</literal> lock.
+     </para>
 
      <note>
       <para>
@@ -489,6 +515,10 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable>
       defaults.  As with <literal>SET</>, a table rewrite might be
       needed to update the table entirely.
      </para>
+     <para>
+      Changing storage parameters requires only a
+      <literal>SHARE UPDATE EXCLUSIVE</literal> lock.
+     </para>
     </listitem>
    </varlistentry>
 
@@ -1075,6 +1105,14 @@ ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address) REFERENCES
   </para>
 
   <para>
+   To add a foreign key constraint to a table minimising impact on other work:
+<programlisting>
+ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address) REFERENCES addresses (address) NOT VALID;
+ALTER TABLE distributors VALIDATE CONSTRAINT distfk;
+</programlisting>
+  </para>
+
+  <para>
    To add a (multicolumn) unique constraint to a table:
 <programlisting>
 ALTER TABLE distributors ADD CONSTRAINT dist_id_zipcode_key UNIQUE (dist_id, zipcode);
diff --git a/src/backend/catalog/toasting.c b/src/backend/catalog/toasting.c
index f044280..90f1794 100644
--- a/src/backend/catalog/toasting.c
+++ b/src/backend/catalog/toasting.c
@@ -27,6 +27,7 @@
 #include "catalog/toasting.h"
 #include "miscadmin.h"
 #include "nodes/makefuncs.h"
+#include "storage/lock.h"
 #include "utils/builtins.h"
 #include "utils/rel.h"
 #include "utils/syscache.h"
@@ -35,7 +36,7 @@
 Oid			binary_upgrade_next_toast_pg_type_oid = InvalidOid;
 
 static bool create_toast_table(Relation rel, Oid toastOid, Oid toastIndexOid,
-				   Datum reloptions);
+				   Datum reloptions, LOCKMODE lockmode);
 static bool needs_toast_table(Relation rel);
 
 
@@ -52,7 +53,7 @@ static bool needs_toast_table(Relation rel);
  * to end with CommandCounterIncrement if it makes any changes.
  */
 void
-AlterTableCreateToastTable(Oid relOid, Datum reloptions)
+AlterTableCreateToastTable(Oid relOid, Datum reloptions, LOCKMODE lockmode)
 {
 	Relation	rel;
 
@@ -63,10 +64,10 @@ AlterTableCreateToastTable(Oid relOid, Datum reloptions)
 	 * concurrent readers of the pg_class tuple won't have visibility issues,
 	 * so let's be safe.
 	 */
-	rel = heap_open(relOid, AccessExclusiveLock);
+	rel = heap_open(relOid, lockmode);
 
 	/* create_toast_table does all the work */
-	(void) create_toast_table(rel, InvalidOid, InvalidOid, reloptions);
+	(void) create_toast_table(rel, InvalidOid, InvalidOid, reloptions, lockmode);
 
 	heap_close(rel, NoLock);
 }
@@ -91,7 +92,8 @@ BootstrapToastTable(char *relName, Oid toastOid, Oid toastIndexOid)
 						relName)));
 
 	/* create_toast_table does all the work */
-	if (!create_toast_table(rel, toastOid, toastIndexOid, (Datum) 0))
+	if (!create_toast_table(rel, toastOid, toastIndexOid, (Datum) 0,
+							AccessExclusiveLock))
 		elog(ERROR, "\"%s\" does not require a toast table",
 			 relName);
 
@@ -107,7 +109,8 @@ BootstrapToastTable(char *relName, Oid toastOid, Oid toastIndexOid)
  * bootstrap they can be nonzero to specify hand-assigned OIDs
  */
 static bool
-create_toast_table(Relation rel, Oid toastOid, Oid toastIndexOid, Datum reloptions)
+create_toast_table(Relation rel, Oid toastOid, Oid toastIndexOid,
+				   Datum reloptions, LOCKMODE lockmode)
 {
 	Oid			relOid = RelationGetRelid(rel);
 	HeapTuple	reltup;
@@ -161,6 +164,14 @@ create_toast_table(Relation rel, Oid toastOid, Oid toastIndexOid, Datum reloptio
 		return false;
 
 	/*
+	 * We need to create a toast table. We shouldn't
+	 * have got this far if we're in ALTER TABLE unless
+	 * we are holding AccessExclusiveLock.
+	 */
+	if (lockmode < AccessExclusiveLock)
+		elog(ERROR, "AccessExclusiveLock required to add toast tables.");
+
+	/*
 	 * Create the toast table and its index
 	 */
 	snprintf(toast_relname, sizeof(toast_relname),
diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c
index 8b18e4a..bbe87ae 100644
--- a/src/backend/commands/cluster.c
+++ b/src/backend/commands/cluster.c
@@ -714,7 +714,11 @@ make_new_heap(Oid OIDOldHeap, Oid NewTableSpace, bool forcetemp,
 		if (isNull)
 			reloptions = (Datum) 0;
 
-		AlterTableCreateToastTable(OIDNewHeap, reloptions);
+		/*
+		 * Adding a toast table means we must have an AccessExclusiveLock,
+		 * which we need to have acquired before we examine the table.
+		 */
+		AlterTableCreateToastTable(OIDNewHeap, reloptions, AccessExclusiveLock);
 
 		ReleaseSysCache(tuple);
 	}
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c
index 73e6e20..ed38295 100644
--- a/src/backend/commands/createas.c
+++ b/src/backend/commands/createas.c
@@ -373,7 +373,7 @@ intorel_startup(DestReceiver *self, int operation, TupleDesc typeinfo)
 
 	(void) heap_reloptions(RELKIND_TOASTVALUE, toast_options, true);
 
-	AlterTableCreateToastTable(intoRelationId, toast_options);
+	AlterTableCreateToastTable(intoRelationId, toast_options, AccessExclusiveLock);
 
 	/* Create the "view" part of a materialized view. */
 	if (is_matview)
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 1de3170..5a9a867 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -2687,8 +2687,7 @@ AlterTableLookupRelation(AlterTableStmt *stmt, LOCKMODE lockmode)
  * The caller must lock the relation, with an appropriate lock level
  * for the subcommands requested. Any subcommand that needs to rewrite
  * tuples in the table forces the whole command to be executed with
- * AccessExclusiveLock (actually, that is currently required always, but
- * we hope to relax it at some point).	We pass the lock level down
+ * AccessExclusiveLock.  We pass the lock level down
  * so that we can apply it recursively to inherited tables. Note that the
  * lock level we want as we recurse might well be higher than required for
  * that specific subcommand. So we pass down the overall lock requirement,
@@ -2731,6 +2730,29 @@ AlterTableInternal(Oid relid, List *cmds, bool recurse)
 }
 
 /*
+ * AlterViewInternal
+ *
+ * ALTER VIEW with target specified by OID
+ *
+ * We do not reject if the relation is already open, because it's quite
+ * likely that one or more layers of caller have it open.  That means it
+ * is unsafe to use this entry point for alterations that could break
+ * existing query plans.
+ *
+ * All changes to views require AccessExclusiveLock
+ */
+void
+AlterViewInternal(Oid relid, List *cmds, bool recurse)
+{
+	Relation	rel;
+	LOCKMODE	lockmode = AccessExclusiveLock;
+
+	rel = relation_open(relid, lockmode);
+
+	ATController(rel, cmds, recurse, lockmode);
+}
+
+/*
  * AlterTableGetLockLevel
  *
  * Sets the overall lock level required for the supplied list of subcommands.
@@ -2750,35 +2772,29 @@ AlterTableInternal(Oid relid, List *cmds, bool recurse)
  * ALTER TABLE RENAME which is treated as a different statement type T_RenameStmt
  * and does not travel through this section of code and cannot be combined with
  * any of the subcommands given here.
+ *
+ * Note that Hot Standby only knows about AccessExclusiveLocks on the master
+ * so any changes that might affect SELECTs running on standbys need to use
+ * AccessExclusiveLocks even if you think a lesser lock would do, unless you
+ * have a solution for that also.
+ *
+ * Also note that pg_dump uses only an AccessShareLock, meaning that anything
+ * that takes a lock less than AccessExclusiveLock can change object definitions
+ * while pg_dump is running. Be careful to check that the appropriate data is
+ * derived by pg_dump using an MVCC snapshot, rather than syscache lookups,
+ * otherwise we might end up with an inconsistent dump that can't restore.
+ *
+ * Be careful to ensure this function is called for Tables and Indexes only.
+ * It is not currently safe to be called for Views because security_barrier
+ * is listed as an option and so would be allowed to be set at a level lower
+ * than AccessExclusiveLock, which would not be correct.
  */
 LOCKMODE
 AlterTableGetLockLevel(List *cmds)
 {
 	/*
-	 * Late in 9.1 dev cycle a number of issues were uncovered with access to
-	 * catalog relations, leading to the decision to re-enforce all DDL at
-	 * AccessExclusiveLock level by default.
-	 *
-	 * The issues are that there is a pervasive assumption in the code that
-	 * the catalogs will not be read unless an AccessExclusiveLock is held. If
-	 * that rule is relaxed, we must protect against a number of potential
-	 * effects - infrequent, but proven possible with test cases where
-	 * multiple DDL operations occur in a stream against frequently accessed
-	 * tables.
-	 *
-	 * 1. Catalog tables were read using SnapshotNow, which has a race bug that
-	 * allows a scan to return no valid rows even when one is present in the
-	 * case of a commit of a concurrent update of the catalog table.
-	 * SnapshotNow also ignores transactions in progress, so takes the latest
-	 * committed version without waiting for the latest changes.
-	 *
-	 * 2. Relcache needs to be internally consistent, so unless we lock the
-	 * definition during reads we have no way to guarantee that.
-	 *
-	 * 3. Catcache access isn't coordinated at all so refreshes can occur at
-	 * any time.
+	 * This only works if we read catalog tables using MVCC snapshots.
 	 */
-#ifdef REDUCED_ALTER_TABLE_LOCK_LEVELS
 	ListCell   *lcmd;
 	LOCKMODE	lockmode = ShareUpdateExclusiveLock;
 
@@ -2790,28 +2806,55 @@ AlterTableGetLockLevel(List *cmds)
 		switch (cmd->subtype)
 		{
 				/*
-				 * Need AccessExclusiveLock for these subcommands because they
-				 * affect or potentially affect both read and write
-				 * operations.
-				 *
-				 * New subcommand types should be added here by default.
+				 * These subcommands rewrite the heap, so require full locks.
 				 */
 			case AT_AddColumn:	/* may rewrite heap, in some cases and visible
 								 * to SELECT */
-			case AT_DropColumn:	/* change visible to SELECT */
-			case AT_AddColumnToView:	/* CREATE VIEW */
+			case AT_SetTableSpace:		/* must rewrite heap */
 			case AT_AlterColumnType:	/* must rewrite heap */
+			case AT_AddOids:			/* must rewrite heap */
+				cmd_lockmode = AccessExclusiveLock;
+				break;
+
+				/*
+				 * These subcommands may require addition of toast tables.
+				 */
+			case AT_SetStorage:			/* may add toast tables, see ATRewriteCatalogs() */
+				cmd_lockmode = AccessExclusiveLock;
+				break;
+
+				/*
+				 * Removing constraints can affect SELECTs that have been
+				 * optimised assuming the constraint holds true.
+				 */
 			case AT_DropConstraint:		/* as DROP INDEX */
-			case AT_AddOids:	/* must rewrite heap */
-			case AT_DropOids:	/* calls AT_DropColumn */
+			case AT_DropNotNull:		/* may change some SQL plans */
+				cmd_lockmode = AccessExclusiveLock;
+				break;
+
+				/*
+				 * Subcommands that may be visible to concurrent SELECTs
+				 */
+			case AT_DropColumn:			/* change visible to SELECT */
+			case AT_AddColumnToView:	/* CREATE VIEW */
+			case AT_DropOids:			/* calls AT_DropColumn */
 			case AT_EnableAlwaysRule:	/* may change SELECT rules */
 			case AT_EnableReplicaRule:	/* may change SELECT rules */
-			case AT_EnableRule:	/* may change SELECT rules */
+			case AT_EnableRule:			/* may change SELECT rules */
 			case AT_DisableRule:		/* may change SELECT rules */
+				cmd_lockmode = AccessExclusiveLock;
+				break;
+
+				/*
+				 * Changing owner may remove implicit SELECT privileges
+				 */
 			case AT_ChangeOwner:		/* change visible to SELECT */
-			case AT_SetTableSpace:		/* must rewrite heap */
-			case AT_DropNotNull:		/* may change some SQL plans */
-			case AT_SetNotNull:
+				cmd_lockmode = AccessExclusiveLock;
+				break;
+
+				/*
+				 * Changing foreign table options may affect optimisation.
+				 */
 			case AT_GenericOptions:
 			case AT_AlterColumnGenericOptions:
 				cmd_lockmode = AccessExclusiveLock;
@@ -2819,6 +2862,7 @@ AlterTableGetLockLevel(List *cmds)
 
 				/*
 				 * These subcommands affect write operations only.
+				 * XXX Theoretically, these could be ShareRowExclusiveLock.
 				 */
 			case AT_ColumnDefault:
 			case AT_ProcessedConstraint:		/* becomes AT_AddConstraint */
@@ -2832,10 +2876,12 @@ AlterTableGetLockLevel(List *cmds)
 			case AT_DisableTrig:
 			case AT_DisableTrigAll:
 			case AT_DisableTrigUser:
+			case AT_AlterConstraint:
 			case AT_AddIndex:	/* from ADD CONSTRAINT */
 			case AT_AddIndexConstraint:
 			case AT_ReplicaIdentity:
-				cmd_lockmode = ShareRowExclusiveLock;
+			case AT_SetNotNull:
+				cmd_lockmode = AccessExclusiveLock;
 				break;
 
 			case AT_AddConstraint:
@@ -2854,8 +2900,10 @@ AlterTableGetLockLevel(List *cmds)
 							 * could reduce the lock strength to ShareLock if
 							 * we can work out how to allow concurrent catalog
 							 * updates.
+							 * XXX Might be set down to ShareRowExclusiveLock
+							 * but requires further analysis.
 							 */
-							cmd_lockmode = ShareRowExclusiveLock;
+							cmd_lockmode = AccessExclusiveLock;
 							break;
 						case CONSTR_FOREIGN:
 
@@ -2863,12 +2911,15 @@ AlterTableGetLockLevel(List *cmds)
 							 * We add triggers to both tables when we add a
 							 * Foreign Key, so the lock level must be at least
 							 * as strong as CREATE TRIGGER.
+							 * XXX Might be set down to ShareRowExclusiveLock
+							 * though trigger info is accessed by
+							 * pg_get_triggerdef
 							 */
-							cmd_lockmode = ShareRowExclusiveLock;
+							cmd_lockmode = AccessExclusiveLock;
 							break;
 
 						default:
-							cmd_lockmode = ShareRowExclusiveLock;
+							cmd_lockmode = AccessExclusiveLock;
 					}
 				}
 				break;
@@ -2879,22 +2930,23 @@ AlterTableGetLockLevel(List *cmds)
 				 * behaviour, while queries started after we commit will see
 				 * new behaviour. No need to prevent reads or writes to the
 				 * subtable while we hook it up though.
+				 * Changing the TupDesc may be a problem, so keep highest lock.
 				 */
 			case AT_AddInherit:
 			case AT_DropInherit:
-				cmd_lockmode = ShareUpdateExclusiveLock;
+				cmd_lockmode = AccessExclusiveLock;
 				break;
 
 				/*
 				 * These subcommands affect implicit row type conversion. They
-				 * have affects similar to CREATE/DROP CAST on queries.  We
+				 * have affects similar to CREATE/DROP CAST on queries.
 				 * don't provide for invalidating parse trees as a result of
-				 * such changes.  Do avoid concurrent pg_class updates,
-				 * though.
+				 * such changes, so we keep these at AccessExclusiveLock.
 				 */
 			case AT_AddOf:
 			case AT_DropOf:
-				cmd_lockmode = ShareUpdateExclusiveLock;
+				cmd_lockmode = AccessExclusiveLock;
+				break;
 
 				/*
 				 * These subcommands affect general strategies for performance
@@ -2906,17 +2958,15 @@ AlterTableGetLockLevel(List *cmds)
 				 * applies: we don't currently allow concurrent catalog
 				 * updates.
 				 */
-			case AT_SetStatistics:
-			case AT_ClusterOn:
-			case AT_DropCluster:
-			case AT_SetRelOptions:
-			case AT_ResetRelOptions:
-			case AT_ReplaceRelOptions:
-			case AT_SetOptions:
-			case AT_ResetOptions:
-			case AT_SetStorage:
-			case AT_AlterConstraint:
-			case AT_ValidateConstraint:
+			case AT_SetStatistics:		/* Uses MVCC in getTableAttrs() */
+			case AT_ClusterOn:			/* Uses MVCC in getIndexes() */
+			case AT_DropCluster:		/* Uses MVCC in getIndexes() */
+			case AT_SetRelOptions:		/* Uses MVCC in getIndexes() and getTables() */
+			case AT_ResetRelOptions:	/* Uses MVCC in getIndexes() and getTables() */
+			case AT_ReplaceRelOptions:	/* Uses MVCC in getIndexes() and getTables() */
+			case AT_SetOptions:			/* Uses MVCC in getTableAttrs() */
+			case AT_ResetOptions:		/* Uses MVCC in getTableAttrs() */
+			case AT_ValidateConstraint:	/* Uses MVCC in getConstraints() */
 				cmd_lockmode = ShareUpdateExclusiveLock;
 				break;
 
@@ -2932,9 +2982,6 @@ AlterTableGetLockLevel(List *cmds)
 		if (cmd_lockmode > lockmode)
 			lockmode = cmd_lockmode;
 	}
-#else
-	LOCKMODE	lockmode = AccessExclusiveLock;
-#endif
 
 	return lockmode;
 }
@@ -3269,7 +3316,7 @@ ATRewriteCatalogs(List **wqueue, LOCKMODE lockmode)
 
 		if (tab->relkind == RELKIND_RELATION ||
 			tab->relkind == RELKIND_MATVIEW)
-			AlterTableCreateToastTable(tab->relid, (Datum) 0);
+			AlterTableCreateToastTable(tab->relid, (Datum) 0, lockmode);
 	}
 }
 
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c
index fa74bd2..7c46293 100644
--- a/src/backend/commands/trigger.c
+++ b/src/backend/commands/trigger.c
@@ -500,8 +500,8 @@ CreateTrigger(CreateTrigStmt *stmt, const char *queryString,
 	 * can skip this for internally generated triggers, since the name
 	 * modification above should be sufficient.
 	 *
-	 * NOTE that this is cool only because we have AccessExclusiveLock on the
-	 * relation, so the trigger set won't be changing underneath us.
+	 * NOTE that this is cool only because we have a sufficient lock on the
+	 * relation to ensure the trigger set won't be changing underneath us.
 	 */
 	if (!isInternal)
 	{
@@ -1243,8 +1243,8 @@ renametrig(RenameStmt *stmt)
 	 * on tgrelid/tgname would complain anyway) and to ensure a trigger does
 	 * exist with oldname.
 	 *
-	 * NOTE that this is cool only because we have AccessExclusiveLock on the
-	 * relation, so the trigger set won't be changing underneath us.
+	 * NOTE that this is cool only because we have a sufficient lock on the
+	 * relation to ensure that the trigger set won't be changing underneath us.
 	 */
 	tgrel = heap_open(TriggerRelationId, RowExclusiveLock);
 
diff --git a/src/backend/commands/view.c b/src/backend/commands/view.c
index 1735762..13ab1a2 100644
--- a/src/backend/commands/view.c
+++ b/src/backend/commands/view.c
@@ -206,7 +206,7 @@ DefineVirtualRelation(RangeVar *relation, List *tlist, bool replace,
 		}
 
 		/* OK, let's do it. */
-		AlterTableInternal(viewOid, atcmds, true);
+		AlterViewInternal(viewOid, atcmds, true);
 
 		/*
 		 * Seems okay, so return the OID of the pre-existing view.
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index d1621ad..b5b8689 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -927,7 +927,8 @@ ProcessUtilitySlow(Node *parsetree,
 												   toast_options,
 												   true);
 
-							AlterTableCreateToastTable(relOid, toast_options);
+							AlterTableCreateToastTable(relOid, toast_options,
+													   AccessExclusiveLock);
 						}
 						else if (IsA(stmt, CreateForeignTableStmt))
 						{
@@ -962,15 +963,17 @@ ProcessUtilitySlow(Node *parsetree,
 					Oid			relid;
 					List	   *stmts;
 					ListCell   *l;
-					LOCKMODE	lockmode;
+					LOCKMODE	lockmode = AccessExclusiveLock;
 
 					/*
 					 * Figure out lock mode, and acquire lock.	This also does
 					 * basic permissions checks, so that we won't wait for a
 					 * lock on (for example) a relation on which we have no
-					 * permissions.
+					 * permissions. Only safe for Tables and Indexes currently.
 					 */
-					lockmode = AlterTableGetLockLevel(atstmt->cmds);
+					if (atstmt->relkind == OBJECT_TABLE ||
+						atstmt->relkind == OBJECT_INDEX)
+						lockmode = AlterTableGetLockLevel(atstmt->cmds);
 					relid = AlterTableLookupRelation(atstmt, lockmode);
 
 					if (OidIsValid(relid))
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index add5cd1..038bc5a 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -54,6 +54,7 @@
 #include "utils/fmgroids.h"
 #include "utils/lsyscache.h"
 #include "utils/rel.h"
+#include "utils/snapmgr.h"
 #include "utils/syscache.h"
 #include "utils/tqual.h"
 #include "utils/typcache.h"
@@ -289,7 +290,7 @@ static char *pg_get_indexdef_worker(Oid indexrelid, int colno,
 					   bool attrsOnly, bool showTblSpc,
 					   int prettyFlags);
 static char *pg_get_constraintdef_worker(Oid constraintId, bool fullCommand,
-							int prettyFlags);
+							int prettyFlags, bool useSyscache);
 static text *pg_get_expr_worker(text *expr, Oid relid, const char *relname,
 				   int prettyFlags);
 static int print_function_arguments(StringInfo buf, HeapTuple proctup,
@@ -1258,10 +1259,30 @@ pg_get_constraintdef(PG_FUNCTION_ARGS)
 	Oid			constraintId = PG_GETARG_OID(0);
 	int			prettyFlags;
 
+	/*
+	 * Get the definition of the constraint as it is right now
+	 */
+	prettyFlags = PRETTYFLAG_INDENT;
+	PG_RETURN_TEXT_P(string_to_text(pg_get_constraintdef_worker(constraintId,
+																false,
+															  prettyFlags,
+															  true)));
+}
+
+Datum
+pg_get_constraintdef_mvcc(PG_FUNCTION_ARGS)
+{
+	Oid			constraintId = PG_GETARG_OID(0);
+	int			prettyFlags;
+
+	/*
+	 * Get the definition of the constraint as of the transaction snapshot.
+	 */
 	prettyFlags = PRETTYFLAG_INDENT;
 	PG_RETURN_TEXT_P(string_to_text(pg_get_constraintdef_worker(constraintId,
 																false,
-															  prettyFlags)));
+															  prettyFlags,
+															  false)));
 }
 
 Datum
@@ -1274,27 +1295,57 @@ pg_get_constraintdef_ext(PG_FUNCTION_ARGS)
 	prettyFlags = pretty ? PRETTYFLAG_PAREN | PRETTYFLAG_INDENT : PRETTYFLAG_INDENT;
 	PG_RETURN_TEXT_P(string_to_text(pg_get_constraintdef_worker(constraintId,
 																false,
-															  prettyFlags)));
+															  prettyFlags,
+															  true)));
 }
 
 /* Internal version that returns a palloc'd C string; no pretty-printing */
 char *
 pg_get_constraintdef_string(Oid constraintId)
 {
-	return pg_get_constraintdef_worker(constraintId, true, 0);
+	return pg_get_constraintdef_worker(constraintId, true, 0, true);
 }
 
 static char *
 pg_get_constraintdef_worker(Oid constraintId, bool fullCommand,
-							int prettyFlags)
+							int prettyFlags, bool useSyscache)
 {
 	HeapTuple	tup;
 	Form_pg_constraint conForm;
 	StringInfoData buf;
+	SysScanDesc	scandesc;
+	ScanKeyData scankey[1];
+	Relation	relation;
+
+	if (useSyscache)
+		tup = SearchSysCache1(CONSTROID, ObjectIdGetDatum(constraintId));
+	else
+	{
+		Snapshot    snapshot = RegisterSnapshot(GetTransactionSnapshot());
+		PushActiveSnapshot(snapshot);
+
+		relation = heap_open(ConstraintRelationId, AccessShareLock);
+
+		ScanKeyInit(&scankey[0],
+					ObjectIdAttributeNumber,
+					BTEqualStrategyNumber, F_OIDEQ,
+					ObjectIdGetDatum(constraintId));
+
+		scandesc = systable_beginscan(relation,
+										ConstraintOidIndexId,
+										true,
+										snapshot,
+										1,
+										scankey);
+		tup = systable_getnext(scandesc);
+
+		PopActiveSnapshot();
+		UnregisterSnapshot(snapshot);
+	}
 
-	tup = SearchSysCache1(CONSTROID, ObjectIdGetDatum(constraintId));
 	if (!HeapTupleIsValid(tup)) /* should not happen */
 		elog(ERROR, "cache lookup failed for constraint %u", constraintId);
+
 	conForm = (Form_pg_constraint) GETSTRUCT(tup);
 
 	initStringInfo(&buf);
@@ -1575,7 +1626,13 @@ pg_get_constraintdef_worker(Oid constraintId, bool fullCommand,
 		appendStringInfoString(&buf, " NOT VALID");
 
 	/* Cleanup */
-	ReleaseSysCache(tup);
+	if (useSyscache)
+		ReleaseSysCache(tup);
+	else
+	{
+		systable_endscan(scandesc);
+		heap_close(relation, AccessShareLock);
+	}
 
 	return buf.data;
 }
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 2810b35..086d9f8 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -161,6 +161,14 @@ static bool eoxact_list_overflowed = false;
 			eoxact_list_overflowed = true; \
 	} while (0)
 
+/*
+ * EOXactTupleDescArray stores *TupleDescs that (might) need AtEOXact
+ * cleanup work.  The array expands as needed; there is no hashtable because
+ * we don't need to access individual items except at EOXact.
+ */
+static TupleDesc *EOXactTupleDescArray;
+static int NextEOXactTupleDescNum = 0;
+static int EOXactTupleDescArrayLen = 0;
 
 /*
  *		macros to manipulate the lookup hashtables
@@ -219,11 +227,12 @@ static HTAB *OpClassCache = NULL;
 
 /* non-export function prototypes */
 
-static void RelationDestroyRelation(Relation relation);
+static void RelationDestroyRelation(Relation relation, bool remember_tupdesc);
 static void RelationClearRelation(Relation relation, bool rebuild);
 
 static void RelationReloadIndexInfo(Relation relation);
 static void RelationFlushRelation(Relation relation);
+static void RememberToFreeTupleDescAtEOX(TupleDesc td);
 static void AtEOXact_cleanup(Relation relation, bool isCommit);
 static void AtEOSubXact_cleanup(Relation relation, bool isCommit,
 					SubTransactionId mySubid, SubTransactionId parentSubid);
@@ -1811,7 +1820,7 @@ RelationReloadIndexInfo(Relation relation)
  *	Caller must already have unhooked the entry from the hash table.
  */
 static void
-RelationDestroyRelation(Relation relation)
+RelationDestroyRelation(Relation relation, bool remember_tupdesc)
 {
 	Assert(RelationHasReferenceCountZero(relation));
 
@@ -1831,7 +1840,20 @@ RelationDestroyRelation(Relation relation)
 	/* can't use DecrTupleDescRefCount here */
 	Assert(relation->rd_att->tdrefcount > 0);
 	if (--relation->rd_att->tdrefcount == 0)
-		FreeTupleDesc(relation->rd_att);
+	{
+		/*
+		 * If we Rebuilt a relcache entry during a transaction then its
+		 * possible we did that because the TupDesc changed as the result
+		 * of an ALTER TABLE that ran at less than AccessExclusiveLock.
+		 * It's possible someone copied that TupDesc, in which case the
+		 * copy would point to free'd memory. So if we rebuild an entry
+		 * we keep the TupDesc around until end of transaction, to be safe.
+		 */
+		if (remember_tupdesc)
+			RememberToFreeTupleDescAtEOX(relation->rd_att);
+		else
+			FreeTupleDesc(relation->rd_att);
+	}
 	list_free(relation->rd_indexlist);
 	bms_free(relation->rd_indexattr);
 	FreeTriggerDesc(relation->trigdesc);
@@ -1945,7 +1967,7 @@ RelationClearRelation(Relation relation, bool rebuild)
 		RelationCacheDelete(relation);
 
 		/* And release storage */
-		RelationDestroyRelation(relation);
+		RelationDestroyRelation(relation, false);
 	}
 	else if (!IsTransactionState())
 	{
@@ -2012,7 +2034,7 @@ RelationClearRelation(Relation relation, bool rebuild)
 		{
 			/* Should only get here if relation was deleted */
 			RelationCacheDelete(relation);
-			RelationDestroyRelation(relation);
+			RelationDestroyRelation(relation, false);
 			elog(ERROR, "relation %u deleted while still in use", save_relid);
 		}
 
@@ -2074,7 +2096,7 @@ RelationClearRelation(Relation relation, bool rebuild)
 #undef SWAPFIELD
 
 		/* And now we can throw away the temporary entry */
-		RelationDestroyRelation(newrel);
+		RelationDestroyRelation(newrel, !keep_tupdesc);
 	}
 }
 
@@ -2312,6 +2334,37 @@ RelationCloseSmgrByOid(Oid relationId)
 	RelationCloseSmgr(relation);
 }
 
+void
+RememberToFreeTupleDescAtEOX(TupleDesc td)
+{
+	if (EOXactTupleDescArray == NULL)
+	{
+		MemoryContext	oldcxt;
+		oldcxt = MemoryContextSwitchTo(CacheMemoryContext);
+
+		EOXactTupleDescArray = (TupleDesc *) palloc(16 * sizeof(TupleDesc));
+		EOXactTupleDescArrayLen = 16;
+		NextEOXactTupleDescNum = 0;
+		MemoryContextSwitchTo(oldcxt);
+	}
+	else if (NextEOXactTupleDescNum >= EOXactTupleDescArrayLen)
+	{
+		MemoryContext	oldcxt;
+		int32       	newlen = EOXactTupleDescArrayLen * 2;
+
+		oldcxt = MemoryContextSwitchTo(CacheMemoryContext);
+
+		Assert(EOXactTupleDescArrayLen > 0);
+
+		EOXactTupleDescArray = (TupleDesc *) repalloc(EOXactTupleDescArray,
+														newlen * sizeof(TupleDesc));
+		EOXactTupleDescArrayLen = newlen;
+		MemoryContextSwitchTo(oldcxt);
+	}
+
+	EOXactTupleDescArray[NextEOXactTupleDescNum++] = td;
+}
+
 /*
  * AtEOXact_RelationCache
  *
@@ -2367,9 +2420,20 @@ AtEOXact_RelationCache(bool isCommit)
 		}
 	}
 
-	/* Now we're out of the transaction and can clear the list */
+	if (EOXactTupleDescArrayLen > 0)
+	{
+		Assert(EOXactTupleDescArray != NULL);
+		for (i = 0; i < NextEOXactTupleDescNum; i++)
+			FreeTupleDesc(EOXactTupleDescArray[i]);
+		pfree(EOXactTupleDescArray);
+		EOXactTupleDescArray = NULL;
+	}
+
+	/* Now we're out of the transaction and can clear the lists */
 	eoxact_list_len = 0;
 	eoxact_list_overflowed = false;
+	NextEOXactTupleDescNum = 0;
+	EOXactTupleDescArrayLen = 0;
 }
 
 /*
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 4fabc1d..1448a5a 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -5335,9 +5335,14 @@ getConstraints(Archive *fout, TableInfo tblinfo[], int numTables)
 		selectSourceSchema(fout, tbinfo->dobj.namespace->dobj.name);
 
 		resetPQExpBuffer(query);
+
+		/*
+		 * Use MVCC to access constraintdef so that we get a definition
+		 * that matches the data we will select.
+		 */
 		appendPQExpBuffer(query,
 						  "SELECT tableoid, oid, conname, confrelid, "
-						  "pg_catalog.pg_get_constraintdef(oid) AS condef "
+						  "pg_catalog.pg_get_constraintdef_mvcc(oid) AS condef "
 						  "FROM pg_catalog.pg_constraint "
 						  "WHERE conrelid = '%u'::pg_catalog.oid "
 						  "AND contype = 'f'",
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index e33670c..0c989c6 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -1963,6 +1963,8 @@ DATA(insert OID = 1662 (  pg_get_triggerdef    PGNSP PGUID 12 1 0 0 0 f f f f t
 DESCR("trigger description");
 DATA(insert OID = 1387 (  pg_get_constraintdef PGNSP PGUID 12 1 0 0 0 f f f f t f s 1 0 25 "26" _null_ _null_ _null_ _null_ pg_get_constraintdef _null_ _null_ _null_ ));
 DESCR("constraint description");
+DATA(insert OID = 4033 (  pg_get_constraintdef_mvcc PGNSP PGUID 12 1 0 0 0 f f f f t f s 1 0 25 "26" _null_ _null_ _null_ _null_ pg_get_constraintdef_mvcc _null_ _null_ _null_ ));
+DESCR("constraint description (mvcc)");
 DATA(insert OID = 1716 (  pg_get_expr		   PGNSP PGUID 12 1 0 0 0 f f f f t f s 2 0 25 "194 26" _null_ _null_ _null_ _null_ pg_get_expr _null_ _null_ _null_ ));
 DESCR("deparse an encoded expression");
 DATA(insert OID = 1665 (  pg_get_serial_sequence	PGNSP PGUID 12 1 0 0 0 f f f f t f s 2 0 25 "25 25" _null_ _null_ _null_ _null_ pg_get_serial_sequence _null_ _null_ _null_ ));
diff --git a/src/include/catalog/toasting.h b/src/include/catalog/toasting.h
index ca047f0..07b2169 100644
--- a/src/include/catalog/toasting.h
+++ b/src/include/catalog/toasting.h
@@ -14,10 +14,13 @@
 #ifndef TOASTING_H
 #define TOASTING_H
 
+#include "storage/lock.h"
+
 /*
  * toasting.c prototypes
  */
-extern void AlterTableCreateToastTable(Oid relOid, Datum reloptions);
+extern void AlterTableCreateToastTable(Oid relOid, Datum reloptions,
+									   LOCKMODE lockmode);
 extern void BootstrapToastTable(char *relName,
 					Oid toastOid, Oid toastIndexOid);
 
diff --git a/src/include/commands/tablecmds.h b/src/include/commands/tablecmds.h
index 5c0518c..8a5185d 100644
--- a/src/include/commands/tablecmds.h
+++ b/src/include/commands/tablecmds.h
@@ -34,6 +34,7 @@ extern LOCKMODE AlterTableGetLockLevel(List *cmds);
 extern void ATExecChangeOwner(Oid relationOid, Oid newOwnerId, bool recursing, LOCKMODE lockmode);
 
 extern void AlterTableInternal(Oid relid, List *cmds, bool recurse);
+extern void AlterViewInternal(Oid relid, List *cmds, bool recurse);
 
 extern Oid	AlterTableNamespace(AlterObjectSchemaStmt *stmt);
 
diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h
index b90d88d..43bf7d0 100644
--- a/src/include/utils/builtins.h
+++ b/src/include/utils/builtins.h
@@ -670,6 +670,7 @@ extern char *pg_get_indexdef_columns(Oid indexrelid, bool pretty);
 extern Datum pg_get_triggerdef(PG_FUNCTION_ARGS);
 extern Datum pg_get_triggerdef_ext(PG_FUNCTION_ARGS);
 extern Datum pg_get_constraintdef(PG_FUNCTION_ARGS);
+extern Datum pg_get_constraintdef_mvcc(PG_FUNCTION_ARGS);
 extern Datum pg_get_constraintdef_ext(PG_FUNCTION_ARGS);
 extern char *pg_get_constraintdef_string(Oid constraintId);
 extern Datum pg_get_expr(PG_FUNCTION_ARGS);
diff --git a/src/test/isolation/expected/alter-table-1.out b/src/test/isolation/expected/alter-table-1.out
new file mode 100644
index 0000000..edf7288
--- /dev/null
+++ b/src/test/isolation/expected/alter-table-1.out
@@ -0,0 +1,2936 @@
+Parsed test spec with 2 sessions
+
+starting permutation: s1 at1 sc1 s2 at2 sc2 rx1 wx rx1 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 s2 at2 rx1 sc2 wx rx1 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step sc2: COMMIT;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 s2 at2 rx1 wx sc2 rx1 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step sc2: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 s2 at2 rx1 wx rx1 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step sc2: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 s2 at2 rx1 wx rx1 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 sc1 s2 rx1 at2 sc2 wx rx1 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 s2 rx1 at2 wx sc2 rx1 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step wx: INSERT INTO b VALUES (0);
+step sc2: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 s2 rx1 at2 wx rx1 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step sc2: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 s2 rx1 at2 wx rx1 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 sc1 s2 rx1 wx at2 sc2 rx1 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 s2 rx1 wx at2 rx1 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step sc2: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 s2 rx1 wx at2 rx1 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 sc1 s2 rx1 wx rx1 at2 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 s2 rx1 wx rx1 at2 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step c2: COMMIT;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 sc1 s2 rx1 wx rx1 c2 at2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 s2 at2 sc2 wx rx1 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 s2 at2 wx sc2 rx1 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step wx: INSERT INTO b VALUES (0);
+step sc2: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 s2 at2 wx rx1 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step sc2: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 s2 at2 wx rx1 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 s2 wx at2 sc2 rx1 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s2: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 s2 wx at2 rx1 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s2: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step sc2: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 s2 wx at2 rx1 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s2: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 s2 wx rx1 at2 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s2: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 s2 wx rx1 at2 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s2: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step c2: COMMIT;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 s2 wx rx1 c2 at2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s2: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 wx s2 at2 sc2 rx1 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 wx s2 at2 rx1 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step sc2: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 wx s2 at2 rx1 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 wx s2 rx1 at2 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s2: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 wx s2 rx1 at2 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s2: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step c2: COMMIT;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 wx s2 rx1 c2 at2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s2: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 wx rx1 s2 at2 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 wx rx1 s2 at2 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step c2: COMMIT;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 wx rx1 s2 c2 at2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step s2: BEGIN;
+step c2: COMMIT;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 sc1 rx1 wx rx1 c2 s2 at2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 s2 at2 sc2 wx rx1 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 s2 at2 wx sc2 rx1 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step wx: INSERT INTO b VALUES (0);
+step sc2: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 s2 at2 wx rx1 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step sc2: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 s2 at2 wx rx1 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 s2 wx at2 sc2 rx1 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step s2: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 s2 wx at2 rx1 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step s2: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step sc2: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 s2 wx at2 rx1 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step s2: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 s2 wx rx1 at2 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step s2: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 s2 wx rx1 at2 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step s2: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step c2: COMMIT;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 s2 wx rx1 c2 at2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step s2: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 wx s2 at2 sc2 rx1 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 wx s2 at2 rx1 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step sc2: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 wx s2 at2 rx1 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 wx s2 rx1 at2 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s2: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 wx s2 rx1 at2 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s2: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step c2: COMMIT;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 wx s2 rx1 c2 at2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s2: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 wx rx1 s2 at2 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 wx rx1 s2 at2 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step c2: COMMIT;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 wx rx1 s2 c2 at2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step s2: BEGIN;
+step c2: COMMIT;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 rx1 sc1 wx rx1 c2 s2 at2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+step sc1: COMMIT;
+step rx1: <... completed>
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: s1 at1 rx1 wx sc1 s2 at2 sc2 rx1 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 at1 rx1 wx sc1 s2 at2 rx1 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 at1 rx1 wx sc1 s2 at2 rx1 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 at1 rx1 wx sc1 s2 rx1 at2 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 at1 rx1 wx sc1 s2 rx1 at2 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 at1 rx1 wx sc1 s2 rx1 c2 at2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 at1 rx1 wx sc1 rx1 s2 at2 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 at1 rx1 wx sc1 rx1 s2 at2 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 at1 rx1 wx sc1 rx1 s2 c2 at2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 at1 rx1 wx sc1 rx1 c2 s2 at2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 at1 rx1 wx rx1 sc1 s2 at2 sc2 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 at1 rx1 wx rx1 sc1 s2 at2 c2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 at1 rx1 wx rx1 sc1 s2 c2 at2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 at1 rx1 wx rx1 sc1 c2 s2 at2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 at1 rx1 wx rx1 c2 sc1 s2 at2 sc2
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 s2 at2 sc2 wx rx1 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 s2 at2 wx sc2 rx1 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 s2 at2 wx rx1 sc2 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 s2 at2 wx rx1 c2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 s2 wx at2 sc2 rx1 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 s2 wx at2 rx1 sc2 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 s2 wx at2 rx1 c2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 s2 wx rx1 at2 sc2 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 s2 wx rx1 at2 c2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 s2 wx rx1 c2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 wx s2 at2 sc2 rx1 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 wx s2 at2 rx1 sc2 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 wx s2 at2 rx1 c2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 wx s2 rx1 at2 sc2 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 wx s2 rx1 at2 c2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 wx s2 rx1 c2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 wx rx1 s2 at2 sc2 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 wx rx1 s2 at2 c2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 wx rx1 s2 c2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 sc1 wx rx1 c2 s2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 wx sc1 s2 at2 sc2 rx1 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 wx sc1 s2 at2 rx1 sc2 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 wx sc1 s2 at2 rx1 c2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 wx sc1 s2 rx1 at2 sc2 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 wx sc1 s2 rx1 at2 c2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 wx sc1 s2 rx1 c2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 wx sc1 rx1 s2 at2 sc2 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 wx sc1 rx1 s2 at2 c2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 wx sc1 rx1 s2 c2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 wx sc1 rx1 c2 s2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 wx rx1 sc1 s2 at2 sc2 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 wx rx1 sc1 s2 at2 c2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 wx rx1 sc1 s2 c2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 wx rx1 sc1 c2 s2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: s1 rx1 at1 wx rx1 c2 sc1 s2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step at1: <... completed>
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: s1 rx1 wx at1 sc1 s2 at2 sc2 rx1 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 wx at1 sc1 s2 at2 rx1 sc2 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 wx at1 sc1 s2 at2 rx1 c2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 wx at1 sc1 s2 rx1 at2 sc2 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 wx at1 sc1 s2 rx1 at2 c2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 wx at1 sc1 s2 rx1 c2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 wx at1 sc1 rx1 s2 at2 sc2 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 wx at1 sc1 rx1 s2 at2 c2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 wx at1 sc1 rx1 s2 c2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 wx at1 sc1 rx1 c2 s2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 wx at1 rx1 sc1 s2 at2 sc2 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: s1 rx1 wx at1 rx1 sc1 s2 at2 c2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: s1 rx1 wx at1 rx1 sc1 s2 c2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: s1 rx1 wx at1 rx1 sc1 c2 s2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: s1 rx1 wx at1 rx1 c2 sc1 s2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step at1: <... completed>
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: s1 rx1 wx rx1 at1 sc1 s2 at2 sc2 c2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 wx rx1 at1 sc1 s2 at2 c2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 wx rx1 at1 sc1 s2 c2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 wx rx1 at1 sc1 c2 s2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: s1 rx1 wx rx1 at1 c2 sc1 s2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step c2: COMMIT;
+step at1: <... completed>
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: s1 rx1 wx rx1 c2 at1 sc1 s2 at2 sc2
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: rx1 s1 at1 sc1 s2 at2 sc2 wx rx1 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 s2 at2 wx sc2 rx1 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 s2 at2 wx rx1 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 s2 at2 wx rx1 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 s2 wx at2 sc2 rx1 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 s2 wx at2 rx1 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 s2 wx at2 rx1 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 s2 wx rx1 at2 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 s2 wx rx1 at2 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 s2 wx rx1 c2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 wx s2 at2 sc2 rx1 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 wx s2 at2 rx1 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 wx s2 at2 rx1 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 wx s2 rx1 at2 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 wx s2 rx1 at2 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 wx s2 rx1 c2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 wx rx1 s2 at2 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 wx rx1 s2 at2 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 wx rx1 s2 c2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 sc1 wx rx1 c2 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 wx sc1 s2 at2 sc2 rx1 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 wx sc1 s2 at2 rx1 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 wx sc1 s2 at2 rx1 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 wx sc1 s2 rx1 at2 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 wx sc1 s2 rx1 at2 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 wx sc1 s2 rx1 c2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 wx sc1 rx1 s2 at2 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 wx sc1 rx1 s2 at2 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 wx sc1 rx1 s2 c2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 wx sc1 rx1 c2 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 wx rx1 sc1 s2 at2 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 wx rx1 sc1 s2 at2 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 wx rx1 sc1 s2 c2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 wx rx1 sc1 c2 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: rx1 s1 at1 wx rx1 c2 sc1 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step at1: <... completed>
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: rx1 s1 wx at1 sc1 s2 at2 sc2 rx1 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 wx at1 sc1 s2 at2 rx1 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 wx at1 sc1 s2 at2 rx1 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 wx at1 sc1 s2 rx1 at2 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 wx at1 sc1 s2 rx1 at2 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 wx at1 sc1 s2 rx1 c2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 wx at1 sc1 rx1 s2 at2 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 wx at1 sc1 rx1 s2 at2 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 wx at1 sc1 rx1 s2 c2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 wx at1 sc1 rx1 c2 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 wx at1 rx1 sc1 s2 at2 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: rx1 s1 wx at1 rx1 sc1 s2 at2 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: rx1 s1 wx at1 rx1 sc1 s2 c2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: rx1 s1 wx at1 rx1 sc1 c2 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: rx1 s1 wx at1 rx1 c2 sc1 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step at1: <... completed>
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: rx1 s1 wx rx1 at1 sc1 s2 at2 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 wx rx1 at1 sc1 s2 at2 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 wx rx1 at1 sc1 s2 c2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 wx rx1 at1 sc1 c2 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 s1 wx rx1 at1 c2 sc1 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step c2: COMMIT;
+step at1: <... completed>
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: rx1 s1 wx rx1 c2 at1 sc1 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step s1: BEGIN;
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: rx1 wx s1 at1 sc1 s2 at2 sc2 rx1 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx s1 at1 sc1 s2 at2 rx1 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx s1 at1 sc1 s2 at2 rx1 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx s1 at1 sc1 s2 rx1 at2 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx s1 at1 sc1 s2 rx1 at2 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx s1 at1 sc1 s2 rx1 c2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx s1 at1 sc1 rx1 s2 at2 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx s1 at1 sc1 rx1 s2 at2 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx s1 at1 sc1 rx1 s2 c2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx s1 at1 sc1 rx1 c2 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx s1 at1 rx1 sc1 s2 at2 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: rx1 wx s1 at1 rx1 sc1 s2 at2 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: rx1 wx s1 at1 rx1 sc1 s2 c2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: rx1 wx s1 at1 rx1 sc1 c2 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+invalid permutation detected
+
+starting permutation: rx1 wx s1 at1 rx1 c2 sc1 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step at1: <... completed>
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: rx1 wx s1 rx1 at1 sc1 s2 at2 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx s1 rx1 at1 sc1 s2 at2 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx s1 rx1 at1 sc1 s2 c2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx s1 rx1 at1 sc1 c2 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx s1 rx1 at1 c2 sc1 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step c2: COMMIT;
+step at1: <... completed>
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: rx1 wx s1 rx1 c2 at1 sc1 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step s1: BEGIN;
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: rx1 wx rx1 s1 at1 sc1 s2 at2 sc2 c2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx rx1 s1 at1 sc1 s2 at2 c2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx rx1 s1 at1 sc1 s2 c2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx rx1 s1 at1 sc1 c2 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+invalid permutation detected
+
+starting permutation: rx1 wx rx1 s1 at1 c2 sc1 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; <waiting ...>
+step c2: COMMIT;
+step at1: <... completed>
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: rx1 wx rx1 s1 c2 at1 sc1 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step s1: BEGIN;
+step c2: COMMIT;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
+
+starting permutation: rx1 wx rx1 c2 s1 at1 sc1 s2 at2 sc2
+step rx1: SELECT * FROM b WHERE a_id = 1 LIMIT 1;
+a_id           
+
+1              
+step wx: INSERT INTO b VALUES (0);
+step rx1: SELECT * FROM b WHERE a_id = 3 LIMIT 3;
+a_id           
+
+3              
+3              
+3              
+step c2: COMMIT;
+step s1: BEGIN;
+step at1: ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID;
+step sc1: COMMIT;
+step s2: BEGIN;
+step at2: ALTER TABLE b VALIDATE CONSTRAINT bfk;
+step sc2: COMMIT;
diff --git a/src/test/isolation/expected/alter-table-2.out b/src/test/isolation/expected/alter-table-2.out
new file mode 100644
index 0000000..9e957bf
--- /dev/null
+++ b/src/test/isolation/expected/alter-table-2.out
@@ -0,0 +1,1681 @@
+Parsed test spec with 2 sessions
+
+starting permutation: s1 at1 c1 rx1 wx1 rx2 wx2 rx3 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+442368         
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+811008         
+step c2: COMMIT;
+
+starting permutation: s1 at1 rx1 c1 wx1 rx2 wx2 rx3 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step c1: COMMIT;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+442368         
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+811008         
+step c2: COMMIT;
+
+starting permutation: s1 at1 rx1 wx1 c1 rx2 wx2 rx3 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step c1: COMMIT;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+475136         
+step c2: COMMIT;
+
+starting permutation: s1 at1 rx1 wx1 rx2 c1 wx2 rx3 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step c1: COMMIT;
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+475136         
+step c2: COMMIT;
+
+starting permutation: s1 at1 rx1 wx1 rx2 wx2 c1 rx3 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step c1: COMMIT;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+
+starting permutation: s1 at1 rx1 wx1 rx2 wx2 rx3 c1 c2
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 at1 rx1 wx1 rx2 wx2 rx3 c2 c1
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: s1 rx1 at1 c1 wx1 rx2 wx2 rx3 c2
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+442368         
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+811008         
+step c2: COMMIT;
+
+starting permutation: s1 rx1 at1 wx1 c1 rx2 wx2 rx3 c2
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step c1: COMMIT;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+475136         
+step c2: COMMIT;
+
+starting permutation: s1 rx1 at1 wx1 rx2 c1 wx2 rx3 c2
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step c1: COMMIT;
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+475136         
+step c2: COMMIT;
+
+starting permutation: s1 rx1 at1 wx1 rx2 wx2 c1 rx3 c2
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step c1: COMMIT;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+
+starting permutation: s1 rx1 at1 wx1 rx2 wx2 rx3 c1 c2
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 rx1 at1 wx1 rx2 wx2 rx3 c2 c1
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: s1 rx1 wx1 at1 c1 rx2 wx2 rx3 c2
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+475136         
+step c2: COMMIT;
+
+starting permutation: s1 rx1 wx1 at1 rx2 c1 wx2 rx3 c2
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step c1: COMMIT;
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+475136         
+step c2: COMMIT;
+
+starting permutation: s1 rx1 wx1 at1 rx2 wx2 c1 rx3 c2
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step c1: COMMIT;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+
+starting permutation: s1 rx1 wx1 at1 rx2 wx2 rx3 c1 c2
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 rx1 wx1 at1 rx2 wx2 rx3 c2 c1
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: s1 rx1 wx1 rx2 at1 c1 wx2 rx3 c2
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+475136         
+step c2: COMMIT;
+
+starting permutation: s1 rx1 wx1 rx2 at1 wx2 c1 rx3 c2
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step c1: COMMIT;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+
+starting permutation: s1 rx1 wx1 rx2 at1 wx2 rx3 c1 c2
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 rx1 wx1 rx2 at1 wx2 rx3 c2 c1
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: s1 rx1 wx1 rx2 wx2 at1 c1 rx3 c2
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+
+starting permutation: s1 rx1 wx1 rx2 wx2 at1 rx3 c1 c2
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 rx1 wx1 rx2 wx2 at1 rx3 c2 c1
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: s1 rx1 wx1 rx2 wx2 rx3 at1 c1 c2
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: s1 rx1 wx1 rx2 wx2 rx3 at1 c2 c1
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: s1 rx1 wx1 rx2 wx2 rx3 c2 at1 c1
+step s1: BEGIN;
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+
+starting permutation: rx1 s1 at1 c1 wx1 rx2 wx2 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+442368         
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+811008         
+step c2: COMMIT;
+
+starting permutation: rx1 s1 at1 wx1 c1 rx2 wx2 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step c1: COMMIT;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+475136         
+step c2: COMMIT;
+
+starting permutation: rx1 s1 at1 wx1 rx2 c1 wx2 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step c1: COMMIT;
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+475136         
+step c2: COMMIT;
+
+starting permutation: rx1 s1 at1 wx1 rx2 wx2 c1 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step c1: COMMIT;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+
+starting permutation: rx1 s1 at1 wx1 rx2 wx2 rx3 c1 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: rx1 s1 at1 wx1 rx2 wx2 rx3 c2 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: rx1 s1 wx1 at1 c1 rx2 wx2 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+475136         
+step c2: COMMIT;
+
+starting permutation: rx1 s1 wx1 at1 rx2 c1 wx2 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step c1: COMMIT;
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+475136         
+step c2: COMMIT;
+
+starting permutation: rx1 s1 wx1 at1 rx2 wx2 c1 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step c1: COMMIT;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+
+starting permutation: rx1 s1 wx1 at1 rx2 wx2 rx3 c1 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: rx1 s1 wx1 at1 rx2 wx2 rx3 c2 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: rx1 s1 wx1 rx2 at1 c1 wx2 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+475136         
+step c2: COMMIT;
+
+starting permutation: rx1 s1 wx1 rx2 at1 wx2 c1 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step c1: COMMIT;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+
+starting permutation: rx1 s1 wx1 rx2 at1 wx2 rx3 c1 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: rx1 s1 wx1 rx2 at1 wx2 rx3 c2 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: rx1 s1 wx1 rx2 wx2 at1 c1 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+
+starting permutation: rx1 s1 wx1 rx2 wx2 at1 rx3 c1 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: rx1 s1 wx1 rx2 wx2 at1 rx3 c2 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: rx1 s1 wx1 rx2 wx2 rx3 at1 c1 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: rx1 s1 wx1 rx2 wx2 rx3 at1 c2 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: rx1 s1 wx1 rx2 wx2 rx3 c2 at1 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step s1: BEGIN;
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+
+starting permutation: rx1 wx1 s1 at1 c1 rx2 wx2 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+475136         
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 s1 at1 rx2 c1 wx2 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step c1: COMMIT;
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+475136         
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 s1 at1 rx2 wx2 c1 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step c1: COMMIT;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 s1 at1 rx2 wx2 rx3 c1 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 s1 at1 rx2 wx2 rx3 c2 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: rx1 wx1 s1 rx2 at1 c1 wx2 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+475136         
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 s1 rx2 at1 wx2 c1 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step c1: COMMIT;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 s1 rx2 at1 wx2 rx3 c1 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 s1 rx2 at1 wx2 rx3 c2 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: rx1 wx1 s1 rx2 wx2 at1 c1 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 s1 rx2 wx2 at1 rx3 c1 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 s1 rx2 wx2 at1 rx3 c2 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: rx1 wx1 s1 rx2 wx2 rx3 at1 c1 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 s1 rx2 wx2 rx3 at1 c2 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: rx1 wx1 s1 rx2 wx2 rx3 c2 at1 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+
+starting permutation: rx1 wx1 rx2 s1 at1 c1 wx2 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+475136         
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 rx2 s1 at1 wx2 c1 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step c1: COMMIT;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 rx2 s1 at1 wx2 rx3 c1 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 rx2 s1 at1 wx2 rx3 c2 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: rx1 wx1 rx2 s1 wx2 at1 c1 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step s1: BEGIN;
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 rx2 s1 wx2 at1 rx3 c1 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step s1: BEGIN;
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 rx2 s1 wx2 at1 rx3 c2 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step s1: BEGIN;
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: rx1 wx1 rx2 s1 wx2 rx3 at1 c1 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step s1: BEGIN;
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 rx2 s1 wx2 rx3 at1 c2 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step s1: BEGIN;
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: rx1 wx1 rx2 s1 wx2 rx3 c2 at1 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step s1: BEGIN;
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+
+starting permutation: rx1 wx1 rx2 wx2 s1 at1 c1 rx3 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 rx2 wx2 s1 at1 rx3 c1 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 rx2 wx2 s1 at1 rx3 c2 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: rx1 wx1 rx2 wx2 s1 rx3 at1 c1 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 rx2 wx2 s1 rx3 at1 c2 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: rx1 wx1 rx2 wx2 s1 rx3 c2 at1 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step s1: BEGIN;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+
+starting permutation: rx1 wx1 rx2 wx2 rx3 s1 at1 c1 c2
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+step c2: COMMIT;
+
+starting permutation: rx1 wx1 rx2 wx2 rx3 s1 at1 c2 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c2: COMMIT;
+step c1: COMMIT;
+
+starting permutation: rx1 wx1 rx2 wx2 rx3 s1 c2 at1 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step s1: BEGIN;
+step c2: COMMIT;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
+
+starting permutation: rx1 wx1 rx2 wx2 rx3 c2 s1 at1 c1
+step rx1: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+65536          
+step wx1: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx2: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+98304          
+step wx2: INSERT INTO b SELECT generate_series(1,1000) % 4;
+step rx3: SELECT pg_total_relation_size('b');
+pg_total_relation_size
+
+139264         
+step c2: COMMIT;
+step s1: BEGIN;
+step at1: ALTER TABLE b SET (fillfactor = 10);
+step c1: COMMIT;
diff --git a/src/test/isolation/isolation_schedule b/src/test/isolation/isolation_schedule
index 1e73b4a..6fd2fe1 100644
--- a/src/test/isolation/isolation_schedule
+++ b/src/test/isolation/isolation_schedule
@@ -23,4 +23,6 @@ test: multixact-no-deadlock
 test: multixact-no-forget
 test: propagate-lock-delete
 test: drop-index-concurrently-1
+test: alter-table-1
+test: alter-table-2
 test: timeouts
diff --git a/src/test/isolation/specs/alter-table-1.spec b/src/test/isolation/specs/alter-table-1.spec
new file mode 100644
index 0000000..f01084d
--- /dev/null
+++ b/src/test/isolation/specs/alter-table-1.spec
@@ -0,0 +1,34 @@
+# ALTER TABLE - Add and Validate constraint with concurrent writes
+#
+# ADD FOREIGN KEY allows a minimum of ShareRowExclusiveLock,
+# so we mix writes with it to see what works or waits.
+# VALIDATE allows a minimum of ShareUpdateExclusiveLock
+# so we mix reads with it to see what works or waits
+
+setup
+{
+ CREATE TABLE a (i int PRIMARY KEY);
+ CREATE TABLE b (a_id int);
+ INSERT INTO a VALUES (0), (1), (2), (3);
+ INSERT INTO b SELECT generate_series(1,1000) % 4;
+}
+
+teardown
+{
+ DROP TABLE a, b;
+}
+
+session "s1"
+step "s1"	{ BEGIN; }
+step "at1"	{ ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; }
+step "sc1"	{ COMMIT; }
+step "s2"	{ BEGIN; }
+step "at2"	{ ALTER TABLE b VALIDATE CONSTRAINT bfk; }
+step "sc2"	{ COMMIT; }
+
+session "s2"
+setup		{ BEGIN; }
+step "rx1"	{ SELECT * FROM b WHERE a_id = 1 LIMIT 1; }
+step "wx"	{ INSERT INTO b VALUES (0); }
+step "rx1"	{ SELECT * FROM b WHERE a_id = 3 LIMIT 3; }
+step "c2"	{ COMMIT; }
diff --git a/src/test/isolation/specs/alter-table-2.spec b/src/test/isolation/specs/alter-table-2.spec
new file mode 100644
index 0000000..bd0f3ba
--- /dev/null
+++ b/src/test/isolation/specs/alter-table-2.spec
@@ -0,0 +1,29 @@
+# ALTER TABLE - Change fillfactor
+#
+# As the fillfactor takes effect the table grows much larger
+
+setup
+{
+ CREATE TABLE b (a_id int);
+ ALTER TABLE b SET (fillfactor = 100);
+ INSERT INTO b SELECT generate_series(1,1000) % 4;
+}
+
+teardown
+{
+ DROP TABLE b;
+}
+
+session "s1"
+step "s1"	{ BEGIN; }
+step "at1"	{ ALTER TABLE b SET (fillfactor = 10); }
+step "c1"	{ COMMIT; }
+
+session "s2"
+setup		{ BEGIN; }
+step "rx1"	{ SELECT pg_total_relation_size('b'); }
+step "wx1"	{ INSERT INTO b SELECT generate_series(1,1000) % 4; }
+step "rx2"	{ SELECT pg_total_relation_size('b'); }
+step "wx2"	{ INSERT INTO b SELECT generate_series(1,1000) % 4; }
+step "rx3"	{ SELECT pg_total_relation_size('b'); }
+step "c2"	{ COMMIT; }
diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out
index 0f0c638..e2307ff 100644
--- a/src/test/regress/expected/alter_table.out
+++ b/src/test/regress/expected/alter_table.out
@@ -1840,76 +1840,87 @@ and relnamespace != (select oid from pg_namespace where nspname = 'pg_catalog')
 and c.relname != 'my_locks'
 group by c.relname;
 create table alterlock (f1 int primary key, f2 text);
+insert into alterlock values (1, 'foo');
+create table alterlock2 (f3 int primary key, f1 int);
+insert into alterlock2 values (1, 1);
 begin; alter table alterlock alter column f2 set statistics 150;
 select * from my_locks order by 1;
-  relname  |    max_lockmode     
------------+---------------------
- alterlock | AccessExclusiveLock
+  relname  |       max_lockmode       
+-----------+--------------------------
+ alterlock | ShareUpdateExclusiveLock
 (1 row)
 
 rollback;
 begin; alter table alterlock cluster on alterlock_pkey;
 select * from my_locks order by 1;
-    relname     |    max_lockmode     
-----------------+---------------------
- alterlock      | AccessExclusiveLock
- alterlock_pkey | AccessExclusiveLock
+    relname     |       max_lockmode       
+----------------+--------------------------
+ alterlock      | ShareUpdateExclusiveLock
+ alterlock_pkey | ShareUpdateExclusiveLock
 (2 rows)
 
 commit;
 begin; alter table alterlock set without cluster;
 select * from my_locks order by 1;
-  relname  |    max_lockmode     
------------+---------------------
- alterlock | AccessExclusiveLock
+  relname  |       max_lockmode       
+-----------+--------------------------
+ alterlock | ShareUpdateExclusiveLock
 (1 row)
 
 commit;
 begin; alter table alterlock set (fillfactor = 100);
 select * from my_locks order by 1;
-  relname  |    max_lockmode     
------------+---------------------
- alterlock | AccessExclusiveLock
- pg_toast  | AccessExclusiveLock
+  relname  |       max_lockmode       
+-----------+--------------------------
+ alterlock | ShareUpdateExclusiveLock
+ pg_toast  | ShareUpdateExclusiveLock
 (2 rows)
 
 commit;
 begin; alter table alterlock reset (fillfactor);
 select * from my_locks order by 1;
-  relname  |    max_lockmode     
------------+---------------------
- alterlock | AccessExclusiveLock
- pg_toast  | AccessExclusiveLock
+  relname  |       max_lockmode       
+-----------+--------------------------
+ alterlock | ShareUpdateExclusiveLock
+ pg_toast  | ShareUpdateExclusiveLock
 (2 rows)
 
 commit;
 begin; alter table alterlock set (toast.autovacuum_enabled = off);
 select * from my_locks order by 1;
-  relname  |    max_lockmode     
------------+---------------------
- alterlock | AccessExclusiveLock
- pg_toast  | AccessExclusiveLock
+  relname  |       max_lockmode       
+-----------+--------------------------
+ alterlock | ShareUpdateExclusiveLock
+ pg_toast  | ShareUpdateExclusiveLock
 (2 rows)
 
 commit;
 begin; alter table alterlock set (autovacuum_enabled = off);
 select * from my_locks order by 1;
-  relname  |    max_lockmode     
------------+---------------------
- alterlock | AccessExclusiveLock
- pg_toast  | AccessExclusiveLock
+  relname  |       max_lockmode       
+-----------+--------------------------
+ alterlock | ShareUpdateExclusiveLock
+ pg_toast  | ShareUpdateExclusiveLock
 (2 rows)
 
 commit;
 begin; alter table alterlock alter column f2 set (n_distinct = 1);
 select * from my_locks order by 1;
+  relname  |       max_lockmode       
+-----------+--------------------------
+ alterlock | ShareUpdateExclusiveLock
+(1 row)
+
+rollback;
+begin; alter table alterlock alter column f2 set storage extended;
+select * from my_locks order by 1;
   relname  |    max_lockmode     
 -----------+---------------------
  alterlock | AccessExclusiveLock
 (1 row)
 
 rollback;
-begin; alter table alterlock alter column f2 set storage extended;
+begin; alter table alterlock alter column f2 set default 'x';
 select * from my_locks order by 1;
   relname  |    max_lockmode     
 -----------+---------------------
@@ -1917,7 +1928,12 @@ select * from my_locks order by 1;
 (1 row)
 
 rollback;
-begin; alter table alterlock alter column f2 set default 'x';
+begin;
+create trigger ttdummy
+	before delete or update on alterlock
+	for each row
+	execute procedure
+	ttdummy (1, 1);
 select * from my_locks order by 1;
   relname  |    max_lockmode     
 -----------+---------------------
@@ -1925,7 +1941,48 @@ select * from my_locks order by 1;
 (1 row)
 
 rollback;
+begin;
+select * from my_locks order by 1;
+ relname | max_lockmode 
+---------+--------------
+(0 rows)
+
+alter table alterlock2 add foreign key (f1) references alterlock (f1);
+select * from my_locks order by 1;
+     relname     |    max_lockmode     
+-----------------+---------------------
+ alterlock       | AccessExclusiveLock
+ alterlock2      | AccessExclusiveLock
+ alterlock2_pkey | AccessShareLock
+ alterlock_pkey  | AccessShareLock
+(4 rows)
+
+rollback;
+begin;
+alter table alterlock2
+add constraint alterlock2nv foreign key (f1) references alterlock (f1) NOT VALID;
+select * from my_locks order by 1;
+  relname   |    max_lockmode     
+------------+---------------------
+ alterlock  | AccessExclusiveLock
+ alterlock2 | AccessExclusiveLock
+(2 rows)
+
+commit;
+begin;
+alter table alterlock2 validate constraint alterlock2nv;
+select * from my_locks order by 1;
+     relname     |       max_lockmode       
+-----------------+--------------------------
+ alterlock       | RowShareLock
+ alterlock2      | ShareUpdateExclusiveLock
+ alterlock2_pkey | AccessShareLock
+ alterlock_pkey  | AccessShareLock
+(4 rows)
+
+rollback;
 -- cleanup
+drop table alterlock2;
 drop table alterlock;
 drop view my_locks;
 drop type lockmodes;
diff --git a/src/test/regress/sql/alter_table.sql b/src/test/regress/sql/alter_table.sql
index 87973c1..a2ad863 100644
--- a/src/test/regress/sql/alter_table.sql
+++ b/src/test/regress/sql/alter_table.sql
@@ -1283,6 +1283,9 @@ and c.relname != 'my_locks'
 group by c.relname;
 
 create table alterlock (f1 int primary key, f2 text);
+insert into alterlock values (1, 'foo');
+create table alterlock2 (f3 int primary key, f1 int);
+insert into alterlock2 values (1, 1);
 
 begin; alter table alterlock alter column f2 set statistics 150;
 select * from my_locks order by 1;
@@ -1324,7 +1327,33 @@ begin; alter table alterlock alter column f2 set default 'x';
 select * from my_locks order by 1;
 rollback;
 
+begin;
+create trigger ttdummy
+	before delete or update on alterlock
+	for each row
+	execute procedure
+	ttdummy (1, 1);
+select * from my_locks order by 1;
+rollback;
+
+begin;
+select * from my_locks order by 1;
+alter table alterlock2 add foreign key (f1) references alterlock (f1);
+select * from my_locks order by 1;
+rollback;
+
+begin;
+alter table alterlock2
+add constraint alterlock2nv foreign key (f1) references alterlock (f1) NOT VALID;
+select * from my_locks order by 1;
+commit;
+begin;
+alter table alterlock2 validate constraint alterlock2nv;
+select * from my_locks order by 1;
+rollback;
+
 -- cleanup
+drop table alterlock2;
 drop table alterlock;
 drop view my_locks;
 drop type lockmodes;
