如何在 postgresql 数据库中创建一个包含一列枚举数据类型的表?

Ayu*_*yal 8 postgresql

如何在 PostgreSQL 数据库中创建具有一列枚举数据类型的表?

表名: Employee

列:

ID: Integer

Name: ENUM
Run Code Online (Sandbox Code Playgroud)

以下是查询,但不确定它是否正确。

CREATE TYPE Name AS ENUM();

CREATE TABLE IF NOT EXISTS Employee(
    ID integer NOT NULL,
    Name DEFAULT NULL,
    CONSTRAINT "Employee_pkey" PRIMARY KEY (id)
 );
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

S-M*_*Man 10

1.在行中

Name DEFAULT NULL,
Run Code Online (Sandbox Code Playgroud)

您要么忘记了列的名称,要么将列定义为枚举类型:

myname Name DEFAULT NULL, -- add column name
Run Code Online (Sandbox Code Playgroud)

或者

Name Name DEFAULT NULL, -- add enum type
Run Code Online (Sandbox Code Playgroud)


2.因为“Name”是 Postgres 中的关键字,所以您还必须更改类型名称。否则它将无法工作。


3.但是:您的枚举类型没有值。所以你无法插入任何值。您必须添加一些枚举值:

CREATE TYPE name_type AS ENUM('name1', 'name2');
Run Code Online (Sandbox Code Playgroud)


最终的:

CREATE TYPE name_type AS ENUM('name1', 'name2');

CREATE TABLE Employee2(
    ID integer, 
    myname name_type
);
Run Code Online (Sandbox Code Playgroud)

演示:db<>fiddle


小智 6

这里有一个简单的示例,考虑向 Employee 表的枚举列添加一个名称,并向枚举添加一些值。

 CREATE TYPE NameEnum AS ENUM('Jony','Bala','Mark');

 CREATE TABLE IF NOT EXISTS Employee(
    ID integer NOT NULL,
    name NameEnum DEFAULT NULL,
    CONSTRAINT "Employee_pkey" PRIMARY KEY (id)
 );

 Insert into Employee(ID,name)
 Values(1,  (SELECT enum_first(NULL::NameEnum)))

 Select * from Employee
 Output:
Run Code Online (Sandbox Code Playgroud)

数据输出