Ich habe eine ziemlich große Tabelle (rund 1 Milliarde Zeilen), und ich muss den ID-Typ von SERIAL
zu BIGSERIAL
zu aktualisieren; Rate mal, warum?:).postgreSQL gleichzeitig Spalte Typ von Int zu Bigint
Grundsätzlich könnte dies mit diesem Befehl:
execute "ALTER TABLE my_table ALTER COLUMN id SET DATA TYPE bigint"
meinen Tisch Trotzdem immer, dass sperren würde und über meinen Web-Service setzen.
Gibt es eine ziemlich einfache Möglichkeit, diese Operation gleichzeitig auszuführen (egal wie lange es dauert)?
Dank ist diese Lösung recht elegant. Es scheint mir, dass es immer noch ein Problem gibt. Wenn neue Zeilen in unsere Tabelle eingefügt werden, während wir die Spalten new_id füllen, wird der Wert new_id nicht festgelegt und die Erstellung des eindeutigen Index schlägt möglicherweise fehl. Können wir eine Trigger-Einstellung new_id bei der Einfügung hinzufügen, bis wir den nexval-Standardwert hinzufügen? –
Eindeutiger Index ignoriert "Null" -Werte, daher ist kein Trigger erforderlich. –
Was ist, wenn 'alter table my_table Spalte hinzufügen new_id bigint;' dauert lange (es dauert mehr als 1 Stunde und noch nicht fertig), und andere Leseoperationen blockieren? –