Universally Unique Identifiers (UUID) olarak bilinen ve Postgresql veritabanında uuid olarak adlandırılan bir veri tipi bulunmaktadır. Bazı sistemler bu veri türünü genel olarak benzersiz bir tanımlayıcı veya GUID olarak adlandırır. Benzersiz olarak üretilmesi nedeniyle, dağıtık sistemler için bu veri türü, tek bir veritabanı içinde ID üretimi bakımından sıralı üreteçlerden daha iyi bir benzersizlik garantisi sağlar.
UUID veri tipi, tire işaretleriyle ayrılmış birkaç grup halinde ifade edilir. Özellikle 8 basamaklı ilk grup ve ardından 4 basamaklı üç grup ve onn ardından 12 basamaklı bir grup olarak küçük harfli onaltılık basamak dizisi olarak yazılır. Bu standart formdaki bir UUID örneği:
e0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
PostgreSQL veri tabanı, ayrıca aşağıdaki UUID formlarını da kabul eder.
A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11
{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}
a0eebc999c0b4ef8bb6d6bb9bd380a11
a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11
{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}
PostgreSQL veri tabanından benzersiz uuid üretebilmek için uuid-ossp eklentisinin aktif edilmesi gerekmektedir. Bu eklentiyi aktif etmek için aşağıdaki komut kullanılabilir.
CREATE EXTENSION "uuid-ossp";
Bu komutu çalıştırıldığında, Postgresql’e uuid üretebilen fonksiyonlar eklenmektedir.
- uuid_generate_v1()
- uuid_generate_v1mc()
- uuid_generate_v4()
- uuid_nil()
uuid_generate_v1()
Bilgisayarın MAC adresi, geçerli zaman damgası ve rastgele bir değer kombinasyonuna göre UUID değerleri oluşturmak için uuid_generate_v1 () işlevi kullanılır.
SELECT uuid_generate_v1();
uuid_generate_v1mc()
Bu fonksiyon, sürüm 1 UUID oluşturur, ancak bilgisayarın gerçek MAC adresi yerine rasgele multicast MAC adresi kullanır.
SELECT uuid_generate_v1mc();
uuid_generate_v4()
Yalnızca rastgele sayılara dayalı bir UUID değeri oluşturmak istiyorsanız uuid_generate_v4 () fonksiyonunu kullanabilirsiniz.
SELECT uuid_generate_v4();
uuid_nil()
Sadece sıfırlardan oluşan bir uuid değeri üretir.
SELECT uuid_nil();
Tabloda uuid Alanı Kullanımı
CREATE TABLE messeges (
id uuid DEFAULT uuid_generate_v4(),
content VARCHAR NOT NULL,
PRIMARY KEY (id)
);
Tabloya veri girişi:
INSERT INTO messages
(content)
VALUES
('Hi'),
('This is'),
('my message');
Veri Boyutu ve Performans
uuid veri tipi 16 byte boyutunda binary değere sahiptir. Bu nedenle sorgularda çok büyük performans artışı sağlar. Aynı boyuttaki bir text ile karşılaştıracak olursak:
select
pg_column_size('0fe5d76a-99b6-11ea-bb37-0242ac130002'::text)
as text_size,
pg_column_size('0fe5d76a-99b6-11ea-bb37-0242ac130002'::uuid)
as uuid_size;
text_size | uuid_size
-----------+-----------
40 | 16