我有使用自动递增整数作为主键的 PostgreSQL 9 数据库。我想复制表中的一些行(基于一些过滤条件),同时更改一个或两个值,即复制所有列值,除了 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
子句只能访问新插入的行。