我们可以在 PSQL 中的 INTEGER 列上创建 ENUM 吗?
Can we create ENUM on INTEGER column in PSQL?
我正在使用 PSQL,我正在尝试创建一个包含列 REQ_TYPE 和 RESP_STATUS 的 table。我决定使用 ENUM 来避免 table 中的无效条目。
我已经使用此查询成功地为 REQ_TYPE 创建了 ENUM。
CREATE TYPE RequestType AS ENUM('GET','POST','PUT','DELETE','PATCH');
但是对于 RESP_STATUS,当我尝试下面的查询时,
CREATE TYPE ResponseStatus AS ENUM(200,201,202,204,301,302,304,400,401,403,404,405,413,415,429,500);
我收到了回复
ERROR: syntax error at or near "200"
我确定
CREATE TYPE ResponseStatus AS ENUM('200','201','202');
会解决我的问题。但我只想将 RESP_STATUS 保留为 INTEGER。
我可以在 INTEGER 上创建 ENUM 吗?如果是,如何?
不,您不能在一组整数上创建 ENUM。来自 reading the fine manual
Enum types take a list of one or more quoted labels
我不明白为什么您需要整数 ENUM。直接在 CHECK 约束中使用整数,或者使用外键引用 table 有效整数。
对于 HTTP 状态代码,这似乎是您的目标,对 table HTTP 状态代码 及其含义 的外键引用很有意义.
枚举是一组任意标签,只等于它们自己;它们不是对特定类型值的约束。将类型定义中的字符串视为比实际值更像列名或编程语言常量。
您可能正在寻找一个域(请参阅 documentation for CREATE DOMAIN
),这将允许您有效地 "sub-type" 具有允许值列表的整数:
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)
)
但是,如 中所建议的,使用具有指向已知 HTTP 状态代码列表的外键约束的普通整数列可能更合适,因为这允许:
- 有关要存储的 HTTP 状态的详细信息(例如
description
、is_error
、is_redirect
)
- 更容易添加新的 HTTP 状态(例如,您的示例中缺少
410 GONE
和 417 Expectation Failed
)
我正在使用 PSQL,我正在尝试创建一个包含列 REQ_TYPE 和 RESP_STATUS 的 table。我决定使用 ENUM 来避免 table 中的无效条目。
我已经使用此查询成功地为 REQ_TYPE 创建了 ENUM。
CREATE TYPE RequestType AS ENUM('GET','POST','PUT','DELETE','PATCH');
但是对于 RESP_STATUS,当我尝试下面的查询时,
CREATE TYPE ResponseStatus AS ENUM(200,201,202,204,301,302,304,400,401,403,404,405,413,415,429,500);
我收到了回复
ERROR: syntax error at or near "200"
我确定
CREATE TYPE ResponseStatus AS ENUM('200','201','202');
会解决我的问题。但我只想将 RESP_STATUS 保留为 INTEGER。
我可以在 INTEGER 上创建 ENUM 吗?如果是,如何?
不,您不能在一组整数上创建 ENUM。来自 reading the fine manual
Enum types take a list of one or more quoted labels
我不明白为什么您需要整数 ENUM。直接在 CHECK 约束中使用整数,或者使用外键引用 table 有效整数。
对于 HTTP 状态代码,这似乎是您的目标,对 table HTTP 状态代码 及其含义 的外键引用很有意义.
枚举是一组任意标签,只等于它们自己;它们不是对特定类型值的约束。将类型定义中的字符串视为比实际值更像列名或编程语言常量。
您可能正在寻找一个域(请参阅 documentation for CREATE DOMAIN
),这将允许您有效地 "sub-type" 具有允许值列表的整数:
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)
)
但是,如
- 有关要存储的 HTTP 状态的详细信息(例如
description
、is_error
、is_redirect
) - 更容易添加新的 HTTP 状态(例如,您的示例中缺少
410 GONE
和417 Expectation Failed
)