Уникальный индекс или ограничение на ключ hstore

Я хотел бы создать уникальный индекс или ограничение для определенных ключей в столбце hstore, если этот ключ существует. Я надеялся, что ответ будет найден где-то в этом другом вопросе:

Практические ограничения индексов выражения в PostgreSQL

Но я пробовал каждую версию синтаксиса, который я мог придумать, и ничего не получилось.

в настоящее время моя таблица

hstore_table

поле hstore: hstore_value

и ключи, которые я хотел бы заставить быть уникальными, это "foo" и "bar", когда они существуют.

Моя версия PostgreSQL - это 8.4.13

+7
источник поделиться
1 ответ

Если я понял, что вы просите правильно, вам нужен неполный уникальный функциональный индекс:

CREATE TABLE hstest ( x hstore not null );

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

Предложение WHERE строго не требуется, поскольку поиск ключа будет null, если он не найден. Будет ли это соответствовать, будет зависеть от ваших запросов.

Если вам нужны несколько ключей, используйте два индекса, если вы хотите, чтобы эти два были независимыми или указали два выражения, если вы хотите связать их, чтобы единственное ограничение позволяло (1,2) и (1,3) или (2, 2), но не другое (1,2), например:

CREATE UNIQUE INDEX hstest_key_k1k2_values_unique 
ON hstest ((x -> 'k1'), (x -> 'k2'));
+15
источник

Посмотрите другие вопросы по меткам или Задайте вопрос