Gebruik CREATE SEQUENCE
:
CREATE SEQUENCE scores_job_id_seq; -- = default name for plain a serial
Voeg vervolgens een kolomstandaard toe aan scores.job_id
:
ALTER TABLE scores ALTER COLUMN job_id SET DEFAULT nextval('scores_job_id_seq');
Als u wilt binden de volgorde naar de kolom (zodat deze wordt verwijderd wanneer de kolom wordt verwijderd), voer ook uit:
ALTER SEQUENCE scores_job_id_seq OWNED BY scores.job_id;
Dit alles kan worden vervangen door het pseudo-gegevenstype serial
. te gebruiken voor de kolom job_id
om te beginnen:
- Tabellen veilig en netjes hernoemen die kolommen met seriële primaire sleutels gebruiken in Postgres?
Als uw tabel al rijen heeft, wilt u misschien de SEQUENCE
. instellen naar de volgende hoogste waarde en vul ontbrekende seriële waarden in de tabel in:
SELECT setval('scores_job_id_seq', COALESCE(max(job_id), 1)) FROM scores;
Optioneel:
UPDATE scores
SET job_id = nextval('scores_job_id_seq')
WHERE job_id IS NULL;
- Hoe een reeks efficiënt te controleren op gebruikte en ongebruikte waarden in PostgreSQL
- Postgres wijzigt handmatig de volgorde
- Hoe de primaire sleutelreeks van postgres resetten wanneer deze niet meer synchroon loopt?
Het enige overgebleven verschil, een serial
kolom is ook ingesteld op NOT NULL
. Misschien wil je dat ook niet:
ALTER TABLE scores ALTER COLUMN job_id SET NOT NULL;
Maar jij kan niet verander gewoon het type van een bestaand integer
:
ALTER TABLE scores ALTER job_id TYPE serial;
serial
is geen echt gegevenstype. Het is gewoon een handige notatiefunctie voor CREATE TABLE
.
Overweeg in Postgres 10 of later een IDENTITY
kolom:
- Tabelkolom automatisch verhogen