sql - postgresql 如何插入具有默认值的枚举字段?

标签 sql postgresql go enums

如果出现空值,我需要枚举的默认值。 默认情况下,它不起作用。我在创建表时设置了默认值。 如果我在值中传递默认值,则会显示默认值,但我有空数据和枚举数据作为输入。

INSERT INTO table(enum_value_1, enum_value_2)
VALUES (?, ?)

目前我是这样经过的

INSERT INTO table(enum_value_1, enum_value_2)
VALUES (NULL, 'enum_value')
<表类=“s-表”> <标题> enum_value_1 enum_value_2 <正文> 空 枚举值

但我需要这样的数据

<表类=“s-表”> <标题> enum_value_1 enum_value_2 <正文> 枚举值默认值 枚举值

创建表命令

CREATE TYPE enum_candidate_status AS ENUM('attended', 'selected', 'rejected', 'not attended');   

CREATE TYPE enum_rating AS ENUM('1', '2', '3', '4', '5');  
 
CREATE TABLE CANDIDATE (
candidate_id SERIAL PRIMARY KEY, 
first_name varchar(100), 
candidate_status enum_candidate_status DEFAULT 'not attended',
interview_rating enum_rating,
);

最佳答案

要管理此操作,您必须使用函数和触发器

注意并执行以下操作。我举了你的例子,以便你能够理解。

第一次CREATE TYPE和TABLE

CREATE TYPE enum_candidate_status AS ENUM('attended', 'selected', 'rejected', 'not attended');
CREATE TYPE enum_rating AS ENUM('1', '2', '3', '4', '5');  
CREATE TABLE CANDIDATE ( candidate_id SERIAL PRIMARY KEY,  
                    first_name varchar(100),  
                    candidate_status enum_candidate_status DEFAULT 'not attended',    
                    interview_rating enum_rating);

那么你必须像下面这样创建函数:

CREATE OR REPLACE FUNCTION force_candidate_status_defaults()
RETURNS trigger
LANGUAGE plpgsql AS
$func$
BEGIN
NEW.candidate_status := 'not attended';
RETURN NEW;
END
$func$;

最后,您必须创建触发器来控制您的查询,如下所示:

CREATE TRIGGER test_table_before_insert
BEFORE INSERT ON CANDIDATE
FOR EACH ROW
WHEN (NEW.candidate_status IS NULL)  -- !
EXECUTE FUNCTION force_candidate_status_defaults();

现在您可以测试查询并享受它

INSERT INTO CANDIDATE(candidate_status, interview_rating) VALUES (NULL, '3') RETURNING *;

关于sql - postgresql 如何插入具有默认值的枚举字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72701874/

相关文章:

sql - postgresql 9.5 : trying to split a string into two fields based on spaces

node.js - Postgres 和 NodeJS 的测试装置

python - 如何改进这个多对多 Django ORM 查询和模型集?

http - Go Web 服务器的进程管理

mysql - 为什么我的 MySQL 查询排序不正确?

sql - 为开发人员提供适当的 SQL Server 权限

python - 将货币插入 SQL 数据库

sql - 计算关联数

google-app-engine - GAE/去 : Namespace not working

go - 为什么在这种情况下 float32 比 float64 更准确?