uuid-ossp

Модуль uuid-ossp предоставляет функции для генерирования универсальных уникальных идентификаторов (UUID) по одному из нескольких стандартных алгоритмов. Также в нем есть функции, выдающие определенные специальные константы UUID. Этот модуль необходим только в случае специальных требований module за пределами функциональности, доступной в ядре QHB. Встроенные в ядро способы генерирования UUID см. в разделе Функции генерирования UUID.

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


Функции uuid-ossp

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

Таблица 33. Функции для генерирования UUID

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

Таблица 34. Функции, возвращающие константы UUID

Функция
Описание
uuid_nil () → uuid
Возвращает «нулевую» константу UUID, которая не считается настоящим UUID.
uuid_ns_dns () → uuid
Возвращает константу, обозначающую пространство имен DNS для UUID.
uuid_ns_url () → uuid
Возвращает константу, обозначающую пространство имен URL для UUID.
uuid_ns_oid () → uuid
Возвращает константу, обозначающую пространство имен идентификаторов объектов ISO (OID, object identifier) для UUID. (Здесь имеются в виду OID ASN.1, которые не имеют отношения к OID, используемым в QHB.)
uuid_ns_x500 () → uuid
Возвращает константу, обозначающую пространство имен с различаемыми именами (DN, distinguished name) X.500 для UUID.

Сборка uuid-ossp

Исторически этот модуль зависел от библиотеки OSSP UUID, что отразилось в его имени. Хотя библиотеку OSSP UUID все еще можно найти по адресу http://www.ossp.org/pkg/lib/uuid/, она плохо поддерживается и ее становится все сложнее портировать на более новые платформы. Поэтому теперь на некоторых платформах модуль uuid-ossp можно собирать без библиотеки OSSP. Во FreeBSD, NetBSD и некоторых других платформах на базе BSD подходящие функции создания UUID включены в корневую библиотеку libc. В Linux, macOS и некоторых других платформах подходящие функции предоставляются библиотекой libuuid, которая изначально пришла из проекта e2fsprogs (хотя в современном Linux она считается частью util-linux-g). Вызывая configure, укажите ключ --with-uuid=bsd, чтобы использовать функции BSD, или --with-uuid=e2fs, чтобы использовать libuuid из e2fsprogs, или --with-uuid=ossp, чтобы использовать библиотеку OSSP UUID. На конкретной платформе может быть установлено сразу несколько библиотек, поэтому configure не выбирает библиотеку автоматически.


Автор

Питер Эйзентраут (Peter Eisentraut), peter_e@gmx.net