Как мне указать Postgres преобразовать существующие значения в новые?

Как мне указать Postgres преобразовать существующие значения в новые?

Проблема

У меня есть таблица, в которой есть parent_idи child_id, и они являются взаимоисключающими, поэтому, естественно, они должны быть только одним значением, а не двумя. Мне нужно заменить их на external_id.

Таким образом, все дочерние идентификаторы теперь станут внешними идентификаторами, и все родительские идентификаторы также станут внешними идентификаторами.

Как заставить postgres преобразовать идентификаторы в новый столбец?

Грязное, потенциальное решение

Единственное, что приходит на ум, — это сделать это в несколько очень сложных шагов, но я надеюсь, что есть способ получше:

  1. СОЗДАТЬ новый столбец, external_ids.

  2. Вывести все дочерние и родительские идентификаторы, даже если они равны нулю, в ряд строк 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);

Связанный контент