Workarounds for DDL restrictions#
PGD DDLオペレーション処理の制限の一部をワークアラウンドできます。多くの場合、操作をより小さな変更に分割すると、単一のステートメントとして許可されないか、過剰なロックが必要な目的の結果が生成される場合があります。
コンストレインの追加#
DMLロックを必要とせずにCHECK およびFOREIGN KEY
制約を追加できます。これには、2段階のプロセスが含まれます。
ALTER TABLE ... ADD CONSTRAINT ... NOT VALIDALTER TABLE ... VALIDATE CONSTRAINT
2つの異なるトランザクションでこれらの手順を実行します。これらの手順は両方とも、テーブルでのみDDLロックを取得するため、1つ以上のノードがダウンしている場合でも実行できます。ただし、コンストレインを検証するには、PGDは次のことを確認する必要があります。
クラスター内のすべてのノードは
ADD CONSTRAINTコマンドを参照します。コンストレインを検証するノードは、これらのノードにNOT VALIDコンストレインを作成する前に、他のすべてのノードからレプリケーション変更を適用します。
したがって、新しいメカニズムでは、制約の検証中にすべてのノードがアップしている必要はありませんが、すべてのノードがALTER TABLE .. ADD CONSTRAINT ... NOT VALID
コマンドを適用し、十分に進行していることは必要です。
PGDは、コンストレインを検証する前に、一貫した状態に到達するのを待機します。
新しい機能では、クラスターがRaftプロトコルバージョン24以降で実行されている必要があります。 Raftプロトコルがまだアップグレードされていない場合、古いメカニズムが使用され、DMLロック要求が発生します。