PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment définir une clé primaire d'incrémentation automatique dans PostgreSQL

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.