Desenvolver uma aplicação em PHP com PostgreSQL é uma combinação interessante, pois permite criar apps web escaláveis e de alta performance, bem como serviços, jobs, etc. Mas na maioria das vezes o uso fica limitado a conectar, executar um SQL e desconectar do banco de dados. Porém a extensão PostgreSQL para PHP implementa uma série de recursos interessantes: queries assincronas, notificação assincrona, bulk load, BLOBs, cursores, consultas preparadas, etc. Veremos um pouco desses recursos. Palestra apresentada na PHP Conference 2017 em Osasco/SP
16. <?php
$dbconn = pg_connect($DSN);
pg_query($dbconn, "CREATE TABLE bar (a INT4, b CHAR(16), d
NUMERIC)");
pg_query($dbconn, "COPY bar FROM stdin");
pg_put_line($dbconn, "3thello worldt4.5n");
pg_put_line($dbconn, "4tgoodbye worldt7.11n");
pg_put_line($dbconn, ".n");
pg_end_copy($dbconn);
?>
17. Dica “Unlogged Tables”
• tipo especial de tabela que não gera Logs de Transação
• tornam operações de escrita muito performática
• não são “crash-safe”
• não replicam pois não geram Logs de Transação
• se combinado com COPY em alguns cenários pode ser de
10x a 100x mais (ou mais) rápido que INSERT em tabela
regular
24. Debug através dos Logs
log_line_prefix = '%t [%p]: [%l-1] db=%d,user=%u,app=%a,client=%h '
log_lock_waits = on
log_min_duration_statement = 0
log_connections = on
log_disconnections = on
http://www.savepoint.blog.br/2015/01/20/trabalhando-com-logs-no-postgresql/
25. pgBadger
● ferramenta análise de logs
● descobrir queries lentas/frequentes
● bloqueios (locks)
● estatísticas de acessos e execução de queries
● estatísticas sobre vacuum/analyze
● uso de arquivos temporários
● sessões, checkpoints, ...
26. pgbouncer
● pool de conexões
○ session, transaction, statement
● uma espécie de “database proxy”
● dica: use com haproxy para criar um cluster “read-only” com
distribuição de carga
27. pREST
● Transforma seu PostgreSQL em uma API REST
● Mantém um pool interno de conexões
● Além de operações CRUD sobre uma relação
○ junções
○ execução de scripts SQL armazenados servidor
https://postgres.rest