代码之家  ›  专栏  ›  技术社区  ›  Aishwarya V

我们可以在PSQL中的整数列上创建枚举吗?

  •  0
  • Aishwarya V  · 技术社区  · 8 年前

    我正在使用PSQL,并尝试创建一个包含列REQ_TYPE和RESP_STATUS的表。我决定使用ENUM来避免表中的无效条目。

    我已经使用这个查询成功地为REQ_TYPE创建了ENUM。

    创建类型RequestType作为枚举('GET'、'POST'、'PUT'、'DELETE'、'PATCH');

    但是对于RESP_STATUS,当我尝试下面的查询时,

    将类型ResponseStatus创建为ENUM(20020120220430130230440040140404405413415429500);

    我得到了回应

    错误:“200”处或附近的语法错误

    我确信

    创建类型ResponseStatus作为枚举('200','201','202');

    这将解决我的问题。但我只想保持RESP_STATUS为整数。

    我可以在整数上创建枚举吗?如果是,如何?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Community CDub    7 年前

    枚举是一组任意标签,仅等于它们自身;它们不是对特定类型值的约束。将类型定义中的字符串视为更像列名或编程语言常量,而不是实际值。

    您可能正在寻找一个域(请参阅 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状态代码列表的外键约束的普通整数列,因为这允许:

    • 有关要存储的HTTP状态的详细信息(例如。 description , is_error , is_redirect )
    • 更容易添加新的HTTP状态(例如,您缺少 410 GONE 417 Expectation Failed (来自您的示例)
        2
  •  1
  •   Mike Sherrill 'Cat Recall'    8 年前

    不,不能在一组整数上创建枚举。从…起 reading the fine manual

    枚举类型采用一个或多个引用标签的列表

    我无法理解你为什么想要一个整数的枚举。直接使用整数,可以在检查约束中使用,也可以使用对有效整数表的外键引用。

    对于HTTP状态代码,它似乎是您的目标,是对HTTP状态代码表的外键引用 及其意义 这很有道理。