Tetapkan nilai default saat Anda menambahkan kolom baru:
create sequence rid_seq;
alter table test add column rid integer default nextval('rid_seq');
Mengubah nilai default untuk kolom yang ada tidak mengubah data yang ada karena database tidak memiliki cara untuk mengetahui nilai mana yang harus diubah; tidak ada bendera "kolom ini memiliki nilai default" pada nilai kolom, hanya ada nilai default (awalnya NULL karena Anda tidak menentukan apa pun) dan nilai saat ini (juga NULL) tetapi cara untuk membedakan antara "NULL karena ini adalah default" dan "NULL karena secara eksplisit disetel ke NULL". Jadi, ketika Anda melakukannya dalam dua langkah:
- Tambahkan kolom.
- Ubah nilai default.
PostgreSQL tidak akan menerapkan nilai default ke kolom yang baru saja Anda tambahkan. Namun, jika Anda menambahkan kolom dan memberikan nilai default pada saat yang sama, maka PostgreSQL mengetahui baris mana yang memiliki nilai default (semuanya) sehingga dapat memberikan nilai saat kolom ditambahkan.
Omong-omong, Anda mungkin menginginkan NOT NULL di kolom itu juga:
create sequence rid_seq;
alter table test add column rid integer not null default nextval('rid_seq');
Dan, sebagai a_horse_with_no_name
catatan, jika Anda hanya ingin menggunakan rid_seq
untuk test.rid
. Anda kolom maka Anda mungkin ingin menyetel kolom pemiliknya
ke test.rid
sehingga urutannya akan hilang jika kolom dihilangkan:
alter sequence rid_seq owned by test.rid;