我有一个使用自增整数作为主键的PostgreSQL 9数据库。 我想复制表中符合某些筛选条件的某些行,并更改一个或两个值,即复制所有列的值,但不包括ID(这是自动生成的),可能还有另一列。
但是,我还想获得旧ID到新ID的映射。 除了先查询要复制的行,然后逐个插入新行外,是否有更好的方法?
基本上我想做的事情类似于:
但是,我还想获得旧ID到新ID的映射。 除了先查询要复制的行,然后逐个插入新行外,是否有更好的方法?
基本上我想做的事情类似于:
INSERT INTO my_table (col1, col2, col3)
SELECT col1, 'new col2 value', col3
FROM my_table old
WHERE old.some_criteria = 'something'
RETURNING old.id, id;
不过,这会出现错误:ERROR: missing FROM-clause entry for table "old"
。我知道出错的原因是:Postgres 必须先执行 SELECT 然后再插入数据,而 RETURNING
子句只有对新插入的行有访问权限。