PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie füge ich mit Postgres eine neue Spalte in einer Tabelle nach der 2. oder 3. Spalte in der Tabelle hinzu?

Nein, es gibt keinen direkten Weg, das zu tun. Und dafür gibt es einen Grund - jede Abfrage sollte alle Felder auflisten, die sie benötigt, in welcher Reihenfolge (und Format usw.) sie benötigt wird, wodurch die Reihenfolge der Spalten in einer Tabelle unbedeutend wird.

Wenn Sie das wirklich tun müssen, fällt mir ein Workaround ein:

  • Dump und speichere die Beschreibung der betreffenden Tabelle (mithilfe von pg_dump --schema-only --table=<schema.table> ... )
  • fügen Sie die gewünschte Spalte an der gewünschten Stelle in der gespeicherten Definition hinzu
  • Benennen Sie die Tabelle in der gespeicherten Definition um, damit sie nicht mit dem Namen der alten Tabelle kollidiert, wenn Sie versuchen, sie zu erstellen
  • erstellen Sie die neue Tabelle mit dieser Definition
  • füllen Sie die neue Tabelle mit den Daten aus der alten Tabelle mit 'INSERT INTO <new_table> SELECT field1, field2, <default_for_new_field> , field3,... FROM <old_table> ';
  • die alte Tabelle umbenennen
  • benenne die neue Tabelle in den ursprünglichen Namen um
  • löschen Sie schließlich die alte, umbenannte Tabelle, nachdem Sie sich vergewissert haben, dass alles in Ordnung ist