我使用的是PostgreSQL 9.3。
我想复制一些数据库记录。由于我对表使用的是一个自动增量pk id,所以我希望从生成的复制记录id返回到原始记录的id映射。例如,假设我有一个表posts,其中包含两个记录:
[{'id': 1, 'title': 'first'}
, {'id': 2. 'title': 'second'}]使用SQL:
INSERT INTO posts (title) SELECT title FROM posts RETURNING id, ??我希望看到这样的映射:
[{'id': 3, 'from_id': 1}
, {'id': 4, 'from_id': 2}]对如何填写上面的问号以使其有效,有什么想法吗?非常感谢!
发布于 2017-11-08 13:35:04
如果id列的posts类型是serial类型,那么它就像nextval('posts_id_seq'::regclass)一样生成,您可以手动调用每个新行的函数
with
sel as (
SELECT id, title, nextval('posts_id_seq'::regclass) new_id
FROM posts
WHERE id IN (1,2)
),
ins as (
INSERT INTO posts (id, title)
SELECT new_id, title
FROM sel
)
SELECT id, new_id
FROM sel它可以处理任何数据,包括非唯一的title。
发布于 2015-03-25 19:39:27
IMHO最简单的解决方案是简单地向表中添加一个列,您可以在其中放置被克隆的行的id。
https://stackoverflow.com/questions/29256888
复制相似问题