Yanıtlar:
OSSP uuid işlevlerinden DEFAULT
birini çağırmak için bir sütun tanımlarken arayın . Postgres sunucusu, her satır eklendiğinde işlevi otomatik olarak çağırır.
CREATE TABLE tbl
(
pkey UUID NOT NULL DEFAULT uuid_generate_v1() ,
CONSTRAINT pkey_tbl PRIMARY KEY ( pkey )
)
Birlikte Postgres dışı Kutudan destekler depolanması UUID (Evrensel benzersiz tanıtıcı) kendi doğal değerleri 128 bit , form üretme UUID'si değerleri bir plug-in gerektirir. PostGres'te bir eklenti olarak bilinir extension
.
Bir eklenti yüklemek için arayın CREATE EXTENSION
. Yeniden kurmaktan kaçınmak için ekleyin IF NOT EXISTS
. Daha fazla ayrıntı için blog gönderime bakın veya bu sayfayı StackOverflow'ta görün .
İstediğimiz uzantı, UUID'lerle , OSSP uuid'iyle çalışmak için C'ye yerleştirilmiş açık kaynaklı bir kütüphanedir . Postgres için bu kütüphanenin bir derlemesi, Enterprise DB tarafından sağlanan grafik kurucular veya PostgreSQL için Amazon RDS gibi bulut sağlayıcılar tarafından dahil edilen Postgres kurulumu ile birlikte gelir .
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Çeşitli UUID değerleri üretmek için sunulan birden çok komutun listesini görmek için uzantının belgesine bakın. Bilgisayarın MAC adresinden ve geçerli tarih saatinden ve küçük bir rastgele değerden oluşturulmuş orijinal UUID sürümünü edinmek için arayın uuid_generate_v1()
.
SELECT uuid_generate_v1();
672124b6-9894-11e5-be38-001d42e813fe
Daha sonra, bu UUID'lerin alternatif türleri için bu temadaki farklılıklar geliştirilmiştir. Bazı insanlar, güvenlik veya gizlilik endişeleri gibi, sunucunun gerçek MAC adresini kaydetmek istemeyebilir. Postgres eklentisi beş çeşit UUID, artı “nil” UUID üretir 00000000-0000-0000-0000-000000000000
.
Yeni eklenen herhangi bir satır için varsayılan bir değer oluşturmak üzere bu yöntem çağrısı otomatik olarak yapılabilir. Sütunu tanımlarken, belirtin:
DEFAULT uuid_generate_v1()
Aşağıdaki örnek tablo tanımında kullanılan komutu görün.
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;
Uuid-ossp eklentisi üretebilir UUID çeşitli versiyonlarını .
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
. Bilinmeyen bir UUID değeri için bayrak olarak kullanılır. Nil UUID olarak bilinir .Türleri karşılaştırmak için bkz. Soru, Hangi UUID sürümünü kullanmalı?
Sürüm 3 ve 5'i merak ediyorsanız, v5 UUID Oluşturma adlı bu soruya bakın. İsim ve isim alanı nedir? .
Daha fazla tartışma için, bkz benim cevap benzer Soru ve benim blog yazısı Postgres için JDBC gelen UUID değerlerini .
getObject()
Ayrıca kullanabileceğiniz sonucunu UUID id = rs.getObject("uuid_", UUID.class);
uuid_generate_v1
veya 1'i arayarak Sürüm 1 türü olmalıdır uuid_generate_v1mc
.
Basil'in çok ayrıntılı cevabına küçük bir eklenti:
Şu anda çoğu pgcrypto kullandığından , bunun yerine Sürüm 4 UUID değeri için uuid_generate_v1()
kullanabilirsiniz .gen_random_uuid()
İlk olarak, Postgres'te pgcrypto'yu etkinleştir
CREATE EXTENSION "pgcrypto";
Sadece bir sütunun DEFAULT değerini
DEFAULT gen_random_uuid()