sql >> Database teknologi >  >> RDS >> PostgreSQL

Oprettelse af en sekvens på en eksisterende tabel

Indstil standardværdien, når du tilføjer den nye kolonne:

create sequence rid_seq;
alter table test add column rid integer default nextval('rid_seq');

Ændring af standardværdien for eksisterende kolonner ændrer ikke eksisterende data, fordi databasen ikke har nogen mulighed for at vide, hvilke værdier der skal ændres; der er ikke noget "denne kolonne har standardværdien"-flag på kolonneværdier, der er kun standardværdien (oprindeligt NULL, da du ikke specificerede noget andet) og den aktuelle værdi (også NULL), men en måde at se forskel på mellem "NULL fordi det er standard" og "NULL fordi det eksplicit blev sat til NULL". Så når du gør det i to trin:

  1. Tilføj kolonne.
  2. Skift standardværdi.

PostgreSQL anvender ikke standardværdien på den kolonne, du lige har tilføjet. Men hvis du tilføjer kolonnen og angiver standardværdien på samme tid, ved PostgreSQL, hvilke rækker der har standardværdien (alle), så den kan levere værdier, efterhånden som kolonnen tilføjes.

Forresten vil du sikkert også have en NOT NULL i den kolonne:

create sequence rid_seq;
alter table test add column rid integer not null default nextval('rid_seq');

Og som a_horse_with_no_name noter, hvis du kun har til hensigt at bruge rid_seq til din test.rid kolonne, så vil du måske indstille dens ejerkolonne til test.rid så sekvensen slettes, hvis kolonnen fjernes:

alter sequence rid_seq owned by test.rid;


  1. Indsættelse i en mysql-tabel og overskrivning af aktuelle data

  2. jquery php indsæt data i mysql uden at opdatere siden

  3. Seneste PostgreSQL-tendenser:Mest tidskrævende opgaver og vigtige målinger at spore

  4. Spring Boot - Genopret forbindelse til en database efter genstart