Brug CREATE SEQUENCE
:
CREATE SEQUENCE scores_job_id_seq; -- = default name for plain a serial
Tilføj derefter en kolonnestandard til scores.job_id
:
ALTER TABLE scores ALTER COLUMN job_id SET DEFAULT nextval('scores_job_id_seq');
Hvis du vil binde sekvensen til kolonnen (så den slettes, når kolonnen slettes), kør også:
ALTER SEQUENCE scores_job_id_seq OWNED BY scores.job_id;
Alt dette kan erstattes med at bruge pseudodatatypen serial
for kolonnen job_id
til at begynde med:
- Sikkert og rent omdøb tabeller, der bruger serielle primærnøglekolonner i Postgres?
Hvis din tabel allerede har rækker, kan du indstille SEQUENCE
til den næsthøjeste værdi og udfyld manglende serieværdier i tabellen:
SELECT setval('scores_job_id_seq', COALESCE(max(job_id), 1)) FROM scores;
Valgfrit:
UPDATE scores
SET job_id = nextval('scores_job_id_seq')
WHERE job_id IS NULL;
- Sådan kontrolleres en sekvens effektivt for brugte og ubrugte værdier i PostgreSQL
- Postgres ændrer rækkefølgen manuelt
- Hvordan nulstiller man postgres' primære nøglesekvens, når den falder ud af synkronisering?
Den eneste resterende forskel er en serial
kolonne er også sat til NOT NULL
. Det kan du måske også ønske dig:
ALTER TABLE scores ALTER COLUMN job_id SET NOT NULL;
Men du kan ikke bare ændre typen af et eksisterende integer
:
ALTER TABLE scores ALTER job_id TYPE serial;
serial
er ikke en egentlig datatype. Det er kun en notationsbekvemmelighedsfunktion til CREATE TABLE
.
I Postgres 10 eller senere overvej en IDENTITY
kolonne:
- Automatisk stigning i tabelkolonnen