如何制作一个带有ENUM的新TYPE,它接受一个间隔的所有成员?像:
CREATE TYPE letters [a...z]
答案 0 :(得分:0)
有no built-in syntax for this,但您可以使用动态SQL执行此操作:
DO
$$
BEGIN
EXECUTE
(
SELECT 'CREATE TYPE a2z AS ENUM ('''
|| string_agg(chr(ascii('a') + g), ''',''')
|| ''')'
FROM generate_series(0,25) g
);
END
$$;
这构建并执行以下形式的语句:
CREATE TYPE a2z AS ENUM ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z')
这取决于您的语言环境,但我认为所有语言环境在连续范围内都有a-z
,这就是所需的全部内容。使用UTF-8语言环境进行测试。
ENUM
对于长值列表,往往会更改或不像示例或特殊数据类型那样简单的值。请考虑创建一个小的查找表,并使用{{ 3}}到它。选择日期的示例:
CREATE TABLE my_date (my_date date PRIMARY KEY);
INSERT INTO my_date(my_date) VALUES ('2015-02-03'), ...;
CREATE TABLE foo (
foo_id serial PRIMARY KEY
, my_date date REFERENCES my_date ON UPDATE CASCADE
--, more columns ...
);