Wie gebe ich in Postgres 9.x für eine Spalte des Typs UUID
eine UUID an, die automatisch als Standardwert für jede Zeileneinfügung generiert werden soll?
quelle
Wie gebe ich in Postgres 9.x für eine Spalte des Typs UUID
eine UUID an, die automatisch als Standardwert für jede Zeileneinfügung generiert werden soll?
Aufruf DEFAULT
beim Definieren einer Spalte zum Aufrufen einer der OSSP-UUID- Funktionen. Der Postgres-Server ruft die Funktion bei jedem Einfügen einer Zeile automatisch auf.
CREATE TABLE tbl
(
pkey UUID NOT NULL DEFAULT uuid_generate_v1() ,
CONSTRAINT pkey_tbl PRIMARY KEY ( pkey )
)
Während Postgres die sofortige Speicherung von UUID- Werten (Universally Unique Identifier) in ihrer nativen 128-Bit- Form unterstützt, ist für die Generierung von UUID-Werten ein Plug-In erforderlich. In Postgres wird ein Plug-In als extension
.
Um eine Erweiterung zu installieren, rufen Sie an CREATE EXTENSION
. Um eine Neuinstallation zu vermeiden, fügen Sie hinzu IF NOT EXISTS
. Weitere Informationen finden Sie in meinem Blogbeitrag oder auf dieser Seite in StackOverflow .
Die gewünschte Erweiterung ist eine Open-Source-Bibliothek, die in C für die Arbeit mit UUIDs ( OSSP uuid) erstellt wurde . Ein Build dieser Bibliothek für Postgres wird häufig mit einer Installation von Postgres gebündelt, z. B. den von Enterprise DB bereitgestellten grafischen Installationsprogrammen oder von Cloud-Anbietern wie Amazon RDS für PostgreSQL .
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Im Dokument der Erweiterung finden Sie eine Liste mit mehreren Befehlen zum Generieren verschiedener Arten von UUID-Werten. Rufen Sie an, um die Originalversion der UUID zu erhalten, die aus der MAC-Adresse des Computers, der aktuellen Datums- und Uhrzeitangabe sowie einem kleinen Zufallswert erstellt wurde uuid_generate_v1()
.
SELECT uuid_generate_v1();
672124b6-9894-11e5-be38-001d42e813fe
Spätere Variationen dieses Themas wurden für alternative Arten von UUIDs entwickelt. Einige Benutzer möchten möglicherweise nicht die tatsächliche MAC-Adresse des Servers aufzeichnen, z. B. aus Sicherheits- oder Datenschutzgründen. Die Postgres-Erweiterung generiert fünf Arten von UUIDs sowie die "Null" -UUID 00000000-0000-0000-0000-000000000000
.
Dieser Methodenaufruf kann automatisch ausgeführt werden, um einen Standardwert für eine neu eingefügte Zeile zu generieren. Geben Sie beim Definieren der Spalte Folgendes an:
DEFAULT uuid_generate_v1()
Siehe den Befehl in der folgenden Beispieltabellendefinition.
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;
Das Plugin uuid-ossp kann verschiedene Versionen von UUID generieren .
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
. Wird als Flag für einen unbekannten UUID-Wert verwendet. Bekannt als Null-UUID .Informationen zum Vergleichen von Typen finden Sie unter Frage, welche UUID-Version verwendet werden soll.
Wenn Sie sich für die Versionen 3 und 5 interessieren, lesen Sie diese Frage, Generieren der v5-UUID. Was ist Name und Namespace? .
Weitere Informationen finden Sie in der Antwort auf eine ähnliche Frage und in den UUID-Werten meines Blogposts von JDBC zu Postgres .
getObject()
du auch verwendenUUID id = rs.getObject("uuid_", UUID.class);
uuid_generate_v1
oder aufrufenuuid_generate_v1mc
.pgcrypto- Erweiterung
Nur eine kleine Ergänzung zu Basils sehr detaillierter Antwort:
Da zur Zeit die meisten verwenden pgcrypto , statt
uuid_generate_v1()
Sie verwenden können ,gen_random_uuid()
für eine Version 4 UUID Wert.Aktivieren Sie zunächst pgcrypto in Ihrem Postgres.
CREATE EXTENSION "pgcrypto";
Setzen Sie einfach DEFAULT einer Spalte auf
DEFAULT gen_random_uuid()
quelle