有没有办法在PostgreSQL中创建一个唯一的枚举集?
postgresql - Postgres唯一的枚举SET?-LMLPHP
notifications是一组Notification枚举。我希望这个集合是唯一的,假设你的集合中不能有两次{Notification.PUSH, Notification.PUSH}
是否有方法设置此数据类型?

最佳答案

是的,这在使用函数的check约束下是可能的:

CREATE TABLE arr(ia int[]);

CREATE FUNCTION check_array_unique(anyarray) RETURNS boolean
   LANGUAGE sql IMMUTABLE AS
'SELECT (SELECT count(DISTINCT x) FROM unnest($1) AS x(x)) = cardinality($1)';

ALTER TABLE arr ADD CHECK (check_array_unique(ia));

INSERT INTO arr VALUES (ARRAY[1,2,3,4]);
INSERT 0 1

INSERT INTO arr VALUES (ARRAY[1,2,3,4,1]);
ERROR:  new row for relation "arr" violates check constraint "arr_ia_check"
DETAIL:  Failing row contains ({1,2,3,4,1}).

关于postgresql - Postgres唯一的枚举SET?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57709293/

10-16 21:50