Postgres中的代数数据类型

Abr*_*m P 8 sql postgresql enums types union-types

是否可以在Postgres中创建代数数据类型,然后将其用作列类型?

例如:

CREATE TYPE hoofed AS ENUM('horse', 'goat');

CREATE TYPE monkey AS ENUM('chimp','macaque');

CREATE TYPE ANIMAL AS ENUM(hoofed, monkey);
Run Code Online (Sandbox Code Playgroud)

这失败了:

syntax error at or near "hoofed"
LINE 1: CREATE TYPE ANIMAL AS ENUM(hoofed, monkey);
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?

最终,我希望能够做到的是这样的事情:

CREATE TABLE zoo (
    a ANIMAL,
    name text
);

INSERT INTO zoo(a, name) VALUES('horse', 'bob');
INSERT INTO zoo(a, name) VALUES('macaque', 'jimmy');
Run Code Online (Sandbox Code Playgroud)

并且两个记录都是独立有效的.

编辑:@ Abihabi87下面的回复确实允许我创建一个实际的产品类型,但它仍然不允许我根据需要创建一个联合类型.

Pio*_*r R 7

你不能从别人枚举类型创建类型枚举:

你可以创建像这样的ANIMAL:

CREATE TYPE ANIMAL AS (h hoofed,m monkey);
Run Code Online (Sandbox Code Playgroud)

使用示例:

CREATE TABLE your_table
(
    a ANIMAL
);

INSERT INTO your_table(a) select (select ('horse','macaque')::ANIMAL);
Run Code Online (Sandbox Code Playgroud)