Risposte:
Chiamare DEFAULT
quando si definisce una colonna per richiamare una delle funzioni uuid OSSP . Il server Postgres invocherà automaticamente la funzione ogni volta che viene inserita una riga.
CREATE TABLE tbl
(
pkey UUID NOT NULL DEFAULT uuid_generate_v1() ,
CONSTRAINT pkey_tbl PRIMARY KEY ( pkey )
)
Se si utilizza già l' estensione pgcrypto , considerare la risposta per bpieck .
Mentre Postgres supporta immediatamente la memorizzazione dei valori UUID (Universally Unique Identifier) nella loro forma nativa a 128 bit , la generazione di valori UUID richiede un plug-in. In Postgres, un plug-in è noto come extension
.
Per installare un interno, chiama CREATE EXTENSION
. Per evitare la reinstallazione, aggiungere IF NOT EXISTS
. Vedi il mio post sul blog per maggiori dettagli o vedi questa pagina in StackOverflow .
L'estensione che vogliamo è una libreria open source costruita in C per lavorare con UUID, uuid OSSP . Una build di questa libreria per Postgres è spesso associata a un'installazione di Postgres come i programmi di installazione grafici forniti da Enterprise DB o inclusi da provider cloud come Amazon RDS per PostgreSQL .
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Consulta il documento dell'estensione per visualizzare un elenco di più comandi offerti per generare vari tipi di valori UUID. Per ottenere la versione originale di UUID creata dall'indirizzo MAC del computer più la data e l'ora corrente più un piccolo valore casuale, chiama uuid_generate_v1()
.
SELECT uuid_generate_v1();
672124b6-9894-11e5-be38-001d42e813fe
Le variazioni successive su questo tema sono state sviluppate per tipi alternativi di UUID. Alcune persone potrebbero non voler registrare l'indirizzo MAC effettivo del server, ad esempio per motivi di sicurezza o privacy. L'estensione Postgres genera cinque tipi di UUID, oltre all'UUID "zero" 00000000-0000-0000-0000-000000000000
.
Tale chiamata al metodo può essere effettuata automaticamente per generare un valore predefinito per qualsiasi riga appena inserita. Quando si definisce la colonna, specificare:
DEFAULT uuid_generate_v1()
Vedi quel comando usato nella seguente definizione della tabella di esempio.
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;
Il plugin uuid-ossp può generare varie versioni di 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
. Utilizzato come flag per un valore UUID sconosciuto. Conosciuto come UUID nullo .Per confrontare i tipi, vedi Domanda, Quale versione UUID usare?
Se sei curioso di conoscere le versioni 3 e 5, vedi questa domanda, Generazione dell'UUID v5. Che cos'è il nome e lo spazio dei nomi? .
Per ulteriori discussioni, vedere la mia risposta a una domanda simile e il mio post sul blog Valori UUID da JDBC a Postgres .
getObject()
che puoi usare ancheUUID id = rs.getObject("uuid_", UUID.class);
uuid_generate_v1
o uuid_generate_v1mc
.
Solo una piccola aggiunta alla risposta molto dettagliata di Basil:
Dato che attualmente la maggior parte utilizza pgcrypto , invece di uuid_generate_v1()
te puoi usare gen_random_uuid()
un valore UUID versione 4 .
Innanzitutto, abilita pgcrypto in Postgres.
CREATE EXTENSION "pgcrypto";
Basta impostare DEFAULT di una colonna su
DEFAULT gen_random_uuid()