Per un database relazionale come PostgreSQL, potrebbe essere ampiamente considerato un peccato tra gli sviluppatori non per includere una chiave primaria in ogni tabella. È quindi fondamentale che tu faccia del tuo meglio per aggiungere l'importantissima colonna della chiave primaria a ogni tabella e, fortunatamente, Postgres fornisce due metodi per portare a termine questo compito.
Utilizzo del tipo di dati seriale
La tecnica di gran lunga più semplice e comune per aggiungere una chiave primaria in Postgres è usare il SERIAL
o BIGSERIAL
tipi di dati quando CREATING
una nuova tavola. Come indicato nella documentazione ufficiale, SERIAL
non è un vero tipo di dati, ma è semplicemente una notazione abbreviata che dice a Postgres di creare un identificatore univoco con incremento automatico per la colonna specificata.
Di seguito creeremo i nostri semplici books
tabella con un SERIAL
appropriato tipo di dati per la chiave primaria.
CREATE TABLE books (
id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
primary_author VARCHAR(100) NULL
);
Semplicemente impostando il nostro id
colonna come SERIAL
con PRIMARY KEY
allegato, Postgres gestirà tutto il complicato lavoro dietro le quinte e aumenterà automaticamente il nostro id
colonna con un valore di chiave primaria univoco per ogni INSERT
.
Utilizzo di una sequenza personalizzata
In alcuni rari casi, la natura incrementale standard è incorporata nel SERIAL
e BIGSERIAL
i tipi di dati potrebbero non essere adatti alle tue esigenze. In questi casi, puoi eseguire la stessa funzionalità di chiave primaria con incremento automatico per la tua colonna creando una SEQUENCE
personalizzata , simile al metodo utilizzato nella versione precedente di Oracle.
Forse amiamo particolarmente i numeri pari, ma abbiamo anche una forte avversione per qualsiasi cosa inferiore a 100, quindi vogliamo solo che la nostra chiave primaria venga incrementata di due a partire da 100 per ogni inserto. Questo può essere ottenuto con una SEQUENCE
personalizzata così:
CREATE SEQUENCE books_sequence
start 2
increment 2;
Ora quando INSERT
un nuovo record nei nostri books
tabella, dobbiamo valutare il valore successivo della nostra sequenza con nextval('books_sequence')
e usalo come nostro id
.
INSERT INTO books
(id, title, primary_author)
VALUES
(nextval('books_sequence'), 'The Hobbit', 'Tolkien');
SEQUENCES
può essere ulteriormente arricchito se lo si desidera, con opzioni come minvalue
e maxvalue
per indicare ovviamente valori estremi, e anche CYCLE
, che consente alla sequenza di eseguire un "ciclo continuo" una volta raggiunto il maxvalue
, tornando all'start
valore e ricominciare daccapo la salita. Maggiori informazioni possono essere trovate nella documentazione ufficiale.