48 / 100

UUID

Noyob identifikator turi

Kirish: Ushbu qo'llanmada siz PostgreSQL UUID ma'lumot turi yordamida global miqyosda takrorlanmas noyob identifikatorlarni saqlash va ularni birlamchi kalit (PRIMARY KEY) sifatida ishlatishni o'rganasiz.

PostgreSQL UUID ma'lumot turiga kirish

UUID (Universally Unique Identifier — universal yagona identifikator) RFC 4122 standarti bilan belgilangan 128 bitli (16 baytli) noyob sondir.

UUID ning asosiy afzalligi shundaki, u markaziy server yoki bazasiz ham global miqyosda (turli tizimlar va vaqtlar bo'yicha) unikal bo'lishni kafolatlaydi.

UUID ustunini yaratish sintaksisi:

query.sql
CREATE TABLE table_name (
  column_name UUID,
  ...
);

Ko'pincha UUID jadvallarda birlamchi kalit (PRIMARY KEY) turi sifatida ishlatiladi:

query.sql
CREATE TABLE table_name (
  column_name UUID PRIMARY KEY,
  ...
);

Nega oddiy sonli ID o'rniga UUID tanlanadi?

  1. Xavfsizlik va maxfiylik: Ketma-ket o'suvchi butun sonlar (id = 1, 2, 3...) tizimda jami qancha ma'lumot yoki mijoz borligini tashqi dunyoga fosh qilib qo'yishi mumkin. Masalan, yangi foydalanuvchi id = 1000 ni ko'rib, platformada atigi 1000 ta mijoz borligini bilib oladi. UUID esa tasodifiy belgilar ketma-ketligidan iborat bo'lgani uchun ichki statistikani yashiradi.
  2. Taqsimlangan tizimlar (Distributed systems): Ilovaning o'zi (masalan, frontend yoki mikroservis) ma'lumotlar bazasiga murojaat qilmasdanoq oldindan yangi UUID generatsiya qilib, bir nechta bog'liq yozuvlarni birgalikda yaratishi mumkin.

UUID generatsiya qilish: gen_random_uuid()

PostgreSQL 13 versiyasidan boshlab o'rnatilgan gen_random_uuid() funksiyasi yordamida tasodifiy UUID (v4) yaratish mumkin:

query.sql
SELECT gen_random_uuid();

Natija:

matn
           gen_random_uuid
--------------------------------------
 68f375c8-1b55-4558-a176-72a38a520149

Ushbu funksiyadan jadval yaratishda DEFAULT qiymat sifatida foydalanish mumkin:

query.sql
CREATE TABLE table_name (
  user_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  ...
);

PostgreSQL UUID turiga misol

Mijozlar jadvalini yaratib, uning birlamchi kalitiga UUID turini va DEFAULT gen_random_uuid() qiymatini o'rnatamiz:

query.sql
CREATE TABLE customers (
  customer_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name VARCHAR(255) NOT NULL
);

Jadvalga yangi mijozlarni qo'shamiz (bunda customer_id avtomatik tarzda yaratiladi):

query.sql
INSERT INTO
  customers (name)
VALUES
  ('ABC Corp.'),
  ('XYZ Inc.') 
RETURNING *;

Natija:

matn
             customer_id              |   name
--------------------------------------+-----------
 f1af387f-ac03-4784-bbcb-b564a88cd682 | ABC Corp.
 aae1c410-06ff-48df-818b-dbed92a1efbc | XYZ Inc.

Xulosa

  • Xavfsiz va taqsimlangan tizimlarda jadvallarning birlamchi kaliti sifatida UUID ma'lumot turidan foydalaning.
  • Tasodifiy UUID yaratish uchun gen_random_uuid() funksiyasidan foydalaning.
  • DEFAULT gen_random_uuid() orqali yangi qatorlarga avtomatik unikal kalit berilishini ta'minlang.