Перейти к основному содержимому

uuid-ossp. Функции для генерирования UUID

В исходном дистрибутиве установлено по умолчанию: нет.

Связанные компоненты: отсутствуют.

Схема размещения: ext.

Использование модуля позволяет генерировать универсальные уникальные идентификаторы (UUID) по одному из нескольких стандартных алгоритмов и специальные UUID-константы.

Модуль uuid-osspнеобходим только при наличии особых потребностей, для удовлетворения которых не хватает стандартного функционала в ядре PostgreSQL. Встроенные в ядро способы генерирования UUID описаны в UUID Functions.

В следующей таблице перечислены функции, предназначенные для генерации UUID. Четыре алгоритма для генерации UUID, обозначаемые номерами версий 1, 3, 4 и 5, описаны в стандартах ITU-T Rec. X.667, ISO/IEC 9834-8:2005 и RFC 4122. Алгоритма версии 2 нет. Каждый из этих алгоритмов предназначен для различных сфер применения.

ФункцияВходные аргументыВозвращаемое значениеОписание
uuid_generate_v1uuidГенерирует UUID версии 1, включающий в себя MAC-адрес компьютера и текущее время. UUID такого типа может быть неприемлем в случае, когда важна конфиденциальность, поскольку раскрывает «личность» компьютера, создавшего идентификатор, и время этой операции
uuid_generate_v1mcuuidГенерирует UUID версии 1, но вместо реального MAC-адреса компьютера подставляет случайный групповой MAC-адрес
uuid_generate_v3namespace uuid;
name text.
uuidГенерирует UUID версии 3 для заданного пространства имен UUID и указанного имени. Пространство имен задается одной из специальных констант, которые выдают функции uuid_ns_*(), возвращающие UUID-константы. Теоретически этот UUID может быть любым. Имя задает идентификатор в выбранном пространстве имен
uuid_generate_v4uuidГенерирует UUID версии 4, который полностью определяется случайными числами
uuid_generate_v5namespace uuid;
name text.
uuidГенерирует UUID версии 5, который похож на версию 3, но хеш рассчитывается по алгоритму SHA-1. Версия 5 предпочтительнее версии 3, так как SHA-1 безопаснее MD5

Функции, возвращающие UUID-константы:

ФункцияВозвращаемое значениеОписание
uuid_niluuidВыдает «нулевой» UUID, который не считается действительным UUID
uuid_ns_dnsuuidВыдает константу, обозначающую пространство имен DNS для UUID
uuid_ns_urluuidВыдает константу, обозначающую пространство имен URL для UUID
uuid_ns_oiduuidВыдает константу, обозначающую пространство имен идентификаторов объектов ISO (OID, ISO Object Identifier) для UUID
uuid_ns_x500uuidВыдает константу, обозначающую пространство имен с уникальными именами X.500 для UUID

Доработка

Доработка не проводилась.

Ограничения

Ограничения отсутствуют.

Установка

Модуль считается «доверенным», поэтому его могут устанавливать пользователи, имеющие право CREATE в текущей базе данных:

CREATE EXTENSION "uuid-ossp" SCHEMA ext;

Настройка

В прошлом этот модуль зависел от библиотеки OSSP UUID. Этот факт отразился в имени модуля. Библиотеку OSSP UUID можно найти по адресу http://www.ossp.org/pkg/lib/uuid/. Библиотека недостаточно поддерживается и ее сложно портировать на новые платформы. Поэтому модуль uuid-ossp теперь на некоторых платформах можно собирать без библиотеки OSSP.

Во FreeBSD и некоторых других ОС на базе BSD подходящие функции формирования UUID включены в системную библиотеку libc.

В Linux, macOS и некоторых других платформах подходящие функции предоставляются библиотекой libuuid, которая изначально поступила из проекта e2fsprogs. В современных дистрибутивах Linux библиотека libuuid является частью пакета util-linux-ng.

При вызове configure необходимо передать ключи:

  • --with-uuid=bsd для использования функции BSD;
  • --with-uuid=e2fs для использования libuuid из e2fsprogs;
  • --with-uuid=ossp для использования библиотеки OSSP UUID.

В конкретной системе может быть установлено сразу несколько библиотек, поэтому configure не выбирает библиотеку автоматически.

Использование модуля

SELECT uuid_generate_v1();

Пример вывода результата выполнения запроса:

           uuid_generate_v1           
--------------------------------------
2193434e-c7a8-11ed-b3d2-0050560a7d0b
(1 row)

Функция uuid_generate_v3:

Из параметра name будет получен MD5-хеш, так что из сгенерированного UUID нельзя будет восстановить имя. В генерируемых таким алгоритмом UUID нет элемента случайности или зависимости от окружения, так что они могут быть воспроизведены.

SELECT uuid_generate_v3(uuid_ns_url(), 'http://www.postgresql.org');

Пример вывода результата выполнения запроса:

           uuid_generate_v3           
--------------------------------------
cf16fe52-3365-3a1f-8572-288d8d2aaa46
(1 row)

Создание таблицы со столбцом UUID:

Создание таблицы, первичным ключом которой является тип данных UUID. Значения столбца первичного ключа будут сгенерированы автоматически с помощью функции uuid_generate_v4().

CREATE TABLE contacts (
contact_id uuid DEFAULT uuid_generate_v4 (),
first_name VARCHAR NOT NULL,
last_name VARCHAR NOT NULL,
email VARCHAR NOT NULL,
phone VARCHAR,
PRIMARY KEY (contact_id)
);

В этом утверждении типом данных столбца contact_id является UUID. Столбец contact_id имеет значения по умолчанию, предоставляемые функцией uuid_generate_v4(), поэтому всякий раз, когда вставлена новую строку без указания значения для contact_id, PostgreSQL вызовет функцию uuid_generate_v4() для генерации для нее значения.

Вставить некоторые данные в таблицу contacts:

INSERT INTO contacts (
first_name,
last_name,
email,
phone
)
VALUES
(
'John',
'Smith',
'john.smith@example.com',
'408-237-2345'
),
(
'Jane',
'Smith',
'jane.smith@example.com',
'408-237-2344'
),
(
'Alex',
'Smith',
'alex.smith@example.com',
'408-237-2343'
);

Выполнить запрос ко всем строкам в таблице contacts, используя инструкцию SELECT:

SELECT * FROM contacts;

Пример вывода результата выполнения запроса:

              contact_id              | first_name | last_name |         email          |    phone     
--------------------------------------+------------+-----------+------------------------+--------------
4b92898b-ac3e-4120-b623-6b168294e442 | John | Smith | john.smith@example.com | 408-237-2345
34d4babb-e443-4bea-9005-93806e9a14d5 | Jane | Smith | jane.smith@example.com | 408-237-2344
f5b1fd1f-4515-415f-a3fd-56c31d56bc37 | Alex | Smith | alex.smith@example.com | 408-237-2343
(3 rows)

В результате столбец contact_id заполнен значениями UUID, сгенерированными функцией uuid_generate_v4().

Ссылки на документацию разработчика

Исходная документация PosgreSQL по модулю uuid-ossp: https://www.postgresql.org/docs/15/uuid-ossp.html.