すべてのプロダクト
Search
ドキュメントセンター

PolarDB:ALTER TABLE... ENABLE/DISABLE CONSTRAINT

最終更新日:Jun 05, 2024

ALTER TABLE... ENABLE/DISABLE CONSTRAINTは、制約を有効または無効にします。

前提条件

  • polar_constraintプラグインは、shared_preload_librariesパラメーターの値に追加されます。

  • カーネルのバージョンはV1.1.11以降です。 カーネルバージョンをアップグレードする方法の詳細については、「バージョン管理」をご参照ください。

  • polar_constraintプラグインは、カーネルバージョンが手動でV1.1.11にアップグレードされるクラスターにインストールされます。 プラグインをインストールするには、次のステートメントを実行します。

    逸脱しない場合は拡張を作成しますpolar_constraint;

構文

  • ALTER TABLE table_name ADD CONSTRAINT CONSTRAINT constraint_name DISABLE;

    table_nameテーブルに制約を追加します。 constraint_name制約は無効状態です。 これは、この制約がテーブル内のデータとテーブルに挿入されるデータに適用されないことを示しています。

    構文は、次の4種類の制約をサポートしています。

    • 主キー制約

    • ユニークな制約

    • 外部キー制約

    • チェック制約

  • ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;

    制約を有効にします。 デフォルトでは、テーブル内のデータが制約を満たしているかどうかがチェックされます。 データが制約を満たさない場合、システムはエラーを報告します。 エラーには、制約を満たさないテーブルデータが含まれます。

    説明

    制約が外部キー制約であり、主キー制約または別のテーブルの一意の制約に関連付けられていると仮定する。 外部キー制約を有効にする前に、主キー制約または外部キー制約に関連付けられている一意の制約が有効になっているかどうかを確認する必要があります。 主キー制約または一意制約が有効になっている場合は、外部キー制約を有効にできます。 有効化しない場合、システムによりエラーが報告されます。

  • ALTER TABLE table_name ENABLE CONSTRAINT constraint_name NOT VALID;

    制約を有効にしますが、テーブル内のデータが制約を満たすかどうかはチェックしません。

  • ALTER TABLE table_name DISABLE CONSTRAINT constraint_name;

    制約を無効にします。 無効化された制約は機能しなくなりました。

    説明

    主キー制約または一意の制約は、他のオブジェクトによって参照されてもよい。 例えば、主キー制約は、別のテーブルの外部キー制約によって参照される。 この場合、外部キー制約が無効化または削除されない場合、主キー制約は無効化できません。

次の文を実行して、テーブルを作成します。

CREATE TABLE aa(a1 INT);
テーブルの作成 

次のステートメントを実行して、a1列の値が10より大きくなければならない制約を作成します。 デフォルトでは、制約は無効になっています。

ALTER TABLE aa ADD CONSTRAINT aa_a1_check CHECK(a1>10) DISABLE;
ALTERテーブル 

次のステートメントを実行して、制約を満たさない値を挿入します。 制約が無効になっているため、値を挿入できます。

aa値に挿入 (10);
挿入0 1 

次のステートメントを実行して制約を有効にし、既存の値が制約を満たしているかどうかを確認します。 テーブルの値が制約を満たしていないため、システムはエラーを報告します。

ALTER TABLE ENABLE CONSTRAINT aa_a1_check;
エラー: チェック制約 "aa_a1_check" が何らかの行
によって違反されている

次のステートメントを実行して制約を有効にしますが、既存の値が制約を満たしているかどうかは確認しません。

ALTER TABLE aa ENABLE CONSTRAINT aa_a1_check NOT VALID;
ALTERテーブル 

次のステートメントを実行して、制約を満たさない値を挿入します。 その結果、システムはエラーを報告します。

aa値に挿入 (10);
エラー: リレーション「aa」の新しい行がチェック制約「aa_a1_check」に違反
詳細: 失敗した行には (10) が含まれます。