Tidak ada mekanisme seperti itu di PostgreSQL.
Namun, Anda masih bisa menghindari efek berlebihan dari perubahan tabel seperti itu.
Pernyataan berikut memperoleh kunci akses eksklusif di atas meja selama durasi pernyataan / transaksi:
ALTER TABLE your_table
ADD COLUMN new_column integer NOT NULL DEFAULT 0;
Pernyataan ini mengubah katalog, lalu menulis ulang seluruh tabel sehingga kolom baru berisi nilai default di semua baris. Jika tabel memiliki banyak baris dan cukup sering diakses, ini akan menyebabkan beberapa masalah sementara.
Untuk menghindarinya, cobalah untuk memegang kunci eksklusif sesingkat mungkin:
ALTER TABLE your_table
ADD COLUMN new_column integer;
ALTER TABLE your_table
ALTER COLUMN new_column SET DEFAULT 0;
Karena ini pada dasarnya hanya perubahan (sebenarnya dua) ke katalog (tidak ada perubahan data terjadi), itu akan selesai dengan cepat. Kemudian tergantung pada kebutuhan dan penggunaan tabel Anda, Anda dapat memperbarui kolom baru ke default dalam satu langkah atau dalam batch, dan ketika selesai, atur kolom ke NOT NULL
.
Perbarui tentang keinginan yang menjadi kenyataan: PostgreSQL 11 akan memiliki fitur ini. Lihat https://www.depesz.com/2018/04/04/ menunggu- untuk- postgresql -11- fast - alter - table - add - column - with -a- non - null - default/ untuk informasi lebih lanjut.