Tek*_*row 2 sql postgresql sql-insert
我想知道是否可以将列输入值重用作为另一个列值输入的默认值(如果留空)。我试图在DEFAULT代码之后简单地填充引用。
CREATE TABLE members (
name varchar(50) NOT NULL,
username varchar(50) DEFAULT name
);
INSERT INTO members (name) VALUES ('el duderino');
SELECT * FROM members;
Run Code Online (Sandbox Code Playgroud)
所需结果;
name | username
--------------+--------------
el duderino | el duderino
Run Code Online (Sandbox Code Playgroud)
insert语句运行但由于以下错误而无法建立表,因此找不到该表...
psql:website.sql:38:错误:无法在默认表达式中使用列引用
是否可以在一行的默认语句中引用值的名字?还是必须分阶段进行?任何帮助,不胜感激!
注意:我正在Cloud 9开发机器上运行Postgresql。
Ade*_*lip 13
如果您在 Postgres 中设置默认值时遇到类似的错误。例如 :
错误:无法在 DEFAULT 表达式中使用列引用第 6 行:is_used boolean DEFAULT 否,
解决方案是将默认值放在单引号中;
Dar*_*sli 12
Postgres 12 现在具有生成的列!
CREATE TABLE members (
name varchar(50) NOT NULL,
username varchar(50) GENERATED ALWAYS AS (name) STORED
);
Run Code Online (Sandbox Code Playgroud)
您可以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;
Run Code Online (Sandbox Code Playgroud)
调用触发器:
create trigger trig_insert_members_username
before insert
on members
for each row
execute procedure insert_members_username();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1981 次 |
| 最近记录: |