Ich habe Folgendes versucht, war aber erfolglos:
ALTER TABLE person ALTER COLUMN dob POSITION 37;
sql
database
postgresql
alter-table
Huuuze
quelle
quelle
Antworten:
" Spaltenposition ändern " im PostgreSQL-Wiki sagt:
Das ist ziemlich schwach, aber zu ihrer Verteidigung gibt es in Standard-SQL auch keine Lösung für die Neupositionierung einer Spalte. Datenbankmarken, die das Ändern der Ordnungsposition einer Spalte unterstützen, definieren eine Erweiterung der SQL-Syntax.
Eine andere Idee fällt mir ein: Sie können eine definieren
VIEW
, die die Reihenfolge der Spalten nach Ihren Wünschen angibt, ohne die physische Position der Spalte in der Basistabelle zu ändern.quelle
Wenn Sie in PostgreSQL ein Feld hinzufügen, wird es am Ende der Tabelle hinzugefügt. Wenn wir dann in eine bestimmte Position einfügen müssen
quelle
Dieser Beitrag ist alt und wahrscheinlich gelöst, aber ich hatte das gleiche Problem. Ich habe es behoben, indem ich eine Ansicht der ursprünglichen Tabelle erstellt habe, in der die neue Spaltenreihenfolge angegeben ist.
Von hier aus könnte ich entweder die Ansicht verwenden oder eine neue Tabelle aus der Ansicht erstellen.
Benennen Sie die ursprüngliche Tabelle um oder löschen Sie sie und setzen Sie den Namen der neuen Tabelle auf die alte Tabelle.
quelle
Eine, wenn auch umständliche Option, die Spalten neu anzuordnen, wenn die Spaltenreihenfolge unbedingt geändert werden muss und Fremdschlüssel verwendet werden, besteht darin, zuerst die gesamte Datenbank mit Daten zu sichern und dann nur das Schema (
pg_dump -s databasename > databasename_schema.sql
) zu sichern . Bearbeiten Sie anschließend die Schemadatei, um die Spalten nach Ihren Wünschen neu anzuordnen. Erstellen Sie dann die Datenbank aus dem Schema neu und stellen Sie die Daten schließlich in der neu erstellten Datenbank wieder her.quelle
Ich glaube nicht, dass Sie das derzeit können: siehe diesen Artikel im Postgresql-Wiki .
Die drei Problemumgehungen in diesem Artikel sind:
quelle
Öffnen Sie die Tabelle in PGAdmin und kopieren Sie im SQL-Bereich unten die SQL Create Table-Anweisung. Öffnen Sie dann das Abfrage-Tool und fügen Sie es ein. Wenn die Tabelle Daten enthält, ändern Sie den Tabellennamen in 'neuer_name'. Wenn nicht, löschen Sie den Kommentar "-" in der Zeile "Tabelle löschen". Bearbeiten Sie die Spaltenfolge nach Bedarf. Beachten Sie das fehlende / überflüssige Komma in der letzten Spalte, falls Sie es verschoben haben. Führen Sie den neuen SQL-Befehl Tabelle erstellen aus. Aktualisieren und ... voilà.
Für leere Tabellen in der Entwurfsphase ist diese Methode sehr praktisch.
Wenn die Tabelle Daten enthält, müssen wir auch die Spaltenfolge der Daten neu anordnen. Dies ist einfach: Verwenden Sie
INSERT
diese Option, um die alte Tabelle in die neue Version zu importieren.... wo
c2
,c3
,c1
sind die Säulenc1
,c2
,c3
der alten Tabelle in ihren neuen Positionen. Bitte beachten Sie, dass Sie in diesem Fall einen 'neuen' Namen für die bearbeitete 'alte' Tabelle verwenden müssen, da Sie sonst Ihre Daten verlieren . Wenn die Spaltennamen zahlreich, lang und / oder komplex sind, verwenden Sie dieselbe Methode wie oben, um die neue Tabellenstruktur in einen Texteditor zu kopieren und dort die neue Spaltenliste zu erstellen, bevor Sie sie in dieINSERT
Anweisung kopieren .Nachdem Sie überprüft haben, ob alles in Ordnung ist,
DROP
die alte Tabelle und ändern Sie den 'neuen' Namen in 'alt' mitALTER TABLE new RENAME TO old;
und Sie sind fertig.quelle
Ich habe daran gearbeitet, viele Tabellen neu zu bestellen, und wollte nicht immer wieder dieselben Abfragen schreiben müssen, also habe ich ein Skript erstellt, um alles für mich zu erledigen. Im Wesentlichen ist es:
pg_dump
pg_dump
Abfrage, um eine neu geordnete Tabelle mit Daten zu erstellenEs kann verwendet werden, indem der folgende einfache Befehl ausgeführt wird:
Es druckt die SQL aus, damit Sie sie überprüfen und testen können. Das war ein wichtiger Grund, warum ich sie verwendet habe
pg_dump
. Das Github Repo finden Sie hier .quelle
Ich benutze Django und es erfordert eine ID-Spalte in jeder Tabelle, wenn Sie keine Kopfschmerzen haben möchten. Leider war ich nachlässig und meine Tabelle bp.geo_location_vague enthielt dieses Feld nicht. Ich habe einen kleinen Trick paraphiert. Schritt 1:
Schritt 2: (ohne Tabelle erstellen - Tabelle wird automatisch erstellt!)
Schritt 3:
Weil ich einen großen Pseudotyp in der Tabelle haben muss. Nach SELECT * in pg wird ein Bigint-Typ-Insetad-Bigserial erstellt.
Schritt 4: Jetzt können wir die Ansicht löschen, die Quelltabelle löschen und die neue Tabelle im alten Namen umbenennen. Der Trick wurde erfolgreich beendet.
quelle
Es gibt einige Problemumgehungen, die dies ermöglichen:
Den gesamten Tisch neu erstellen
Erstellen Sie neue Spalten in der aktuellen Tabelle
Erstellen Sie eine Ansicht
https://tableplus.com/blog/2018/09/postgresql-is-it-possible-to-alter-column-order-position-in-a-table.html
quelle