U relační databáze, jako je PostgreSQL, by to mezi vývojáři mohlo být obecně považováno za hřích ne zahrnout primární klíč do každé tabulky. Je proto zásadní, abyste udělali maximum pro to, abyste přidali tento nanejvýš důležitý sloupec primárního klíče do každé tabulky a Postgres naštěstí poskytuje dvě metody, jak tento úkol splnit.
Použití sériového datového typu
Zdaleka nejjednodušší a nejběžnější technika pro přidání primárního klíče v Postgresu je použití SERIAL
nebo BIGSERIAL
datové typy při CREATING
nový stůl. Jak je uvedeno v oficiální dokumentaci, SERIAL
není skutečný datový typ, ale je to jednoduše zkrácený zápis, který říká Postgresu, aby pro zadaný sloupec vytvořil automaticky inkrementovaný jedinečný identifikátor.
Níže vytvoříme naše jednoduché books
tabulkou s příslušným SERIAL
datový typ pro primární klíč.
CREATE TABLE books (
id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
primary_author VARCHAR(100) NULL
);
Jednoduchým nastavením našeho id
sloupec jako SERIAL
s PRIMARY KEY
přiloženo, Postgres zvládne veškerou komplikovanou práci v zákulisí a automaticky zvýší naše id
sloupec s jedinečnou hodnotou primárního klíče pro každý INSERT
.
Použití vlastní sekvence
V některých vzácných případech je standardní inkrementální charakter zabudován do SERIAL
a BIGSERIAL
datové typy nemusí vyhovovat vašim potřebám. V těchto případech můžete pro svůj sloupec provést stejnou funkci automatického zvýšení primárního klíče vytvořením vlastní SEQUENCE
, podobná metodě používané ve starší verzi Oracle.
Možná máme obzvláště rádi sudá čísla, ale také máme silný odpor k čemukoli menšímu než 100, takže chceme, aby se náš primární klíč zvýšil pouze o dva počínaje 100 pro každou vložku. Toho lze dosáhnout pomocí vlastní SEQUENCE
takhle:
CREATE SEQUENCE books_sequence
start 2
increment 2;
Nyní, když INSERT
nový záznam do našich books
tabulky, musíme vyhodnotit další hodnotu naší sekvence pomocí nextval('books_sequence')
a použijte to jako naše id
.
INSERT INTO books
(id, title, primary_author)
VALUES
(nextval('books_sequence'), 'The Hobbit', 'Tolkien');
SEQUENCE
lze na přání ještě více okořenit pomocí možností jako minvalue
a maxvalue
samozřejmě indikovat extrémní hodnoty a dokonce CYCLE
, což umožňuje, aby se sekvence „zacyklila“, jakmile dosáhne maxvalue
, vrátíte se zpět na start
hodnotu a začátek stoupání znovu. Daleko více informací lze nalézt v oficiální dokumentaci.