获取插入的值以更新for循环中另一个表的列

本文关键字:另一个 循环 更新 插入 获取 for | 更新日期: 2023-09-27 18:24:01

我基本上是想在postgres中实现与这个c#等效的东西,假装表是一些列表

List<Comment> comments;
List<Post> posts;
//SELECT
foreach (var comment in comments.OrderBy(c => c.id))
{
    //INSERT
    var post = new Post(title: comment.title);
    posts.Add(post);
    //UPDATE
    comment.postId = post.id;
}

基本上,我添加了一个新的"父"表,并且我需要在迁移中运行一些代码,这样每个现有的"子"都有一个父表。我的后期技能有限,所以我不知道从哪里开始。

这是我迄今为止拥有的

DO
$do$
BEGIN 
FOR comment IN 
    SELECT * FROM comments ORDER BY id
LOOP
   INSERT INTO posts (title)
   VALUES (comment.title);
   -- how do I update???
END LOOP;
END
$do$;

获取插入的值以更新for循环中另一个表的列

除非我错过了船,否则我想这就是你想要的:

DO
$$
DECLARE
  komment comments;
  pid bigint;
BEGIN 
  FOR komment IN 
      SELECT * FROM comments ORDER BY id
  LOOP
     INSERT INTO posts (title)
     VALUES (komment.title)
     returning id into pid;
     update comments
     set post_id = pid
     where id = komment.id;
  END LOOP;
END
$$;

这假设posts.id是一个序列,默认为一个序列或具有其他自动填充机制,我认为这就是您想要的。