はじめに

Vertica7.2以降、チェック制約の設定が可能となっています。チェック制約を使用することで条件を指定し、条件を満たさないデータの追加を禁止できるため、データの整合性が保証されます。チェック制約は、以下の処理に対しておこなわれます。
– INSERT文
– UPDATE文
– MERGE文
– COPY文
– COPY_PARTITIONS_TO_TABLEメタ関数
– MOVE_PARTITIONS_TO_TABLEメタ関数
– SWAP_PARTITIONS_BETWEEN_TABLESメタ関数

構文

・チェック制約を有効にします。

※データベース作成時点では、デフォルト「1」(有効)が設定されています。
※変更はオンラインで可能であり、データベースの再起動は不要です。

・「QUANTITY列に0より大きい値」のみを追加できるように、チェック制約を作成します。制約の名前は「chk_pos_quant」です。

※テーブル単位でチェック制約の「有効/無効」を制御したい場合は、CREATE TABLEのオプションで「ENABLED/DISABLED」を指定します。

制約の確認方法

作成したチェック制約は「table_constraints」もしくは「constraint_columns」システムテーブルから、定義情報を確認できます。

項目説明
constraint_id制約を識別するために、Verticaカタログによって割り当てられた一意の番号
constraint_name制約の名前(UNIQUE、FOREIGN KEY、NOT NULL、PRIMARY KEY、CHECKを指定した場合)
constraint_schema_id制約を含むスキーマを識別するために、Verticaカタログによって割り当てられた一意の番号
constraint_key_count制約キーの数
foreign_key_count外部キーの数
table_idテーブルを識別するために、Verticaカタログによって割り当てられた一意の番号
table_name制約を含むテーブルの名前
foreign_table_id外部キー制約で参照される外部表の一意のオブジェクト番号(外部キー制約でない場合はゼロ)
constraint_type制約のタイプを示します。
c — check
f — foreign
p — primary
u — unique
is_enabled主キー、一意キー、チェック制約が使用可能かどうかを示します。
t — 使用可能
f — 使用不可
predicateチェック制約で設定したSQL式

実行例

QUANTITY列にチェック制約を設定したテーブルに対して、制約に違反したデータを追加した場合の実行例をご紹介します。

参考情報

主キー/一意キー制約による重複データの排除
http://vertica-tech.ashisuto.co.jp/primary-key/

参照整合性制約に違反したデータを確認する方法
http://vertica-tech.ashisuto.co.jp/pk_fk_chk/

検証バージョンについて

この記事の内容はVertica 9.1で確認しています。