8

そのキーが存在する場合、hstore 列の特定のキーに一意のインデックスまたは制約を作成したいと考えています。この他の質問のどこかに答えが見つかることを望んでいました:

PostgreSQL での式インデックスの実際的な制限

しかし、思いついたすべてのバージョンの構文を試しましたが、何も機能しませんでした。

現在、私のテーブルは

hstore_table

hstore フィールドは hstore_value です

そして、私が強制的に一意にしたいキーは、存在する場合は「foo」と「bar」です。

私のPostgreSQLのバージョンは8.4.13です

4

1 に答える 1

16

あなたが求めていることを正しく理解していれば、部分的に一意の関数インデックスが必要です。

CREATE TABLE hstest ( x hstore not null );

CREATE UNIQUE INDEX hstest_key_k1_values_unique 
ON hstest((x -> 'k1'))
WHERE ( x ? 'k1' );

WHEREキー検索が見つからない場合は null になるため、句は厳密には必要ありません。適切かどうかは、クエリによって異なります。

複数のキーが必要な場合は、2 つのインデックスを独立させたい場合は 2 つのインデックスを使用し、2 つの式をリンクする場合は 2 つの式にインデックスを付けて、一意の制約で (1,2) と (1,3) または (2,2) が許可されるようにします。次のように、別の (1,2) ではありません。

CREATE UNIQUE INDEX hstest_key_k1k2_values_unique 
ON hstest ((x -> 'k1'), (x -> 'k2'));
于 2013-03-07T03:06:43.980 に答える