В Postgres 9.x для столбца типа UUID
как указать UUID, который будет сгенерирован автоматически в качестве значения по умолчанию для любой вставки строки?
источник
В Postgres 9.x для столбца типа UUID
как указать UUID, который будет сгенерирован автоматически в качестве значения по умолчанию для любой вставки строки?
Вызов DEFAULT
при определении столбца для вызова одной из функций USSID OSSP . Сервер Postgres будет автоматически вызывать функцию каждый раз, когда вставляется строка.
CREATE TABLE tbl
(
pkey UUID NOT NULL DEFAULT uuid_generate_v1() ,
CONSTRAINT pkey_tbl PRIMARY KEY ( pkey )
)
Если вы уже используете расширение pgcrypto , рассмотрите вариант ответа от bpieck .
В то время как Postgres « из коробки» поддерживает сохранение значений UUID (универсального уникального идентификатора) в их собственной 128-битной форме, для генерации значений UUID требуется подключаемый модуль. В Postgres плагин известен как extension
.
Чтобы установить расширение, позвоните CREATE EXTENSION
. Чтобы избежать переустановки, добавьте IF NOT EXISTS
. См. Мой пост в блоге для более подробной информации или эту страницу в StackOverflow .
Расширение, которое мы хотим, это библиотека с открытым исходным кодом, встроенная в C для работы с UUID, OSSP uuid . Сборки этой библиотеки для Postgres часто в комплекте с установкой Postgres , таких как графические монтажников предоставляемые по Enterprise DB или включенных облачных провайдеров , таких как Amazon RDS для PostgreSQL .
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
См . Документацию к расширению, чтобы увидеть список нескольких команд, предлагаемых для генерации различных типов значений UUID. Чтобы получить оригинальную версию UUID, созданную на основе MAC-адреса компьютера, а также текущей даты и времени плюс небольшое случайное значение, позвоните uuid_generate_v1()
.
SELECT uuid_generate_v1();
672124b6-9894-11e5-be38-001d42e813fe
Более поздние вариации на эту тему были разработаны для альтернативных типов UUID. Некоторые люди могут не захотеть записывать фактический MAC-адрес сервера, например, из соображений безопасности или конфиденциальности. Расширение Postgres генерирует пять типов UUID, плюс «нулевой» UUID 00000000-0000-0000-0000-000000000000
.
Этот вызов метода может быть сделан автоматически для генерации значения по умолчанию для любой вновь вставленной строки. При определении столбца укажите:
DEFAULT uuid_generate_v1()
См. Эту команду, использованную в следующем примере определения таблицы.
CREATE TABLE public.pet_
(
species_ text NOT NULL,
name_ text NOT NULL,
date_of_birth_ text NOT NULL,
uuid_ uuid NOT NULL DEFAULT uuid_generate_v1(), -- <====
CONSTRAINT pet_pkey_ PRIMARY KEY (uuid_)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.pet_
OWNER TO postgres;
UUID-OSSP плагин может генерировать различные версии UUID .
uuid_generate_v1()
uuid_generate_v1mc()
uuid_generate_v3( namespace uuid, name text )
uuid_generate_v4()
uuid_generate_v5( namespace uuid, name text )
uuid_nil()
00000000-0000-0000-0000-000000000000
. Используется как флаг для неизвестного значения UUID. Известный как ноль UUID .Для сравнения типов см. Вопрос, какую версию UUID использовать?
Если вам интересно узнать о версиях 3 и 5, см. Этот вопрос, « Генерация UUID v5». Что такое имя и пространство имен? ,
Для получения дополнительной информации см. Мой ответ на аналогичный вопрос и значения UUID в моем блоге от JDBC до Postgres .
getObject()
вы также можете использоватьUUID id = rs.getObject("uuid_", UUID.class);
uuid_generate_v1
илиuuid_generate_v1mc
.расширение pgcrypto
Просто небольшое дополнение к очень подробному ответу Василия:
Поскольку в настоящее время большинство используют pgcrypto , вместо того ,
uuid_generate_v1()
вы можете использоватьgen_random_uuid()
для UUID Version 4 значения.Сначала включите pgcrypto в своем Postgres.
CREATE EXTENSION "pgcrypto";
Просто установите DEFAULT столбца в
DEFAULT gen_random_uuid()
источник