Ställ in standardvärdet när du lägger till den nya kolumnen:
create sequence rid_seq;
alter table test add column rid integer default nextval('rid_seq');
Att ändra standardvärdet för befintliga kolumner ändrar inte befintliga data eftersom databasen inte har något sätt att veta vilka värden som ska ändras; det finns ingen "den här kolumnen har standardvärdet"-flagga på kolumnvärden, det finns bara standardvärdet (ursprungligen NULL eftersom du inte angav något annat) och det aktuella värdet (även NULL) men ett sätt att se skillnaden mellan "NULL eftersom det är standard" och "NULL eftersom det uttryckligen var inställt på NULL". Så när du gör det i två steg:
- Lägg till kolumn.
- Ändra standardvärde.
PostgreSQL kommer inte att tillämpa standardvärdet på kolumnen du just lade till. Men om du lägger till kolumnen och anger standardvärdet samtidigt vet PostgreSQL vilka rader som har standardvärdet (alla) så att den kan ange värden när kolumnen läggs till.
Förresten, du vill förmodligen ha en NOT NULL på den kolumnen också:
create sequence rid_seq;
alter table test add column rid integer not null default nextval('rid_seq');
Och som a_horse_with_no_name
noteringar, om du bara tänker använda rid_seq
för din test.rid
kolumn då kanske du vill ställa in dess ägarkolumn
till test.rid
så att sekvensen tas bort om kolumnen tas bort:
alter sequence rid_seq owned by test.rid;