postgresql - 如何在插入新行后立即将自动生成的主键值保存到第二列
问题描述
在表中插入新行时,我想在插入新行后立即将自动生成的主键值保存到同一行的第二列中。
比方说:
我有一个teacher
包含三列的表名id, pid, name
。
id
是主键,pid
可以重复。
现在每当我插入新行时,id
都会自动递增。
我想使用 postgresql 查询将该列的自动递增值复制id
到同一行的列中。pid
你能指导我如何使用 postgresql 查询来实现这一点吗?
解决方案
我认为您需要在 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)
.
推荐阅读
- java - Lombok - 在同一类中休眠@OneToOne - StackOverFlowError
- c# - 有一个用于下载 Excel 的网址。当我将该网址粘贴到浏览器中时,它会下载。但在 C# 中它不起作用
- regex - 获取postgresql中重复星号之间的数据
- nginx - NGINX Rewrite 将查询字符串编码为路径
- javascript - 样板/模板一直显示 App.Js 页面的相同内容
- arrays - 如何将 8 位无符号整数数组打包成 11 位无符号整数数组
- python - Python - 为与多处理一起运行的函数创建一个简单的 killswitch
- r - 如何在同一个工作区中显示这 5 个条形图?
- node.js - (节点:15867)警告:在循环依赖中访问模块导出的不存在属性“cat”
- python - 如何断言后跟 sys.exit() 的日志记录错误