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 |
Пример использования модуля:
SELECT uuid_generate_v1();
Пример вывода результата выполнения запроса:
Раскрыть type=sqluuid_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');
Пример вывода результата выполнения запроса:
Раскрыть type=sqluuid_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;
Пример вывода результата выполнения запроса:
Раскрыть type=sqlcontact_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()
.Дополнительную информацию по поставляемому модулю uuid-ossp можно получить по ссылке.