首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入..。从选择..。返回id映射

插入..。从选择..。返回id映射
EN

Stack Overflow用户
提问于 2015-03-25 13:21:42
回答 2查看 9.9K关注 0票数 14

我使用的是PostgreSQL 9.3。

我想复制一些数据库记录。由于我对表使用的是一个自动增量pk id,所以我希望从生成的复制记录id返回到原始记录的id映射。例如,假设我有一个表posts,其中包含两个记录:

代码语言:javascript
复制
 [{'id': 1, 'title': 'first'}
, {'id': 2. 'title': 'second'}]

使用SQL:

代码语言:javascript
复制
INSERT INTO posts (title) SELECT title FROM posts RETURNING id, ??

我希望看到这样的映射:

代码语言:javascript
复制
 [{'id': 3, 'from_id': 1}
, {'id': 4, 'from_id': 2}]

对如何填写上面的问号以使其有效,有什么想法吗?非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2017-11-08 13:35:04

如果id列的posts类型是serial类型,那么它就像nextval('posts_id_seq'::regclass)一样生成,您可以手动调用每个新行的函数

代码语言:javascript
复制
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

票数 6
EN

Stack Overflow用户

发布于 2015-03-25 19:39:27

IMHO最简单的解决方案是简单地向表中添加一个列,您可以在其中放置被克隆的行的id。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29256888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档