Ao projetarmos bancos de dados, a escolha do tipo de chave primária é fundamental. Embora os inteiros sequenciais sejam a opção mais comum, muitas vezes precisamos de um identificador mais seguro, único em nível global e difícil de adivinhar. É aqui que entram os UUIDs (Universally Unique Identifier), que oferecem uma solução robusta para gerar identificadores únicos em sistemas distribuídos.
Um UUID (Identificador Universalmente Único) é um número de 128 bits usado para identificar de forma única informações em um sistema distribuído. Ele é definido no padrão RFC 4122 e representado como uma cadeia de texto hexadecimal dividida em cinco grupos separados por hifens, como este:
550e8400-e29b-41d4-a716-446655440000
Um UUID tem as seguintes vantagens:
Existem vários tipos de UUID, sendo os mais comuns:
Para trabalhar com UUIDs no PostgreSQL, precisamos habilitar uma extensão especial que facilita seu uso. A seguir, explicamos como configurá-la e utilizá-la passo a passo.
Primeiro, certifique-se de ter acesso a um banco de dados PostgreSQL. Você pode criar um novo banco de dados, se necessário:
CREATE DATABASE meu_banco_de_dados;
Depois, conecte-se ao banco de dados:
psql -d meu_banco_de_dados
uuid-ossp
Para gerar UUIDs dentro do PostgreSQL, é necessário habilitar a extensão uuid-ossp. Esta extensão fornece funções para criar UUIDs diretamente em consultas SQL.
Execute o seguinte comando para habilitar a extensão:
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Com a extensão habilitada, podemos utilizar o tipo de dado UUID em nossas tabelas. Aqui está um exemplo de como criar uma tabela com um campo UUID como chave primária:
CREATE TABLE usuarios (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
nome VARCHAR(100),
email VARCHAR(100)
);
Neste exemplo:
id é o campo do tipo UUID, que serve como chave primária.
uuid_generate_v4() gera automaticamente um UUID da versão 4 (baseado em valores aleatórios) sempre que um novo registro é inserido.
O PostgreSQL oferece várias funções para gerar UUIDs de diferentes versões. Essas funções estão disponíveis na extensão uuid-ossp:
uuid_generate_v1(): Gera um UUID baseado no timestamp e no endereço MAC.
uuid_generate_v4(): Gera um UUID aleatório, sendo o mais utilizado para garantir unicidade sem dependência de hardware.
uuid_generate_v5(namespace, name): Gera um UUID baseado em um nome e um namespace, útil para garantir unicidade dentro de um contexto específico.
Agora, vejamos como inserir registros na tabela usuarios que criamos anteriormente:
INSERT INTO usuarios (nome, email)
VALUES ('João Silva', 'joao.silva@email.com');
O campo id será preenchido automaticamente com um UUID gerado pela função uuid_generate_v4().
Os UUIDs funcionam como qualquer outro tipo de dado nas consultas SQL. Aqui estão alguns exemplos de uso:
Para selecionar todos os registros da tabela usuarios:
SELECT * FROM usuarios;
Para selecionar um registro específico por seu UUID:
SELECT * FROM usuarios WHERE id = '550e8400-e29b-41d4-a716-446655440000';
Se desejar atualizar um registro baseado no UUID:
UPDATE usuarios
SET nome = 'João Carlos Silva'
WHERE id = '550e8400-e29b-41d4-a716-446655440000';
Para excluir um registro por UUID:
DELETE FROM usuarios
WHERE id = '550e8400-e29b-41d4-a716-446655440000';
O uso de UUID no PostgreSQL é uma excelente opção para sistemas que requerem identificadores únicos e distribuídos. Com a extensão uuid-ossp, o PostgreSQL torna a geração e gestão de UUIDs simples e eficiente. No entanto, é importante considerar as desvantagens em termos de desempenho e armazenamento e avaliar se o uso de UUIDs é a melhor solução para o seu projeto.
Com este guia, você está pronto para começar a usar UUIDs no PostgreSQL. Se trabalha com sistemas distribuídos, eles são uma ferramenta inestimável para garantir a unicidade e integridade dos dados.
Jorge García
Fullstack developer