
Проблема
У меня есть таблица, в которой есть parent_id
и child_id
, и они являются взаимоисключающими, поэтому, естественно, они должны быть только одним значением, а не двумя. Мне нужно заменить их на external_id
.
Таким образом, все дочерние идентификаторы теперь станут внешними идентификаторами, и все родительские идентификаторы также станут внешними идентификаторами.
Как заставить postgres преобразовать идентификаторы в новый столбец?
Грязное, потенциальное решение
Единственное, что приходит на ум, — это сделать это в несколько очень сложных шагов, но я надеюсь, что есть способ получше:
СОЗДАТЬ новый столбец,
external_ids
.Вывести все дочерние и родительские идентификаторы, даже если они равны нулю, в ряд строк UPDATE, например:
UPDATE table SET external_id = "<parent or child id>" WHERE row_id = <row_id>
Запускайте каждую строку обновления по отдельности, и это может занять очень много времени, поэтому я думаю, что должен быть способ получше.
решение1
проверьте функцию объединения.
UPDATE table SET external_id = coalesce( parent_id, child_id);