Wie weise ich Postgres an, vorhandene Werte in neue Werte zu konvertieren?

Wie weise ich Postgres an, vorhandene Werte in neue Werte zu konvertieren?

Problem

Ich habe eine Tabelle mit parent_idund child_id. Diese schließen sich gegenseitig aus, daher sollte es sich natürlich nur um einen Wert handeln und nicht um zwei. Ich muss sie durch ersetzen external_id.

Daher werden alle untergeordneten IDs jetzt zu externen IDs und alle übergeordneten IDs werden ebenfalls zu externen IDs.

Wie kann ich Postgres dazu bringen, die IDs in die neue Spalte zu konvertieren?

Chaotisch, mögliche Lösung

Das Einzige, was mir einfällt, ist, dies in wenigen, sehr chaotischen Schritten durchzuführen, aber ich hoffe, dass es einen besseren Weg gibt:

  1. ERSTELLEN Sie eine neue Spalte, external_ids.

  2. Drucken Sie alle Kind- und Eltern-IDs, auch wenn sie null sind, in eine Reihe von UPDATE-Strings, wie zum Beispiel

    UPDATE table SET external_id = "<parent or child id>" WHERE row_id = <row_id>
    
  3. Führen Sie jede Update-Zeichenfolge einzeln aus. Das kann ziemlich lange dauern. Deshalb denke ich, dass es einen besseren Weg geben muss.

Antwort1

Überprüfen Sie die Koaleszenzfunktion.

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

verwandte Informationen