Dans Postgres 9.x, pour une colonne de type UUID
, comment spécifier un UUID à générer automatiquement en tant que valeur par défaut pour toute insertion de ligne?
la source
Dans Postgres 9.x, pour une colonne de type UUID
, comment spécifier un UUID à générer automatiquement en tant que 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 uss OSSP . Le serveur Postgres appelle 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 , considérez la réponse par bpieck .
Alors que Postgres out-of-the-box prend en charge le stockage des valeurs UUID (identificateur unique universel) sous leur forme native à 128 bits , la génération de valeurs UUID nécessite un plug-in. Dans Postgres, un plug-in est appelé un extension
.
Pour installer une extension, appelez CREATE EXTENSION
. Pour éviter de réinstaller, 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 des UUID, OSSP uuid . Une compilation de cette bibliothèque pour Postgres est souvent associée à une installation de Postgres telle que les programmes d’ installation graphique fournis par Enterprise DB ou incluse par les fournisseurs de cloud, tels que Amazon RDS pour PostgreSQL .
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Voir la documentation 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 d'origine de l'UUID construite à partir de l'adresse MAC de l'ordinateur, de la date et de l'heure actuelles et d'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 nouvelle ligne insérée. Lors de la définition de la colonne, spécifiez:
DEFAULT uuid_generate_v1()
Voir la 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 comme un UUID nul .Pour comparer les types, voir Question, Quelle version d'UUID utiliser?
Si vous êtes intéressé par les versions 3 et 5, consultez cette question, Génération de l’UUID v5. Quel est le nom et l'espace de noms? .
Pour plus de discussion, voir ma réponse à une question similaire et les valeurs UUID de mon blog publiées de JDBC à Postgres .
getObject()
Vous pouvez également utiliserUUID id = rs.getObject("uuid_", UUID.class);
uuid_generate_v1
ou l’ autreuuid_generate_v1mc
.extension pgcrypto
Juste un petit ajout à la réponse très détaillée de Basil:
Comme actuellement, la plupart utilisent pgcrypto ,
uuid_generate_v1()
vous pouvez utilisergen_random_uuid()
une valeur UUID version 4 à la place .Premièrement, activez pgcrypto dans votre Postgres.
CREATE EXTENSION "pgcrypto";
Il suffit de définir DEFAULT d’une colonne sur
DEFAULT gen_random_uuid()
la source