relate perguntas
-
Posso ativar o PITR depois que o banco de dados foi usado
-
Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo
-
Os procedimentos armazenados impedem a injeção de SQL?
-
Sequências Biológicas do UniProt no PostgreSQL
-
Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?
tl; dr
Chame
DEFAULT
ao definir uma coluna para invocar uma das funções uuid do OSSP . O servidor Postgres invocará automaticamente a função toda vez que uma linha for inserida.Se você já usa a extensão pgcrypto , considere a resposta por bpieck .
Plugin necessário para gerar UUID
Embora o Postgres pronto para uso suporte 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 uma extensão, ligue para
CREATE EXTENSION
. Para evitar a reinstalação, adicioneIF 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 construída em C para trabalhar com UUIDs, OSSP uuid . Uma compilação dessa biblioteca para Postgres geralmente é empacotada com uma instalação do Postgres, como os instaladores gráficos fornecidos pelo Enterprise DB ou incluídos por provedores de nuvem, como Amazon RDS for PostgreSQL .
Gerando vários tipos de UUID
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 mais a data e hora atual mais um pequeno valor aleatório, chame
uuid_generate_v1()
.Variações posteriores sobre este 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 Postgres gera cinco tipos de UUIDs, mais o UUID “nil”
00000000-0000-0000-0000-000000000000
.UUID como valor padrão
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:
Veja esse comando usado na definição de tabela de exemplo a seguir.
Versões de UUID
O plugin uuid-ossp pode gerar várias versões do UUID .
uuid_generate_v1()
Contém o endereço MAC do computador atual + momento atual. Comumente usado, mas evite se você for sensível em divulgar o MAC do seu servidor de banco de dados ou a hora em que esse valor foi gerado. Definido por especificação como um UUID da Versão 1 .
uuid_generate_v1mc()
Como a versão 1 , mas com um endereço MAC multicast aleatório em vez do endereço MAC real. Aparentemente, uma maneira de usar a versão 1, mas substituindo outro MAC em vez do MAC real do seu servidor de banco de dados, se você for sensível em divulgar esse fato.
O que é um 'MAC multicast aleatório'? Eu não sei exatamente . Depois de ler a seção 4.1.6 da RFC 4122 , eu suspeito que este é um número aleatório usado no lugar do MAC, mas com bits definidos para indicar um endereço MAC multicast em vez do unicast usual, de modo a distinguir esta variação da versão 1 de um usual real-MAC versão 1 UUID.
uuid_generate_v3( namespace uuid, name text )
Contém um hash MD5 de texto que você fornece. Definido pela especificação como um UUID da Versão 3 , UUID baseado em namespace .
uuid_generate_v4()
Baseado em dados gerados aleatoriamente para 121-122 dos 128 bits. Seis ou sete bits usados para indicar Versão e Variante. Esse tipo de UUID só é prático se implementado com um gerador aleatório criptograficamente forte . Definido por especificação como um UUID da Versão 4 .
uuid_generate_v5( namespace uuid, name text )
Igual à versão 3, mas usando hash SHA1 . Definido por especificação como Versão 5 UUID .
uuid_nil()
Um caso especial, todos os bits definidos como zero
00000000-0000-0000-0000-000000000000
. Usado como um sinalizador para um valor UUID desconhecido. Conhecido como um UUID nulo .Para comparar os tipos, consulte a pergunta, qual versão de UUID usar?
Se você estiver interessado apenas na versão 4 (gerada aleatoriamente) e já estiver usando pgcrypto , veja a resposta por bpieck .
Se você estiver curioso sobre as versões 3 e 5, consulte esta pergunta, Gerando o UUID v5. O que é nome e namespace? .
Para obter mais discussões, consulte minha resposta a uma pergunta semelhante e meus valores UUID de postagem de blog de JDBC para Postgres .
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_v4()
você pode usargen_random_uuid()
um valor UUID da Versão 4 .Primeiro, habilite o pgcrypto no seu Postgres.
Basta definir DEFAULT de uma coluna para
Se estiver usando o Postgres 14 ou mais recente, você não precisa de modificações ou plugins extras e pode apenas usar
gen_random_uuid()
acabei de testar no AWS Aurora Serverless v2 padrão com Postgres v14
ps, você pode ver que meu ID padrão é na verdade com prefixo
wor-
enquanto é o ID do espaço de trabalho. Eu adiciono prefixos a todas as tabelas para que quando recebo ID de qualquer lugar - logs, suporte, etc., posso dizer exatamente o que procurar.concat('wor-', gen_random_uuid())