Une demande qui arrive souvent de la part des clients qui ont un système de commandes, de soumissions ou de facturation est de pouvoir débuter la numérotation des demandes à un nombre précis. Habituellement, c'est soit que le commerçant avait un ancien système et qu'il souhaite poursuivre la numérotation au numéro actuel pour conserver la continuité séquentielle, sinon c'est qu'il veut faire croire que son système est plus populaire qu'il l'est en réalité. Son premier client pourra alors avoir l'entrée 1000 plutôt que la numéro 1.
Ça peut se faire facilement si on prend pour acquis que le numéro correspondra à la séquence de la clé primaire de la table.
Création d'une table de commandes (simplifiée)
CREATE TABLE commandDéfinition de la clé primaire
(
command_id integer NOT NULL,
client_name varchar(100) NOT NULL,
...
);
Si vous avez défini command_id en utilisant le type integer plutôt que serial, vous devrez définir la clé primaire explicitement en ajoutant une contrainte (plus de détails sur le type SERIAL de PostgreSQL).
ALTER TABLE commandÀ ce stade-ci, si vous essayez de faire une insertion dans la table, la base de données lancera un message d'erreur car aucune séquence n'a été définie.
ADD CONSTRAINT pk_command_id
PRIMARY KEY (command_id);
INSERT INTO command (client_name)ERROR: null value in column "command_id" violates not-null constraint
VALUES ('Sun Microsystems');
Création de la séquence
Comme on veut obtenir un numéro incrémentiel pour chaque commande ajoutée, on doit définir un objet qu'on appelle une séquence. Celle-ci se caractérise par un nom (command_id_seq) auquel on pourra référer plus tard dans notre programmation. De plus, on indique la valeur la plus basse que peut porter un numéro de commande (souvent 1, mais dans notre cas 1000), la valeur de départ pour la numérotation et l'incrémentation (chaque insertion créera un numéro unique avec un saut de 1 par rapport à la valeur précédente). Normalement, la valeur maximale sera définie automatiquement à 9223372036854775807.
CREATE SEQUENCE command_id_seqSi la séquence existe déjà et qu'on veut seulement changer la valeur de départ :
MINVALUE 1000
START 1000
INCREMENT 1;
ALTER SEQUENCE command_id_seqCe n'est pas tout, il faut aussi attacher cette séquence à la clé primaire si on veut que la valeur de command_id soit attribuée automatiquement :
MINVALUE 1000
START 1000
INCREMENT 1;
ALTER TABLE commandC'est fait. Les prochaines insertions utiliseront les valeurs 1000 et suivantes.
ALTER COLUMN command_id
SET DEFAULT nextval('command_id_seq');
clair, précis et concis
merci