sql >> Databasteknik >  >> RDS >> PostgreSQL

Skapa en sekvens på en befintlig tabell

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:

  1. Lägg till kolumn.
  2. Ä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;


  1. MySql prepare-sats - är det möjligt att parametrisera kolumnnamn eller funktionsnamn?

  2. Hur man ökar en räknare och returnerar värdet i MySQL

  3. Använd binär COPY-tabell FROM med psycopg2

  4. ORA-00979:inte ett GROUP BY-uttryck när jag kör min sql