是否可以在 postgres 11.x 中创建 smallints 的 ENUM?

Is it possible to create an ENUM of smallints in postgres 11.x?

我想创建一个枚举类型来约束 pl/pgsql 函数接受参数 1、2 或 3。枚举类型似乎是解决此问题的方法。

我试过如下创建我的枚举:

CREATE TYPE my_enum AS ENUM ('1'::smallint, '2'::smallint);
/*                           ^ syntax error here         */

根据 PostgreSQL documentationENUM 类型总是固定值:

An enum value occupies four bytes on disk. The length of an enum value's textual label is limited by the NAMEDATALEN setting compiled into PostgreSQL; in standard builds this means at most 63 bytes.

因此,您不能将其转换为 smallint -- 抱歉!

相反,如果您关心 space,我想您可以创建一个引用 table 并创建一个外键约束。

披露:我为 EnterpriseDB (EDB)

工作