No Postgres 9.x, para uma coluna do tipo UUID
, como especifico um UUID a ser gerado automaticamente como um valor padrão para qualquer inserção de linha?
fonte
No Postgres 9.x, para uma coluna do tipo UUID
, como especifico um UUID a ser gerado automaticamente como um valor padrão para qualquer inserção de linha?
Chame DEFAULT
ao definir uma coluna para chamar uma das funções uuid do OSSP . O servidor Postgres invocará automaticamente a função toda vez que uma linha for inserida.
CREATE TABLE tbl
(
pkey UUID NOT NULL DEFAULT uuid_generate_v1() ,
CONSTRAINT pkey_tbl PRIMARY KEY ( pkey )
)
Se você já usa a extensão pgcrypto , considere a resposta bpieck .
Enquanto o Postgres pronto para uso suporta o armazenamento de valores UUID (Universally Unique Identifier) em seu formato nativo de 128 bits , a geração de valores UUID requer um plug-in. No Postgres, um plug-in é conhecido como extension
.
Para instalar um ramal, ligue CREATE EXTENSION
. Para evitar a reinstalação, adicione IF NOT EXISTS
. Veja minha postagem no blog para obter mais detalhes ou consulte esta página no StackOverflow .
A extensão que queremos é uma biblioteca de código aberto criada em C para trabalhar com UUIDs, OSSP uuid . A compilação desta biblioteca para o Postgres é frequentemente empacotada com uma instalação do Postgres, como os instaladores gráficos fornecidos pelo Enterprise DB ou incluídos por provedores de nuvem como o Amazon RDS for PostgreSQL .
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Consulte o documento da extensão para ver uma lista de vários comandos oferecidos para gerar vários tipos de valores UUID. Para obter a versão original do UUID criada a partir do endereço MAC do computador, além da data e hora atuais e de um pequeno valor aleatório, ligue uuid_generate_v1()
.
SELECT uuid_generate_v1();
672124b6-9894-11e5-be38-001d42e813fe
Variações posteriores sobre esse tema foram desenvolvidas para tipos alternativos de UUIDs. Algumas pessoas podem não querer registrar o endereço MAC real do servidor, por exemplo, por questões de segurança ou privacidade. A extensão do Postgres gera cinco tipos de UUIDs, mais o UUID "nulo" 00000000-0000-0000-0000-000000000000
.
Essa chamada de método pode ser feita automaticamente para gerar um valor padrão para qualquer linha recém-inserida. Ao definir a coluna, especifique:
DEFAULT uuid_generate_v1()
Veja esse comando usado na seguinte definição de tabela de exemplo.
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;
O plugin uuid-ossp pode gerar várias versões do 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
. Usado como um sinalizador para um valor UUID desconhecido. Conhecido como um UUID nulo .Para comparar tipos, consulte a pergunta: qual versão do UUID usar?
Se você estiver curioso sobre as versões 3 e 5, consulte esta pergunta, Gerando U5 v5. O que é nome e espaço para nome? .
Para mais discussões, consulte minha resposta a uma pergunta semelhante e meu blog postar valores UUID do JDBC para o Postgres .
getObject()
você também pode usarUUID id = rs.getObject("uuid_", UUID.class);
uuid_generate_v1
ouuuid_generate_v1mc
.extensão pgcrypto
Apenas uma pequena adição à resposta muito detalhada de Basil:
Como atualmente a maioria está usando pgcrypto , em vez de
uuid_generate_v1()
você pode usargen_random_uuid()
para um valor UUID da versão 4 .Primeiro, ative o pgcrypto no seu Postgres.
CREATE EXTENSION "pgcrypto";
Basta definir DEFAULT de uma coluna como
DEFAULT gen_random_uuid()
fonte