Типилише PostgreSQL

GEN_RANDOM_UUID

Створює випадковий UUID — унікальний ідентифікатор на кшталт 3f2c9a1e-….

Синтаксис

GEN_RANDOM_UUID()

Повертає UUID версії 4: 32 шістнадцяткові цифри з дефісами, згенеровані випадково. Шанс двох однакових мізерний, тож такі ключі можна створювати будь-де — у базі чи в застосунку — без узгодження. Найчастіше їх ставлять значенням за замовчуванням: id uuid PRIMARY KEY DEFAULT gen_random_uuid().

Дані для прикладів

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

Ці таблиці вже створено в пісочниці — приклади нижче працюють із ними. Хочеш повторити у своїй базі — скопіюй SQL.

Новий UUID
SELECT GEN_RANDOM_UUID() AS id;
id
f9b34e8f-3f5a-45cf-b0b1-0c6add1723b7

Результат щоразу інший — натисни «Виконати» ще раз.

Кожен рядок — свій
SELECT name, GEN_RANDOM_UUID() AS id
FROM employees;
nameid
Emma8163699d-3f38-4465-906f-9694ee1361ef
Liam465e8725-8440-4db0-9447-541a2edbccb4
Olivia6a504341-3ea7-496d-a870-3be957a3864c
Noaha1749abe-3d3c-4cd7-9dac-4a5ea254f914
Sophiac4a4a7e9-c8be-4e1a-b747-239b0ca0262d
Тип і довжина
SELECT pg_typeof(GEN_RANDOM_UUID()) AS type,
LENGTH(GEN_RANDOM_UUID()::text) AS text_length;
typetext_length
uuid36

Зверни увагу

Зберігай у типі uuid, а не text: у uuid це 16 байтів, а текстом — 36 символів і повільніші порівняння.

Випадкові UUID не відсортовані за часом створення: ORDER BY id не дасть порядку додавання, а нові значення розкидаються по всьому індексу. У PostgreSQL 18 є uuidv7(), де час закладено на початку.

UUID займає 16 байтів проти 8 у bigint. Для величезних таблиць із багатьма зв'язками це помітно на розмірі індексів.

Схожі функції

Детально в курсі