![](/img/trans.png)
[英]How to run multiple insert statements in a transaction in postgresql?
[英]How to run dependant query in PostgreSQL transaction
我是一个 postgres 事务,我想向两个表中的每一个插入 1 条记录,比如说 A 和 B,B 有一个外键指向在同一事务中插入到 A 的记录。
我如何在这里引用插入的记录,以便我可以在表 B 上插入
你没有指定实际的表结构,所以我必须编造,但是可以在一个语句中使用修改 CTE的数据来做到这一点
with new_a_row as (
insert into a (col1, col2, col3)
values ('one', 'two', 42)
returning id --<<< this is the generated primary key of the table A
)
insert into b (b_col_one, b_col_two, fk_col_to_a)
select 100, 'something', id
from new_a_row;
或者使用lastval()
并在两个语句中执行此操作
begin;
insert into a (col1, col2, col3)
values ('one', 'two', 42);
insert into b (b_col_one, b_col_two, fk_col_to_a)
values (100, 'something', lastval());
commit;
第一个解决方案将适用于任何“生成策略”,不仅是identity
或serial
列,而且如果您使用gen_random_uuuid()
作为默认值,也适用。
第二种解决方案需要identity
或旧的serial
类型列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.