Pour une base de données relationnelle comme PostgreSQL, cela pourrait largement être considéré comme un péché parmi les développeurs pas pour inclure une clé primaire dans chaque table. Il est donc crucial que vous fassiez tout votre possible pour ajouter cette colonne de clé primaire très importante à chaque table, et heureusement, Postgres fournit deux méthodes pour accomplir cette tâche.
Utilisation du type de données série
La technique de loin la plus simple et la plus courante pour ajouter une clé primaire dans Postgres consiste à utiliser le SERIAL
ou BIGSERIAL
types de données lors de la CREATING
un nouveau tableau. Comme indiqué dans la documentation officielle, SERIAL
n'est pas un vrai type de données, mais simplement une notation abrégée qui indique à Postgres de créer un identifiant unique auto-incrémenté pour la colonne spécifiée.
Ci-dessous, nous allons créer nos books
simples table avec un SERIAL
approprié type de données pour la clé primaire.
CREATE TABLE books (
id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
primary_author VARCHAR(100) NULL
);
En définissant simplement notre id
colonne comme SERIAL
avec PRIMARY KEY
attaché, Postgres gérera tout le travail compliqué en coulisses et incrémentera automatiquement notre id
colonne avec une valeur de clé primaire unique pour chaque INSERT
.
Utiliser une séquence personnalisée
Dans de rares cas, la nature incrémentielle standard intégrée au SERIAL
et BIGSERIAL
types de données peuvent ne pas convenir à vos besoins. Dans ces cas, vous pouvez exécuter la même fonctionnalité de clé primaire auto-incrémentée pour votre colonne en créant une SEQUENCE
personnalisée , similaire à la méthode utilisée dans l'ancienne version d'Oracle.
Peut-être que nous aimons particulièrement les nombres pairs, mais que nous avons également un fort dégoût pour tout ce qui est inférieur à 100, nous voulons donc que notre clé primaire soit incrémentée de deux à partir de 100 pour chaque insertion. Cela peut être accompli avec une SEQUENCE
personnalisée comme ça :
CREATE SEQUENCE books_sequence
start 2
increment 2;
Maintenant, lorsque nous INSERT
un nouveau record dans nos books
table, nous devons évaluer la valeur suivante de notre séquence avec nextval('books_sequence')
et l'utiliser comme notre id
.
INSERT INTO books
(id, title, primary_author)
VALUES
(nextval('books_sequence'), 'The Hobbit', 'Tolkien');
SEQUENCES
peut être encore plus épicé si vous le souhaitez, avec des options telles que minvalue
et maxvalue
pour bien sûr indiquer des valeurs extrêmes, et même CYCLE
, ce qui permet à la séquence de "faire une boucle" une fois qu'elle atteint la maxvalue
, revenant au start
valeur et recommencer la montée. Beaucoup plus d'informations peuvent être trouvées dans la documentation officielle.