如何插入一条记录并把return的主键更新到另一个table的外键?

How to insert a record and return the primary key to update the foreign key in another table?

我需要向 table (table1) 中的外键列添加值。为此,我必须在另一个 table (table2) 和 return 句柄中创建一个新记录,以在第一个 table (table1).

此外,当我在 table2 中插入新记录时,我需要 table1 中包含的值作为 table2 中的一列。

UPDATE table1 
SET table2_id = (INSERT INTO table2 (id, anumber, atimestamp, atext) 
                VALUES (nextval('seqtable2'), 0, NOW()::TIMESTAMP, table1.anumber::TEXT) 
                RETURNING id );

我相信通过上面的脚本(即使不工作)也可以理解问题所在。我用最简单最概括的方式写的。

我正在寻找 PostgreSQL 9.4 的解决方案,但如果有更高版本的替代方案,我也想知道。

非常感谢您。

您可以按如下方式使用pg/psql:

DO
$updatecode$
DECLARE
  i int;
BEGIN

  INSERT INTO table2 (id, anumber, atimestamp, atext) 
  VALUES (nextval('seqtable2'), 0, NOW()::TIMESTAMP, 2::TEXT) 
  RETURNING id into i;

  UPDATE table1 SET table2_id = i WHERE ...

END;
$updatecode$
LANGUAGE plpgsql;

编辑:

我不得不添加一个循环,因为我需要更改多条记录。另一个更改是在将记录插入 table2.

时能够在 atext 列中使用值 table1
DO 
$insertforupdate$
DECLARE 
    tbl1 table1%ROWTYPE;
    tbl2_id INTEGER;
BEGIN 

    FOR tbl1 IN SELECT * FROM table1 
    LOOP 

        INSERT INTO table2 (id, anumber, atimestamp, atext) 
        VALUES (nextval('seqtable2'), 0, NOW()::TIMESTAMP, tbl1.anumber::TEXT) 
        RETURNING id INTO tbl2_id;

        UPDATE table1 SET table2_id = tbl2_id WHERE id = tbl1.id;

    END LOOP;

END;
$insertforupdate$
LANGUAGE plpgsql;