【问题标题】:How to save auto-generated primary key value into second column right after inserting new row如何在插入新行后立即将自动生成的主键值保存到第二列
【发布时间】:2020-12-01 14:50:37
【问题描述】:

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

假设:

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

id 是主键,pid 可以重复。

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

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

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

【问题讨论】:

  • 你为什么要这么做?

标签: postgresql express


【解决方案1】:

我认为你需要一个before insert trigger 在桌子上teacher。为了实现它,您需要一个trigger function

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 2019-07-23
    相关资源
    最近更新 更多