Stel de standaardwaarde in wanneer u de nieuwe kolom toevoegt:
create sequence rid_seq;
alter table test add column rid integer default nextval('rid_seq');
Als u de standaardwaarde voor bestaande kolommen wijzigt, worden bestaande gegevens niet gewijzigd omdat de database niet weet welke waarden moeten worden gewijzigd; er is geen vlag "deze kolom heeft de standaardwaarde" op kolomwaarden, er is alleen de standaardwaarde (oorspronkelijk NULL omdat je niets anders hebt opgegeven) en de huidige waarde (ook NULL), maar een manier om het verschil te zien tussen "NULL omdat het de standaard is" en "NULL omdat het expliciet is ingesteld op NULL". Dus als je het in twee stappen doet:
- Kolom toevoegen.
- Standaardwaarde wijzigen.
PostgreSQL past de standaardwaarde niet toe op de kolom die u zojuist hebt toegevoegd. Als u echter de kolom toevoegt en tegelijkertijd de standaardwaarde opgeeft, weet PostgreSQL wel welke rijen de standaardwaarde hebben (allemaal), zodat het waarden kan leveren wanneer de kolom wordt toegevoegd.
Trouwens, je wilt waarschijnlijk ook een NOT NULL op die kolom:
create sequence rid_seq;
alter table test add column rid integer not null default nextval('rid_seq');
En, als a_horse_with_no_name
opmerkingen, als u alleen van plan bent om rid_seq
. te gebruiken voor uw test.rid
kolom dan wil je misschien de kolom eigenaar instellen
naar test.rid
zodat de reeks wordt verwijderd als de kolom wordt verwijderd:
alter sequence rid_seq owned by test.rid;