Есть ли в postgres какой-либо уникальный тип массива enum? - PullRequest
0 голосов
/ 07 июня 2018

Предположим, что есть перечисление days_of_the_week со значениями от 'Sunday' до 'Saturday'.

Теперь давайте предположим, что у нас есть таблица со столбцами company_name и days, где days - этомассив, который показывает, в какие дни компания активна.

В этом случае мы бы хотели, чтобы значения массива были совместимы с перечислением и чтобы значения были уникальными в пределах массива (например, не разрешать два понедельника).'в одном значении).

Есть ли какой-либо тип данных, который бы обрабатывал все это и имел преимущество в оптимизации поисковых запросов?

1 Ответ

0 голосов
/ 07 июня 2018

Следующее может быть не совсем то, что вы ищете, но я не думаю, что есть способ добавить уникальное ограничение для массива.Я все равно не люблю их использовать.

CREATE TYPE days_of_the_week as enum (
    'Sunday',
    'Monday',
    'Tuesday',
    'Wednesday',
    'Thursday',
    'Friday',
    'Saturday'
);

CREATE TABLE company (
    id SERIAL PRIMARY KEY NOT NULL,
    company_name CHARACTER VARYING(1024) NOT NULL
);

CREATE TABLE company_active (
    id_company integer NOT NULL REFERENCES company(id) ON DELETE CASCADE,
    days days_of_the_week NOT NULL
);

ALTER TABLE company_active
ADD CONSTRAINT company_active_unique UNIQUE (id_company, days);

INSERT INTO company (company_name) VALUES ('test');

INSERT INTO company_active (id_company, days)
SELECT id, 'Monday'::days_of_the_week
FROM company;

INSERT INTO company_active (id_company, days)
SELECT id, 'Tuesday'::days_of_the_week
FROM company;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...