如果出现空值,我需要枚举的默认值。 默认情况下,它不起作用。我在创建表时设置了默认值。 如果我在值中传递默认值,则会显示默认值,但我有空数据和枚举数据作为输入。
INSERT INTO table(enum_value_1, enum_value_2)
VALUES (?, ?)
目前我是这样经过的
INSERT INTO table(enum_value_1, enum_value_2)
VALUES (NULL, 'enum_value')
但我需要这样的数据
创建表命令
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/