depurando pl/pgsql com omnidb · depurador o que faz? executar trechos de código pausadamente...
TRANSCRIPT
![Page 1: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/1.jpg)
DepurandoPL/pgSQL
comOmniDB
![Page 2: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/2.jpg)
Conceitos
Requerimentos
Alternativas
Depurador OmniDB
Demonstração
Próximos Passos
Sumário
![Page 3: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/3.jpg)
OmniDB
![Page 4: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/4.jpg)
2.3 - 02/11/17Depurador PL/pgSQL
2.4 - 07/12/17Monitoramento
2.5 - 12/02/18OraclePainel DDL/Propriedades
2.6 - 15/03/18 Aba consoleExportar queries
2.7 - 12/04/18MySQL
2.8 - 17/05/18Túnel SSH
2.9 - 19/06/18Busca avançada de objetos
2.10 - 26/07/18Foreign Data Wrappers
Sistema de Plugins
Evolução
![Page 5: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/5.jpg)
PL/pgSQL
Linguagem procedural para PostgreSQL
Variáveis
Estruturas de controle para criar lógicas complexas
Criação de funções e procedimentos (PostgreSQL 11)
![Page 6: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/6.jpg)
Depurador
O que faz?
Executar trechos de código pausadamente
Monitorar valores de variáveis durante o processo
Objetivos
Analisar fluxo de andamento do código
Achar bugs
Encontrar gargalos no corpo da função
![Page 7: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/7.jpg)
Depurador
![Page 8: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/8.jpg)
Depurador PL/pgSQL
Execução de funções PL/pgSQL ocorre dentro do PostgreSQL
Perguntas:
Como pausar a execução de uma função PL/pgSQL?
Como enviar breakpoints para uma função PL/pgSQL?
Como recuperar valores de variáveis?
![Page 9: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/9.jpg)
PostgreSQL Hooks
Bibliotecas externas carregadas pelo PostgreSQL
Interrompem ou modificam rotinas padrões
Hooks para diversos fins:
Autenticação
Logs
Início e fim de queries
PL/pgSQL - início/fim de funções e de cada linha presente nelas
![Page 10: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/10.jpg)
AlternativasPgadmin
![Page 11: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/11.jpg)
AlternativasPgadmin
Funcionalidades
Execução passo a passo ou com breakpoints
Tabela de variáveis
Pilha de execução
Requerimentos
Necessário ser superuser para usar o depurador
Plugin: plugin_debugger.so
Extensão: pldbgapi
![Page 12: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/12.jpg)
AlternativasPgadmin
![Page 13: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/13.jpg)
AlternativasDBeaver
Utiliza mesmos plugin e extension do Pgadmin
![Page 14: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/14.jpg)
Depurador OmniDBMotivações
Controle sobre funcionalidades e desenvolvimento
Garantia de continuidade
![Page 15: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/15.jpg)
Depurador OmniDBObjetivos
Implementar um depurador simples mas extensível
Utilizar apenas recursos do PostgreSQL (sem bibliotecas externas)
Funcionalidades do depurador:
Execução passo a passo ou com breakpoints
Tabela de variáveis
Estatísticas de execução de cada passo
![Page 16: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/16.jpg)
Depurador OmniDBDetalhes de Implementação
Utilizar Hooks de PL/pgSQL para controlar a depuração
Hooks devem pausar a cada linha da função e esperar comando do OmniDB
OmniDB deve dizer quando Hooks podem continuar execução
OmniDB e Hooks devem estar de alguma forma sincronizados. Como sincronizar?
![Page 17: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/17.jpg)
Depurador OmniDBAdvisory Locks
Locks adquiridos e gerenciados pelo usuário
Utilizados para emular estratégias de Lock na própria aplicação
Permite bloquear operações banco através de locks em tabelas e seus registros
Utilizado pelo depurador do OmniDB para sincronizar interface com hooks PL/pgSQL
![Page 18: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/18.jpg)
Depurador OmniDBAdvisory Locks
SELECT pg_advisory_lock(1) FROM tabela WHERE id = 1
.
.
SELECT pg_advisory_unlock(1) FROM tabela WHERE id = 1
SELECT pg_advisory_lock(1) FROM tabela WHERE id = 1
x
Conexão 1 Conexão 2
.
SELECT pg_advisory_lock(1) FROM tabela WHERE id = 1
x
x
.
.
1
2
3
4
5
6
![Page 19: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/19.jpg)
Depurador OmniDBTabelas de Controle
![Page 20: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/20.jpg)
Depurador OmniDBArquitetura
![Page 21: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/21.jpg)
Depurador OmniDBRequerimentos
Plugin: omnidb_plugin.so / omnidb_plugin.dll
Criação do schema com tabelas de controle
![Page 22: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/22.jpg)
Depurador OmniDBDemonstração...
![Page 23: Depurando PL/pgSQL com OmniDB · Depurador O que faz? Executar trechos de código pausadamente Monitorar valores de variáveis durante o processo Objetivos Analisar fluxo de andamento](https://reader031.vdocuments.pub/reader031/viewer/2022020205/5b9573f009d3f2205c8cca3c/html5/thumbnails/23.jpg)
Depurador OmniDBPróximos Passos...
Step Into (Depurar chamadas de funções dentro de funções)
Múltiplos Breakpoints
Call Stack (pilha de chamadas)
Call Graph (grafo de chamadas)
Alterar valores de variáveis
Depuração de procedures (PostgreSQL 11)