将插入的id插入到另一个表中

Rim*_*ius 2 sql postgresql triggers entity-relationship primary-key

这是场景:

create table a (
 id serial primary key,
 val text
);

create table b (
 id serial primary key,
 a_id integer references a(id)
);

create rule a_inserted as on insert to a do also insert into b (a_id) values (new.id);
Run Code Online (Sandbox Code Playgroud)

b我正在尝试创建一条引用a插入表时的记录a。但我得到的是new.idnull,因为它是从序列自动生成的。我也尝试了触发器AFTER插入FOR EACH ROW,但结果是相同的。有办法解决这个问题吗?

Erw*_*ter 7

为了简单起见,您还可以只使用数据修改 CTE(并且没有触发器或规则):

WITH ins_a AS (
   INSERT INTO a(val)
   VALUES ('foo')
   RETURNING a_id
   )
INSERT INTO b(a_id)
SELECT a_id
FROM   ins_a
RETURNING b.*;  -- last line optional if you need the values in return
Run Code Online (Sandbox Code Playgroud)

具有更多详细信息的相关答案:

或者您可以使用currval()andlastval()