我想知道是否可以将列输入值重新用作另一个列值输入的默认值(如果它留空)。我试图在DEFAULT代码之后简单地填充引用。
CREATE TABLE members (
name varchar(50) NOT NULL,
username varchar(50) DEFAULT name
);
INSERT INTO members (name) VALUES ('el duderino');
SELECT * FROM members;
期望的结果;
name | username
--------------+--------------
el duderino | el duderino
insert语句运行但找不到表,因为它没有因为以下错误而构建...
psql:website.sql:38:错误:无法在默认表达式中使用列引用
是否可以在一行中引用默认语句中的值first name?或者这必须分阶段完成吗?任何帮助非常感谢!
注意:我在Cloud 9开发机器上运行Postgresql。
答案 0 :(得分:4)
您可以为此创建TRIGGER
:
要调用的函数:
create or replace function insert_members_username() returns trigger as $$
begin
if NEW.username is null then
NEW.username := NEW.name;
end if;
return new;
end;
$$ language plpgsql;
致电触发器:
create trigger trig_insert_members_username
before insert
on members
for each row
execute procedure insert_members_username();
答案 1 :(得分:4)
Postgres 12现在具有Generated Columns!
CREATE TABLE members (
name varchar(50) NOT NULL,
username varchar(50) GENERATED ALWAYS AS (name) STORED
);
答案 2 :(得分:3)
如果您在 Postgres 中设置默认值时遇到类似的错误。例如:
<块引用>错误:无法在 DEFAULT 表达式第 6 行中使用列引用: is_used boolean DEFAULT 否,
解决方案是将默认值放在单引号中;