astmt = (AlterTableStmt *) parsetree;
hasInvalid = false;
- lockmode = AlterTableGetLockLevel(astmt->cmds);
+ /*
+ * XXX: Is NoLock sufficient? It should be as we don't allow concurrent
+ * DDL in BDR at all at the moment.
+ *
+ * Can't use AlterTableGetLockLevel(astmt->cmds);
+ * Otherwise we deadlock between the global DDL locks and DML replay.
+ */
+ lockmode = NoLock;
relid = AlterTableLookupRelation(astmt, lockmode);
stmts = transformAlterTableStmt(relid, astmt, queryString);
error_on_persistent_rv(
astmt->relation,
"ALTER TABLE ... ADD COLUMN ... DEFAULT",
- AlterTableGetLockLevel(astmt->cmds),
+ lockmode,
astmt->missing_ok);
}
error_on_persistent_rv(
astmt->relation,
"ALTER TABLE ... ADD COLUMN ... DEFAULT",
- AlterTableGetLockLevel(astmt->cmds),
+ lockmode,
astmt->missing_ok);
}
}
if (con->contype == CONSTR_EXCLUSION)
error_on_persistent_rv(astmt->relation,
"ALTER TABLE ... ADD CONSTRAINT ... EXCLUDE",
- AlterTableGetLockLevel(astmt->cmds),
+ lockmode,
astmt->missing_ok);
}
break;
case AT_AlterConstraint:
error_on_persistent_rv(astmt->relation,
"ALTER TABLE ... ALTER CONSTRAINT",
- AlterTableGetLockLevel(astmt->cmds),
+ lockmode,
astmt->missing_ok);
break;
case AT_AddIndexConstraint:
error_on_persistent_rv(astmt->relation,
"ALTER TABLE ... ADD CONSTRAINT USING INDEX",
- AlterTableGetLockLevel(astmt->cmds),
+ lockmode,
astmt->missing_ok);
break;
case AT_AlterColumnType:
error_on_persistent_rv(astmt->relation,
"ALTER TABLE ... ALTER COLUMN TYPE",
- AlterTableGetLockLevel(astmt->cmds),
+ lockmode,
astmt->missing_ok);
break;
case AT_AlterColumnGenericOptions:
error_on_persistent_rv(astmt->relation,
"ALTER TABLE ... ALTER COLUMN OPTIONS",
- AlterTableGetLockLevel(astmt->cmds),
+ lockmode,
astmt->missing_ok);
break;
case AT_DropOids:
error_on_persistent_rv(astmt->relation,
"ALTER TABLE ... SET WITH[OUT] OIDS",
- AlterTableGetLockLevel(astmt->cmds),
+ lockmode,
astmt->missing_ok);
break;
case AT_DisableRule:
error_on_persistent_rv(astmt->relation,
"ALTER TABLE ... ENABLE|DISABLE [ALWAYS|REPLICA] RULE",
- AlterTableGetLockLevel(astmt->cmds),
+ lockmode,
astmt->missing_ok);
break;
case AT_DropInherit:
error_on_persistent_rv(astmt->relation,
"ALTER TABLE ... [NO] INHERIT",
- AlterTableGetLockLevel(astmt->cmds),
+ lockmode,
astmt->missing_ok);
break;
case AT_DropOf:
error_on_persistent_rv(astmt->relation,
"ALTER TABLE ... [NOT] OF",
- AlterTableGetLockLevel(astmt->cmds),
+ lockmode,
astmt->missing_ok);
break;
case AT_ResetOptions:
error_on_persistent_rv(astmt->relation,
"ALTER TABLE ... ALTER COLUMN ... SET STATISTICS|(...)",
- AlterTableGetLockLevel(astmt->cmds),
+ lockmode,
astmt->missing_ok);
break;
case AT_GenericOptions:
error_on_persistent_rv(astmt->relation,
"ALTER TABLE ... SET (...)",
- AlterTableGetLockLevel(astmt->cmds),
+ lockmode,
astmt->missing_ok);
break;
if (hasInvalid)
error_on_persistent_rv(astmt->relation,
"This variant of ALTER TABLE",
- AlterTableGetLockLevel(astmt->cmds),
+ lockmode,
astmt->missing_ok);
}