Відповіді:
Викличте, DEFAULT
визначаючи стовпець, щоб викликати одну з функцій uSP- програми OSSP . Сервер Postgres автоматично викликає функцію кожного разу, коли вставляється рядок.
CREATE TABLE tbl
(
pkey UUID NOT NULL DEFAULT uuid_generate_v1() ,
CONSTRAINT pkey_tbl PRIMARY KEY ( pkey )
)
У той час як Postgres out-of-box підтримує збереження значень 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, перегляньте це питання, генеруючи v5 UUID. Що таке ім’я та простір імен? .
Для більш детального обговорення дивіться мій відповідь на подібне запитання та моє значення UUID від блогу JDBC до Postgres .
getObject()
ви також можете використовуватиUUID id = rs.getObject("uuid_", UUID.class);
uuid_generate_v1
або uuid_generate_v1mc
.
Лише невелике доповнення до дуже детальної відповіді Василя:
Оскільки в даний час більшість використовують pgcrypto , замість того , uuid_generate_v1()
ви можете використовувати gen_random_uuid()
для UUID Version 4 значення.
По-перше, увімкніть pgcrypto у своїх Postgres.
CREATE EXTENSION "pgcrypto";
Просто встановіть DEFAULT стовпця на
DEFAULT gen_random_uuid()