Ho una domanda sul ALTER TABLE
comando su una tabella molto grande (quasi 30 milioni di righe). Una delle sue colonne è a varchar(255)
e vorrei ridimensionarla a varchar(40)
. Fondamentalmente, vorrei cambiare la mia colonna eseguendo il seguente comando:
ALTER TABLE mytable ALTER COLUMN mycolumn TYPE varchar(40);
Non ho alcun problema se il processo è molto lungo ma sembra che la mia tabella non sia più leggibile durante il comando ALTER TABLE. C'è un modo più intelligente? Forse aggiungi una nuova colonna, copia i valori dalla vecchia colonna, elimina la vecchia colonna e infine rinomina quella nuova?
Qualsiasi indizio sarà molto apprezzato! Grazie in anticipo,
Nota: utilizzo PostgreSQL 9.0.
varchar(255)
a PostgreSQL, non assegnerà 255 byte per un valore la cui lunghezza reale è 40 byte. Assegnerà 40 byte (più un sovraccarico interno). L'unica cosa che be changed by the
ALTER TABLE` è il numero massimo di byte che è possibile memorizzare in quella colonna senza ricevere un errore da PG.
resizing
non farà occupare meno spazio al tavolo?