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.