Voor een relationele database zoals PostgreSQL kan het algemeen als een zonde worden beschouwd onder ontwikkelaars niet om een primaire sleutel in elke tabel op te nemen. Het is daarom van cruciaal belang dat u uw uiterste best doet om die uiterst belangrijke primaire-sleutelkolom aan elke tabel toe te voegen, en gelukkig biedt Postgres twee methoden om deze taak te volbrengen.
Het seriële gegevenstype gebruiken
Veruit de eenvoudigste en meest gebruikelijke techniek voor het toevoegen van een primaire sleutel in Postgres is het gebruik van de SERIAL
of BIGSERIAL
gegevenstypen bij CREATING
een nieuwe tafel. Zoals aangegeven in de officiële documentatie, SERIAL
is geen echt gegevenstype, maar is gewoon een verkorte notatie die Postgres vertelt om een automatisch verhoogde, unieke identifier te maken voor de opgegeven kolom.
Hieronder maken we onze eenvoudige books
tabel met een geschikte SERIAL
gegevenstype voor de primaire sleutel.
CREATE TABLE books (
id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
primary_author VARCHAR(100) NULL
);
Door simpelweg onze id
. in te stellen kolom als SERIAL
met PRIMARY KEY
bijgevoegd, zal Postgres al het gecompliceerde werk achter de schermen afhandelen en automatisch onze id
verhogen kolom met een unieke, primaire sleutelwaarde voor elke INSERT
.
Een aangepaste reeks gebruiken
In sommige zeldzame gevallen is het standaard incrementele karakter ingebouwd in de SERIAL
en BIGSERIAL
gegevenstypen passen mogelijk niet bij uw behoeften. In deze gevallen kunt u dezelfde functie voor automatisch ophogen van de primaire sleutel voor uw kolom uitvoeren door een aangepaste SEQUENCE
te maken. , vergelijkbaar met de methode die wordt gebruikt in een oudere versie van Oracle.
Misschien zijn we vooral dol op even getallen, maar hebben we ook een sterke afkeer van alles kleiner dan 100, dus we willen alleen dat onze primaire sleutel met twee wordt verhoogd, beginnend bij 100 voor elke invoeging. Dit kan worden bereikt met een aangepaste SEQUENCE
zoals zo:
CREATE SEQUENCE books_sequence
start 2
increment 2;
Als we nu INSERT
een nieuw record in onze books
tabel, moeten we de volgende waarde van onze reeks evalueren met nextval('books_sequence')
en gebruik dat als onze id
.
INSERT INTO books
(id, title, primary_author)
VALUES
(nextval('books_sequence'), 'The Hobbit', 'Tolkien');
SEQUENCES
kan desgewenst nog meer gekruid worden, met opties als minvalue
en maxvalue
om natuurlijk extreme waarden aan te geven, en zelfs CYCLE
, waardoor de reeks kan "rondlopen" zodra deze de maxvalue
. bereikt , terugkerend naar de start
waarde en begint de klim helemaal opnieuw. Veel meer informatie is te vinden in de officiële documentatie.