如何在插入新行后立即将自动生成的主键值保存到第二列中



在表中插入新行时,我想在插入新行后立即将自动生成的主键值保存到同一行的第二列中。

比方说:

我有一个表名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)

最新更新