既存の値を新しい値に変換するように Postgres に指示するにはどうすればよいですか?

既存の値を新しい値に変換するように Postgres に指示するにはどうすればよいですか?

問題

parent_idとを含むテーブルがありchild_id、これらは相互に排他的であるため、当然 2 つの値ではなく 1 つの値である必要があります。これらを に置き換える必要がありますexternal_id

したがって、すべての子 ID は外部 ID になり、すべての親 ID も外部 ID になります。

postgres で ID を新しい列に変換するにはどうすればよいでしょうか?

厄介な、潜在的な解決策

頭に浮かぶのは、これをいくつかの非常に面倒な手順で実行することだけですが、もっと良い方法があることを願っています。

  1. 新しい列を作成しますexternal_ids

  2. すべての子IDと親IDを、たとえnullであっても、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);

関連情報