PostgreSQL é o banco relacional mais avançado e open-source. ACID completo, JSON nativo, extensões poderosas. Usado por Instagram, Spotify e Uber.
Conceitos Principais
ACID Transactions
Atomicity, Consistency, Isolation, Durability. BEGIN, COMMIT, ROLLBACK. Garante integridade.
Data Types
Primitivos (INT, VARCHAR), JSON/JSONB, Arrays, ENUM, UUID. Rich type system.
Índices
B-tree (default), Hash, GiST, GIN. Acelera queries. CREATE INDEX ON users(email).
Extensions
PostGIS (geo), pg_stat_statements (monitoring), uuid-ossp. Extensível.
Passo a Passo
- Instale PostgreSQL: Mac: brew install postgresql. Linux: apt install postgresql. Docker: docker run -p 5432:5432 postgres:15.
- Crie Database: psql: CREATE DATABASE myapp; \c myapp; CREATE TABLE users (id SERIAL PRIMARY KEY, email VARCHAR UNIQUE, created_at TIMESTAMP DEFAULT NOW());
- CRUD Básico: INSERT INTO users (email) VALUES ('user@test.com'); SELECT * FROM users WHERE email = '...'; UPDATE users SET email = '...' WHERE id = 1; DELETE FROM users WHERE id = 1;
- Transactions: BEGIN; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT;
- Node.js Integration: npm install pg. const { Pool } = require('pg'); const pool = new Pool({ connectionString: 'postgresql://...' }); const result = await pool.query('SELECT * FROM users');
Boas Praticas
Recomendacoes
• Use SERIAL ou UUID para primary keys
• Índices em foreign keys e WHERE clauses
• Parametrized queries (previne SQL injection)
• Connection pooling
• Regular VACUUM e ANALYZE
• Backup automático diário
Erros Comuns
Evite estes erros
• String concatenation em queries (SQL injection)
• Sem índices (queries lentas)
• N+1 queries (use JOINs)
• Não usar transactions
• Default config em produção (tune isso)
Checklist
- PostgreSQL instalado
- Database e tabelas criadas
- CRUD funcionando
- Transactions testadas
- Connection pool configurado
- Backup automático ativo