O banco PostgreSQL é um banco objeto-relacional, conhecido por sua estabilidade e larga lista de funcionalidades, das quais incluo:
- Suporte a transações (dãã).
- Triggers (dãã) .
- Backups quentes, incrementais (PITR), robustos e em saída SQL opcional.
- Stored Procedures: em linguagem PL/Pgsql, ou em um vasto número de linguagens plugins.
- Suporte a XML e JSON!
- Plugin de geoprocessamento disponível (PostGis).
- Pode importar e exportar CSV.
- Replicação.
- Commit assíncrono (asynchronous commit).
- Foreign Data Wrappers (FDW).
- Full Text Search (FTS) com dois algoritmos de índice diferentes (GIN e GiST).
As versões mais novas melhoraram muito no quesito performance e escalabilidade, e também a popularidade desse banco aumentou nos últimos anos.
A configuração do PostgreSQL pode melhorar em muito sua performance, e chega a assustar quem acredita na sua fama de ser um banco pesado.
Os parâmetros de memória ficam no arquivo postgresql.conf, há alguns que destaco:
- shared_buffers = Memória compartilhada do banco. Existe apenas um buffer desse em todo o sistema (ele é compartilhado). Em média 25% de toda a RAM do computador. No Linux, em versões antes do 9.3, você terá também que setar um parâmetro de memória com sysctl -w kernel.shmmax=XXXXXXXXXX.
- checkpoint_segments = Número de arquivos de segmentos de checkpoint. Quando há escrita intensa, o banco dá um "travadinha" e o arquivo de log do servidor dá uma mensagem para aumentar esse parâmetro. Nesse caso aumente o valor desse parâmetro de 3 para algo como X = shared_buffers/16MB.
- maitenance_work_mem = Memória usada para operações de DDL, como ALTER TABLE, CREATE INDEX. É usada essa quantia apenas durante essas operações.
- work_mem = Memória usada para operações de ORDER BY, etc. Cada conexão usa um buffer desses.
- temp_buffers = Memória usada para tabelas temporárias, etc.Cada conexão usa um buffer desses;