我如何告诉 Postgres 将现有值转换为新值?

我如何告诉 Postgres 将现有值转换为新值?

问题

我有一张包含parent_id和 的表child_id,它们互斥,因此自然它们应该只是一个值,而不是两个。我需要将它们替换为external_id

因此,任何子 ID 现在都将成为外部 ID,并且任何父 ID 也将成为外部 ID。

我怎样才能让 postgres 将 id 转换为新列?

混乱的潜在解决方案

我唯一想到的就是通过几个非常混乱的步骤来完成这一任务,但我希望有更好的方法:

  1. 创建新列,external_ids

  2. 将所有子代和父代 ID(即使它们为空)打印到一系列 UPDATE 字符串中,例如

    UPDATE table SET external_id = "<parent or child id>" WHERE row_id = <row_id>
    
  3. 单独运行每个更新字符串,这似乎可能需要很长时间,所以这就是为什么我认为必须有更好的方法。

答案1

检查合并功能。

 UPDATE table SET external_id = coalesce( parent_id, child_id);

相关内容