首页 > 解决方案 > postgres 中是否有任何独特的枚举数组类型?

问题描述

假设有一个枚举days_of_the_week值从“星期日”到“星期六”。

现在,假设我们有一个包含 和 列的表company_namedays其中 days 是一个数组,表示公司活跃的天数。

在这种情况下,我们希望数组的值与枚举兼容,并且值在数组中是唯一的(例如,一个值中不允许有两个星期一)。

是否有任何数据类型可以处理所有这些并具有优化查找查询的好处?

标签: postgresql

解决方案


以下可能不是您正在寻找的内容,但我认为没有办法在数组上添加唯一约束。反正我不喜欢用它们。

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;

推荐阅读