首页 > 解决方案 > 如何在插入新行后立即将自动生成的主键值保存到第二列

问题描述

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

比方说:

我有一个teacher包含三列的表名id, pid, name

id是主键,pid可以重复。

现在每当我插入新行时,id都会自动递增。

我想使用 postgresql 查询将该列的自动递增值复制id到同一行的列中。pid

你能指导我如何使用 postgresql 查询来实现这一点吗?

标签: postgresqlexpress

解决方案


我认为您需要在 table 上before insert 触发teacher。为了实现它,您需要一个触发功能

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).


推荐阅读