ablog

不器用で落着きのない技術者のメモ

Amazon Redshift のプライマリキー

主キー制約、一意制約、外部キー制約は違反してもエラーにならないので注意!
CREATE TABLE文で制約の定義は普通にできるのですが、違反しているデータをINSERTしようとしてもエラーにはならずINSERTできてしまいます。なおNOT NULL制約に違反した場合はちゃんとエラーになります。

プライマリキーおよび外部キーの制約の定義 - Amazon Redshift

これからAmazon Redshiftを始める技術者が注意すべき11つのポイント | DevelopersIO

一意性、プライマリキー、および外部キーの制約は情報提供のみを目的としており、Amazon Redshift によって強要されることはありません。ただし、プライマリキーと外部キーはプランニング時のヒントとして使用されます。アプリケーションの ETL プロセスまたは他の何らかのプロセスによってこれらのキーの整合性が強要される場合は、これらのキーを宣言する必要があります。

たとえば、クエリプランナーは特定の統計計算でプライマリキーと外部キーを使用して、サブクエリの非相関技術に影響を与える一意性および参照関係を推論したり、多数の結合を指示したり、冗長な結合を回避したりします。

プランナはこれらのキーの関係を活用しますが、Amazon Redshift テーブルのすべてのキーがロード時に有効であることが前提となります。アプリケーションが無効な外部キーまたはプライマリキーを許可する場合、いくつかのクエリが不正な結果を返す可能性があります。たとえば、プライマリキーが一意でない場合、SELECT DISTINCT クエリが重複した行を返すことがあります。有効かどうかわからない場合は、テーブルに対してキーの制約を定義しないでください。一方、有効だとわかっている場合は、プライマリキー、外部キー、および一意性の制約を必ず宣言してください。

Amazon Redshift は、NOT NULL 列の制約を適用します。

制約の定義 - Amazon Redshift