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_v1 | – | uuid | Генерирует UUID версии 1, включающий в себя MAC-адрес компьютера и текущее время. UUID такого типа может быть неприемлем в случае, когда важна конфиденциальность, поскольку раскрывает «личность» компьютера, создавшего идентификатор, и время этой операции |
uuid_generate_v1mc | – | uuid | Генерирует UUID версии 1, но вместо реального MAC-адреса компьютера подставляет случайный групповой MAC-адрес |
uuid_generate_v3 | namespace uuid ;name text . | uuid | Генерирует UUID версии 3 для заданного пространства имен UUID и указанного имени. Пространство имен задается одной из специальных констант, которые выдают функции uuid_ns_*() , возвращающие UUID-константы. Теоретически этот UUID может быть любым. Имя задает идентификатор в выбранном пространстве имен |
uuid_generate_v4 | – | uuid | Генерирует UUID версии 4, который полностью определяется случайными числами |
uuid_generate_v5 | namespace uuid ;name text . | uuid | Генерирует UUID версии 5, который похож на версию 3, но хеш рассчитывается по алгоритму SHA-1. Версия 5 предпочтительнее версии 3, так как SHA-1 безопаснее MD5 |
Функции, возвращающие UUID-константы:
Функция | Возвращаемое значение | Описание |
---|---|---|
uuid_nil | uuid | Выдает «нулевой» UUID, который не считается действительным UUID |
uuid_ns_dns | uuid | Выдает константу, обозначающую пространство имен DNS для UUID |
uuid_ns_url | uuid | Выдает константу, обозначающую пространство имен URL для UUID |
uuid_ns_oid | uuid | Выдает константу, обозначающую пространство имен идентификаторов объектов ISO (OID, ISO Object Identifier) для UUID |
uuid_ns_x500 | uuid | Выдает константу, обозначающую пространство имен с уникальными именами 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.