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

uuid-ossp — генератор UUID

примечание

Эта страница переведена при помощи нейросети GigaChat.

Модуль uuid-ossp предоставляет функции для генерации универсально уникальных идентификаторов (UUID) с использованием различных стандартных алгоритмов. Также в модуле есть функции для создания специальных констант UUID. Этот модуль требуется только в случаях, когда базовые возможности PostgreSQL недостаточны. Для встроенных способов генерации UUID смотрите раздел 9.14.

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

uuid-ossp

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

Функции для генерации UUID:

ФункцияОписание
uuid_generate_v1() → uuidГенерирует версию 1 UUID.
Это включает MAC-адрес компьютера и временную метку.
Обратите внимание, что UUID этого типа раскрывают идентичность компьютера, который создал идентификатор, и время его создания, что может сделать его неподходящим для некоторых приложений, чувствительных к безопасности.
uuid_generate_v1mc() → uuidГенерирует версию 1 UUID, но использует случайный многоадресный MAC-адрес вместо реального MAC-адреса компьютера.
uuid_generate_v3(namespace uuid, name text) → uuidГенерирует версию 3 UUID в указанном пространстве имен с использованием указанного имени ввода.
Пространство имен должно быть одной из специальных констант, производимых функциями uuid_ns_*().
(В теории это мог бы быть любой UUID.) Имя — это идентификатор в выбранном пространстве имен.
Пример:
SELECT uuid_generate_v3(uuid_ns_url(), 'http://www.postgresql.org');
Параметр имени будет хеширован с использованием MD5, поэтому исходный текст не может быть получен из сгенерированного UUID.
Генерация UUID этим методом не содержит случайных или зависящих от среды элементов и поэтому воспроизводима.
uuid_generate_v4() → uuidГенерирует версию 4 UUID, которая полностью основана на случайных числах.
uuid_generate_v5(namespace uuid, name text) → uuidГенерирует версию 5 UUID, который работает так же, как версия 3 UUID, за исключением того, что 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Возвращает константу пространства имен OID для UUID (OID ASN.1).
uuid_ns_x500() → uuidВозвращает константу пространства имен X.500 (DN) для UUID.

Построение uuid-ossp

Модуль исторически зависит от библиотеки OSSP UUID, именно поэтому он называется uuid-ossp. Несмотря на то, что эта библиотека еще доступна по адресу http://www.ossp.org/pkg/lib/uuid/, поддержка ее ухудшается, и адаптация к новым платформам становится сложнее.

Сейчас модуль uuid-ossp может собираться без самой библиотеки OSSP на ряде современных платформ. Например:

  • В операционных системах семейства FreeBSD и других, основанных на BSD, необходимые функции генерации UUID уже интегрированы в стандартную библиотеку libc.
  • В Linux, macOS и ряде других ОС нужные функции предоставлены библиотекой libuuid, первоначально заимствованной из проекта e2fsprogs (ныне входит в состав пакета util-linux-ng).

Чтобы выбрать нужную реализацию при сборке, используйте команду configure с соответствующими параметрами:

  • Параметр --with-uuid=bsd: выбираем реализацию функций UUID из стандартной библиотеки libc (FreeBSD/BSD-подобные системы);
  • Параметр --with-uuid=e2fs: задействуем библиотеку libuuid из проекта e2fsprogs/util-linux-ng (Linux/macOS);
  • Параметр --with-uuid=ossp: собираемся использовать оригинальную библиотеку OSSP UUID.

Поскольку на одном устройстве могут одновременно присутствовать разные библиотеки UUID, автоматический выбор нужной отсутствует, и придется вручную указывать подходящую реализацию.