我正在使用PSQL而我正在尝试创建一个包含REQ_TYPE和RESP_STATUS列的表。我已经决定使用ENUM来避免表中的无效条目。
我已使用此查询成功为REQ_TYPE创建ENUM。
创建类型RequestType AS ENUM(' GET',' POST',' PUT',' DELETE'' PATCH& #39);
但对于RESP_STATUS,当我尝试以下查询时,
创建类型ResponseStatus AS ENUM(200,201,202,204,301,302,304,400,401,403,404,405,413,415,429,500);
我收到了回复
错误:语法错误等于或接近" 200"
我确定
创建类型ResponseStatus AS ENUM(' 200',' 201',' 202');
会解决我的问题。但我只想将RESP_STATUS保持为INTEGER。
我可以在INTEGER上创建ENUM吗?如果是,怎么样?
答案 0 :(得分:1)
不,您无法在一组整数上创建ENUM。来自reading the fine manual
枚举类型采用一个或多个带引号的标签列表
我无法理解为什么你想要一个整数的ENUM。直接在CHECK约束中使用整数,或者使用对有效整数表的外键引用。
对于HTTP状态代码(似乎是您的目标),对HTTP状态代码及其含义的表的外键引用非常有意义。
答案 1 :(得分:1)
枚举是一组任意标签,只与自己相等;它们不是对特定类型值的约束。将类型定义中的字符串看作更像列名或编程语言常量而不是实际值。
您可能正在寻找一个域名(请参阅documentation for CREATE DOMAIN
),这样您就可以有效地"子类型"带有允许值列表的整数:
CREATE DOMAIN http_status AS integer
CHECK (
VALUE IN
(200,201,202,204,301,302,304,400,401,403,404,405,413,415,429,500)
)
但是,正如Mike Sherrill's answer中所建议的那样,使用带有指向已知HTTP状态代码列表的外键约束的普通整数列可能更合适,因为这允许:
description
,is_error
,is_redirect
)410 GONE
和417 Expectation Failed
)