Ich habe eine Frage zum ALTER TABLE
Befehl in einer wirklich großen Tabelle (fast 30 Millionen Zeilen). Eine seiner Spalten ist a varchar(255)
und ich möchte die Größe auf a ändern varchar(40)
. Grundsätzlich möchte ich meine Spalte ändern, indem ich den folgenden Befehl ausführe:
ALTER TABLE mytable ALTER COLUMN mycolumn TYPE varchar(40);
Ich habe kein Problem, wenn der Prozess sehr lang ist, aber es scheint, dass meine Tabelle während des Befehls ALTER TABLE nicht mehr lesbar ist. Gibt es einen klügeren Weg? Vielleicht eine neue Spalte hinzufügen, Werte aus der alten Spalte kopieren, die alte Spalte löschen und schließlich die neue umbenennen?
Jeder Hinweis wird sehr geschätzt! Danke im Voraus,
Hinweis: Ich verwende PostgreSQL 9.0.
varchar(255)
zu PostgreSQL sagen , werden 255 Bytes für einen Wert mit einer tatsächlichen Länge von 40 Bytes nicht zugewiesen. Es werden 40 Bytes (plus interner Overhead) zugewiesen. Das einzige, was be changed by the
ALTER TABLE` ist, ist die maximale Anzahl von Bytes, die Sie in dieser Spalte speichern können, ohne einen Fehler von PG zu erhalten.
resizing
Um ganz klar zu sein: Wissen Sie, dass der Tisch dadurch nicht weniger Platz einnimmt?