Características Principais
PostgreSQL é um sistema de gerenciamento de banco de dados relacional de código aberto, destacando-se por sua escalabilidade, concorrência e confiabilidade. Principais aspectos:
- Código aberto: Desenvolvimento comunitário ativo e livre modificação
- Escalabilidade: Suporte a replicação em fluxo, tabelas particionadas e consultas paralelas
- Controle de concorrência: Utiliza MVCC (Multiversion Concurrency Control) para evitar bloqueios
- Tipos de dados: Oferece JSON, geometria, redes, arrays e tipos personalizados
- Conectividade: Drivers para Java, Python, C++ e múltiplos protocolos de conexão
Instalação em Linux
Procedimento básico para configuração inicial:
-
Atualize o sistema:
sudo apt update && sudo apt upgrade -
Instale via repositório: ``` sudo apt install postgresql postgresql-contrib sudo systemctl start postgresql
-
Crie usuário administrativo: ``` sudo -u postgres createuser --interactive sudo -u postgres createdb meu_banco
-
Habilite acesso remoto: ```
Em postgresql.conf
listen_addresses = '*'
Em pg_hba.conf
host all all 0.0.0.0/0 md5
Conceitos Fundamentais
- Estrutura: Bancos → Esquemas → Tabelas
- Transações: Garantem ACID (Atomicidade, Consistência, Isolamento, Durabilidade)
- Índices: Aceleram buscas em colunas frequentes
- Visões: Tabelas virtuais baseadas em consultas
- Segurança: Controle granular via roles e permissões
Técnicas Avançadas
- Replicação: Configuração de clusters com replicação em fluxo
- Otimização: Ajuste de parâmetros shared_buffers e work_mem
- Particionamento: Divisão de tabelas grandes por intervalo ou lista
- JSONB: Armazenamento e indexação eficiente de documentos JSON
- Backup PITR: Recuperação pontual com WAL (Write-Ahead Logging)
Operações SQL Essenciais
Exemplos práticos de consultas:
-- Filtragem com WHERE
SELECT nome, salario FROM empregados WHERE departamento = 'TI';
-- Agregação com GROUP BY
SELECT departamento, AVG(salario) FROM empregados GROUP BY departamento;
-- Junção entre tabelas
SELECT p.nome, d.nome_dep
FROM pessoas p
JOIN departamentos d ON p.dep_id = d.id;
-- Consulta paginada
SELECT * FROM registros ORDER BY id LIMIT 50 OFFSET 100;
-- Manipulação JSONB
SELECT info->>'email' FROM usuarios WHERE info @> '{"status": "ativo"}';
Práticas Recomendadas
- Defina chaves primárias em todas as tabelas
- Utilize índices em filtros frequentes
- Monitore desempenho com EXPLAIN ANALYZE
- Implemente backups regulares com pg_dump
- Restrinja permissões pelo princípio do menor privilégio