有没有办法在PostgreSQL中创建一个唯一的枚举集?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/