在表中插入新行时,我想在插入新行后立即将自动生成的主键值保存到同一行的第二列中。
比方说:
我有一个表名teacher
,它有三列id, pid, name
。
id
是主键,而pid
可以是重复的。
现在,每当我插入新行时,id
都会自动递增。
我想使用postgresql查询将id
列的自动递增值复制到同一行的pid
列中。
你能指导我如何使用postgresql查询来实现这一点吗?
我认为在表teacher
上需要一个before insert
触发器。为了实现它,您需要一个触发器函数。
create or replace function pid_bi_tf() returns trigger language plpgsql as
$$
begin
if NEW.pid is null then
NEW.pid := NEW.id;
end if;
return NEW;
end;
$$;
create trigger pid_bi_t
before insert on teacher
for each row
execute procedure pid_bi_tf();
我不明白你为什么需要这个,但可能你有充分的理由。您可以考虑此选项:除非字段pid
有明确的值,否则在其中保留一个null
值。查询时使用以下表达式:coalesce(pid, id)
。