我需要在表(table1
)的外键列中添加值。为此,我必须在另一个表(table2
)中创建一条新记录,并返回句柄以使用第一个表(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的解决方案,但是如果有更高版本的替代方案,我也想知道。
非常感谢您。
答案 0 :(得分:1)
您可以按以下方式使用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;
编辑:
我必须添加一个循环,因为我需要更改多个记录。另一个更改是在将记录插入table1
时,能够使用atext
列中的table2
值。
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;