Saya punya pertanyaan tentang ALTER TABLE
perintah di atas meja yang sangat besar (hampir 30 juta baris). Salah satu kolomnya adalah a varchar(255)
dan saya ingin mengubah ukurannya menjadi a varchar(40)
. Pada dasarnya, saya ingin mengubah kolom saya dengan menjalankan perintah berikut:
ALTER TABLE mytable ALTER COLUMN mycolumn TYPE varchar(40);
Saya tidak punya masalah jika prosesnya sangat lama tetapi sepertinya meja saya tidak lagi dapat dibaca selama perintah ALTER TABLE. Apakah ada cara yang lebih pintar? Mungkin menambahkan kolom baru, menyalin nilai dari kolom lama, menjatuhkan kolom lama dan akhirnya mengganti nama yang baru?
Petunjuk apa pun akan sangat dihargai! Terima kasih sebelumnya,
Catatan: Saya menggunakan PostgreSQL 9.0.
varchar(255)
kepada PostgreSQL maka itu tidak akan mengalokasikan 255 byte untuk nilai yang panjang sebenarnya adalah 40 byte. Ini akan mengalokasikan 40 byte (ditambah beberapa overhead internal). Satu-satunya hal yang akan be changed by the
ALTER TABLE` adalah jumlah byte maksimum yang dapat Anda simpan di kolom itu tanpa mendapatkan kesalahan dari PG.
resizing
tidak akan membuat meja menempati ruang lebih sedikit?