A Pegadinha do Auto-Incremento: Como o SERIAL do PostgreSQL se compara a outros SGBDs
Source: Dev.to
🐘 O que é o SERIAL no PostgreSQL?
A primeira coisa que você precisa saber e que “buga” a cabeça de muita gente: o SERIAL não é um tipo de dado real. Ele é uma “pseudo‑tipagem”, um atalho de conveniência que o Postgres criou para facilitar a nossa vida. Quando você define uma coluna como SERIAL, o banco de dados faz três coisas automaticamente por debaixo dos panos:
- Cria um objeto gerador de números chamado
SEQUENCE. - Define o tipo real da sua coluna como
INTEGER. - Adiciona uma restrição
DEFAULTna coluna, dizendo que, se você não enviar um ID no seuINSERT, o banco deve puxar o próximo número gerado pela sequência (1, 2, 3…).
Exemplo na prática (PostgreSQL)
CREATE TABLE funcionario (
id SERIAL PRIMARY KEY,
nome VARCHAR(255),
data_admissao DATE
);
🌍 Como o Auto‑Incremento funciona em outros Bancos?
O SQL tem um padrão universal (ANSI), mas na hora de criar IDs automáticos, cada fabricante decidiu seguir o seu próprio caminho. Veja como a mesma tabela seria criada nos principais SGBDs:
1. MySQL e MariaDB (O Clássico)
CREATE TABLE funcionario (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(255),
data_admissao DATE
);
2. SQL Server / T‑SQL (O Jeito Microsoft)
CREATE TABLE funcionario (
id INT IDENTITY(1,1) PRIMARY KEY,
nome VARCHAR(255),
data_admissao DATE
);
3. Oracle (A Evolução)
CREATE TABLE funcionario (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nome VARCHAR2(255),
data_admissao DATE
);
4. SQLite (O Simples e Local)
CREATE TABLE funcionario (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT,
data_admissao DATE
);
🎯 Conclusão
Entender que o SQL tem suas “gírias locais” dependendo do SGBD é o que separa um iniciante de um desenvolvedor mais maduro (e salva a sua pele em provas de concurso ou testes técnicos de vagas).
Na próxima vez que o seu script falhar ao trocar de banco de dados, lembre‑se de checar como aquele sistema específico prefere chamar as coisas!