Dans Postgres 9.x, pour une colonne de type UUID
, comment spécifier un UUID à générer automatiquement comme valeur par défaut pour toute insertion de ligne ?
Appelez DEFAULT
lors de la définition d'une colonne pour appeler l'une des fonctions ussid OSSP . Le serveur Postgres invoquera automatiquement la fonction chaque fois qu'une ligne est insérée.
CREATE TABLE tbl
(
pkey UUID NOT NULL DEFAULT uuid_generate_v1() ,
CONSTRAINT pkey_tbl PRIMARY KEY ( pkey )
)
Si vous utilisez déjà l'extension pgcrypto , envisagez l'extension Answer by bpieck .
Alors que Postgres prêt à l'emploi prend en charge le stockage UUID (Universally Unique Identifier) valeurs sous leur forme native 128 bits , générant les valeurs UUID nécessitent un plug-in. Dans Postgres, un plug-in est appelé extension
.
Pour installer une extension, appelez CREATE EXTENSION
. Pour éviter la réinstallation, ajoutez IF NOT EXISTS
. Voir mon article de blog pour plus de détails, ou voir cette page dans StackOverflow .
L'extension que nous voulons est une bibliothèque open-source construite en C pour travailler avec les UUID, uuid OSSP . Une construction de cette bibliothèque pour Postgres est souvent livrée avec une installation de Postgres comme les installateurs graphiques fournis by Enterprise DB = ou inclus par des fournisseurs de cloud tels que Amazon RDS pour PostgreSQL .
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Voir le doc de l'extension pour voir une liste de plusieurs commandes proposées pour générer différents types de valeurs UUID. Pour obtenir la version originale de l'UUID construite à partir de l'ordinateur adresse MAC plus la date-heure actuelle plus une petite valeur aléatoire, appelez uuid_generate_v1()
.
SELECT uuid_generate_v1();
672124b6-9894-11e5-be38-001d42e813fe
Des variations ultérieures sur ce thème ont été développées pour d'autres types d'UUID. Certaines personnes peuvent ne pas vouloir enregistrer l'adresse MAC réelle du serveur, par exemple pour des raisons de sécurité ou de confidentialité. L'extension Postgres génère cinq types d'UUID, plus l'UUID "nil" 00000000-0000-0000-0000-000000000000
.
Cet appel de méthode peut être effectué automatiquement pour générer une valeur par défaut pour toute ligne nouvellement insérée. Lors de la définition de la colonne, spécifiez:
DEFAULT uuid_generate_v1()
Voir cette commande utilisée dans l'exemple de définition de table suivant.
CREATE TABLE public.pet_
(
species_ text NOT NULL,
name_ text NOT NULL,
date_of_birth_ text NOT NULL,
uuid_ uuid NOT NULL DEFAULT uuid_generate_v1(), -- <====
CONSTRAINT pet_pkey_ PRIMARY KEY (uuid_)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.pet_
OWNER TO postgres;
Le plugin uuid-ossp peut générer différentes versions d'UUID .
uuid_generate_v1()
uuid_generate_v1mc()
uuid_generate_v3( namespace uuid, name text )
uuid_generate_v4()
uuid_generate_v5( namespace uuid, name text )
uuid_nil()
00000000-0000-0000-0000-000000000000
. Utilisé comme indicateur pour une valeur UUID inconnue. Connu sous le nom nil UUID .Pour comparer les types, voir Question, Quelle version d'UUID utiliser?
Si vous êtes curieux de connaître les versions 3 et 5, consultez cette question, Génération de l'UUID v5. Qu'est-ce que le nom et l'espace de noms? .
Pour plus de discussion, voir ma réponse à une question similaire et mon article de blog Valeurs UUID de JDBC à Postgres .
Juste un petit ajout à la réponse très détaillée de Basil:
Étant donné que la plupart utilisent actuellement pgcrypto , au lieu de uuid_generate_v1()
, vous pouvez utiliser gen_random_uuid()
pour un Version 4 UUID valeur.
Tout d'abord, activez pgcrypto dans vos Postgres.
CREATE EXTENSION "pgcrypto";
Définissez simplement DEFAULT d'une colonne sur DEFAULT gen_random_uuid()