Jak w Postgres 9.x dla kolumny typu UUID
, jak określić UUID, który ma być generowany automatycznie jako wartość domyślna dla dowolnej wstawki wiersza?
źródło
Jak w Postgres 9.x dla kolumny typu UUID
, jak określić UUID, który ma być generowany automatycznie jako wartość domyślna dla dowolnej wstawki wiersza?
Wywołaj DEFAULT
podczas definiowania kolumny, aby wywołać jedną z funkcji uuid OSSP . Serwer Postgres będzie automatycznie wywoływał funkcję przy każdym wstawieniu wiersza.
CREATE TABLE tbl
(
pkey UUID NOT NULL DEFAULT uuid_generate_v1() ,
CONSTRAINT pkey_tbl PRIMARY KEY ( pkey )
)
Chociaż Postgres po wyjęciu z pudełka obsługuje przechowywanie wartości UUID (Universally Unique Identifier) w natywnej 128-bitowej formie, generowanie wartości UUID wymaga wtyczki. W Postgres wtyczka jest znana jako extension
.
Aby zainstalować rozszerzenie, zadzwoń CREATE EXTENSION
. Aby uniknąć ponownej instalacji, dodaj IF NOT EXISTS
. Zobacz mój post na blogu, aby uzyskać więcej informacji lub zobacz tę stronę w StackOverflow .
Rozszerzenie, którego chcemy, to biblioteka typu open source wbudowana w C do pracy z UUID, OSU uuid . Build tej biblioteki dla PostgreSQL jest często powiązane z instalacji PostgreSQL takie jak graficznych instalatorów dostarczonych przez Enterprise DB lub zawartych przez dostawców cloud, takich jak Amazon RDS dla PostgreSQL .
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Zobacz dokument rozszerzenia, aby zobaczyć listę wielu poleceń oferowanych do generowania różnego rodzaju wartości UUID. Aby uzyskać oryginalną wersję UUID zbudowaną z adresu MAC komputera oraz bieżącej daty i godziny oraz małej wartości losowej, zadzwoń uuid_generate_v1()
.
SELECT uuid_generate_v1();
672124b6-9894-11e5-be38-001d42e813fe
Późniejsze wersje tego tematu zostały opracowane dla alternatywnych rodzajów UUID. Niektóre osoby mogą nie chcieć rejestrować rzeczywistego adresu MAC serwera, na przykład ze względów bezpieczeństwa lub prywatności. Rozszerzenie Postgres generuje pięć rodzajów UUID oraz UUID „zero” 00000000-0000-0000-0000-000000000000
.
To wywołanie metody może być wykonane automatycznie w celu wygenerowania wartości domyślnej dla każdego nowo wstawionego wiersza. Podczas definiowania kolumny określ:
DEFAULT uuid_generate_v1()
Zobacz to polecenie użyte w poniższej przykładowej definicji tabeli.
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 Wtyczka może generować różne wersje 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
. Używany jako flaga dla nieznanej wartości UUID. Znany jako zero UUID .Aby porównać typy, zobacz Pytanie, której wersji UUID użyć?
Jeśli jesteś ciekawy wersji 3 i 5, zobacz to pytanie, Generowanie UUID v5. Co to jest nazwa i przestrzeń nazw? .
Aby uzyskać więcej dyskusji, zobacz moją odpowiedź na podobne pytanie i mój blog wpisuje wartości UUID od JDBC do Postgres .
getObject()
możesz użyćUUID id = rs.getObject("uuid_", UUID.class);
uuid_generate_v1
albouuid_generate_v1mc
.rozszerzenie pgcrypto
Mały dodatek do bardzo szczegółowej odpowiedzi Bazylego:
Ponieważ obecnie większość używa pgcrypto , zamiast
uuid_generate_v1()
ciebie możesz użyć wartości UUIDgen_random_uuid()
w wersji 4 .Najpierw włącz pgcrypto w swoim Postgresie.
CREATE EXTENSION "pgcrypto";
Wystarczy ustawić DOMYŚLNE kolumny na
DEFAULT gen_random_uuid()
źródło