今日のチャンネル
#postgresqlでは 、非常に興味深い質問が提起されました(読みやすくするために変更されました)。
テーブルに制約を作成する必要があります。 制約は、文字列と論理の2つのフィールドの一意性を検証する必要があります。 ただし、追加の要件があります。 文字列と値がTRUEのエントリは1つのみ許可されます。 同時に、特定の文字列で複数のレコードが許可されますが、値はFALSEです。 たとえば、{"abc"、false}が複数ある場合もありますが、{"abc"、true}は1行のみです。
さて、このタスクの重要性は何ですか? これは、
PostgreSQLの柔軟性を利用した非常に良い例です
。PostgreSQLには、部分インデックスのメカニズムが備わっています。 ソリューションはシンプルでエレガントです:
CREATE TABLE foo(bar
TEXT 、bing
BOOLEAN );
foobar(bar、bing)での
ユニーク インデックス baz_indexの作成
WHERE bing
= 't' ;
foobarの
値に 挿入 (
'1' 、
't' );
foobarの
値に 挿入 (
'2' 、
't' );
foobarの
値に 挿入 (
'1' 、
'f' );
foobarの
値に 挿入 (
'1' 、
'f' );
foobarの
値に 挿入 (
'1' 、
't' );
エラー:キー値の重複が一意制約「baz_index」に違反しています独創的なものはすべてシンプルです。 それだけです!