desbravando pg hooks - postgresql wiki · biblioteca externa escrita em c. pgconf.brasil 2019 hooks...
TRANSCRIPT
![Page 1: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/1.jpg)
Rafael Castro
Desbravando PG Hooks
![Page 2: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/2.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Sobre mim...
● Desenvolvedor (Python, C, …)● DBA PostgreSQL● Criador e mantenedor da ferramenta OmniDB
![Page 3: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/3.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Sumário
● Introdução a Hooks● Lista de Hooks● Exemplos Úteis● Depurador PL/pgSQL com Hooks● Plus: Background Workers
![Page 4: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/4.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Como customizar o PG?
![Page 5: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/5.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Como customizar o PG?● Funções / Procedimentos
![Page 6: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/6.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Como customizar o PG?● Funções / Procedimentos● Tipos
![Page 7: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/7.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Como customizar o PG?● Funções / Procedimentos● Tipos● Operadores
![Page 8: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/8.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Como customizar o PG?● Funções / Procedimentos● Tipos● Operadores● Agregadores
![Page 9: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/9.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Como customizar o PG?● Funções / Procedimentos● Tipos● Operadores● Agregadores● Extensões
![Page 10: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/10.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Como customizar o PG?● Funções / Procedimentos● Tipos● Operadores● Agregadores● Extensões● Ganchos (Hooks)
![Page 11: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/11.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Como customizar o PG?● Funções / Procedimentos● Tipos● Operadores● Agregadores● Extensões● Ganchos (Hooks)● BG Workers
![Page 12: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/12.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Hooks - Introdução
![Page 13: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/13.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Hooks - Introdução● Extender / Modificar / Interromper operações
![Page 14: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/14.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Hooks - Introdução● Extender / Modificar / Interromper operações● Biblioteca externa escrita em C
![Page 15: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/15.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Hooks - Introdução● Extender / Modificar / Interromper operações● Biblioteca externa escrita em C● Carregada com “shared_preload_libraries”
![Page 16: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/16.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Hooks - Implementação
![Page 17: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/17.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Hooks - Implementação● Ponteiros NULL espalhados pelo código-fonte do PG
src/backend/commands/user.c
![Page 18: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/18.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Hooks - Implementação● Bibliotecas apontam ponteiros para funções específicas
![Page 19: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/19.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Hooks - Implementação● Função _PG_init() chamada quando PG inicia
![Page 20: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/20.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Hooks - Implementação● PG_MODULE_MAGIC - Checagem de compatibilidade
![Page 21: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/21.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Hooks - Implementação● Função _PG_fini() chamada quando PG é desligado
![Page 22: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/22.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Hooks - Boas práticas● Bibliotecas devem coexistir em harmonia (encadeamento)
![Page 23: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/23.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Hooks - Boas práticas● Bibliotecas devem coexistir em harmonia
![Page 24: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/24.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Hooks - Boas práticas● Hooks que substituem devem chamar função original
![Page 25: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/25.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Tipos de Hooks
![Page 26: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/26.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Tipos de Hooks● Gerais
○ emit_log_hook: Chamado antes de escrever linha de log
○ shmem_startup_hook: Chamado após PG criar região de memória compartilhada
![Page 27: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/27.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Tipos de Hooks● Segurança
○ password_check_hook: Chamado ao executar CREATE ROLE or ALTER ROLE (para mudar senha)
○ ClientAuthentication_hook: Chamado após PG realizar autenticação de usuário (e antes de retornar ao cliente)
![Page 28: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/28.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Tipos de Hooks● Gerenciamento de funções
○ fmgr_hook: Chamado antes e logo depois de uma função ser executada (chamado 2x)
![Page 29: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/29.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Tipos de Hooks● Planejador
○ explain_get_index_name_hook: Chamado durante explain, para alterar o mecanismo de criação de nomes de índices fictícios
![Page 30: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/30.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Tipos de Hooks● Execução
○ ExecutorStart_hook: Chamado antes da execução de um planejamento de query
○ ProcessUtility_hook: Chamado antes da execução de operações do Process Utility, responsável pela execução de DDL
![Page 31: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/31.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Tipos de Hooks● PL/pgSQL
○ func_beg: Chamado antes da execução de uma função PL/pgSQL
○ stmt_beg: Chamado antes da execução de uma linha de comando do corpo de uma função PL/pgSQL
![Page 32: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/32.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Exemplos● Contrib: passwordcheck
![Page 33: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/33.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Exemplos● Michael Paquier: Superuser restrictions
![Page 34: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/34.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Exemplos● Contrib: auto explain
![Page 35: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/35.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador PL/pgSQL
![Page 36: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/36.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador PL/pgSQL● Depurar funções PL/pgSQL utilizando interface gráfica
![Page 37: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/37.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador PL/pgSQL● Depurar funções PL/pgSQL utilizando interface gráfica● Execução passo a passo
![Page 38: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/38.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador PL/pgSQL● Depurar funções PL/pgSQL utilizando interface gráfica● Execução passo a passo● Inserir Breakpoints
![Page 39: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/39.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador PL/pgSQL● Depurar funções PL/pgSQL utilizando interface gráfica● Execução passo a passo● Inserir Breakpoints● Visualizar variáveis
![Page 40: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/40.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador PL/pgSQL● Depurar funções PL/pgSQL utilizando interface gráfica● Execução passo a passo● Inserir Breakpoints● Visualizar variáveis● Estatísticas de execução
![Page 41: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/41.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador - Implementação● Utiliza-se Hooks PL/pgSQL
○ func_setup○ func_beg○ func_end○ stmt_beg○ stmt_end
![Page 42: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/42.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador - Implementação● Cliente 1 (PG backend)
![Page 43: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/43.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador - Implementação● Cliente 1 (PG backend)
○ Executa função a ser depurada
![Page 44: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/44.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador - Implementação● Cliente 1 (PG backend)
○ Executa função a ser depurada○ Pausa execução de cada linha com os Hooks
![Page 45: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/45.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador - Implementação● Cliente 1 (PG backend)
○ Executa função a ser depurada○ Pausa execução de cada linha com os Hooks○ Controla tabela de estatísticas e de variáveis
![Page 46: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/46.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador - Implementação● Cliente 1 (PG backend)
○ Executa função a ser depurada○ Pausa execução de cada linha com os Hooks○ Controla tabela de estatísticas e de variáveis
● Cliente 2 (Interface Gráfica)
![Page 47: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/47.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador - Implementação● Cliente 1 (PG backend)
○ Executa função a ser depurada○ Pausa execução de cada linha com os Hooks○ Controla tabela de estatísticas e de variáveis
● Cliente 2 (Interface Gráfica)○ Se comunica com Cliente 1
![Page 48: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/48.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador - Implementação● Cliente 1 (PG backend)
○ Executa função a ser depurada○ Pausa execução de cada linha com os Hooks○ Controla tabela de estatísticas e de variáveis
● Cliente 2 (Interface Gráfica)○ Se comunica com Cliente 1○ Controla pausa/prosseguimento da execução
![Page 49: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/49.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador - Implementação● Cliente 1 (PG backend)
○ Executa função a ser depurada○ Pausa execução de cada linha com os Hooks○ Controla tabela de estatísticas e de variáveis
● Cliente 2 (Interface Gráfica)○ Se comunica com Cliente 1○ Controla pausa/prosseguimento da execução
● Como se comunicam?
![Page 50: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/50.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador - Implementação● pgAdmin
○ Comunicação cliente/servidor entre clientes● OmniDB
○ Advisory Locks○ Intercalação de aquisição de locks
![Page 51: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/51.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador - Implementação
Cliente 1 Cliente 2SELECT 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
.
SELECT pg_advisory_lock(1) FROM tabela WHERE id = 1
x
x
.
.
![Page 52: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/52.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
![Page 53: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/53.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Depurador - OmniDBDemonstração...
![Page 54: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/54.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Background Worker
![Page 55: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/55.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Background Worker● Extender funcionalidades do PG
![Page 56: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/56.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Background Worker● Extender funcionalidades do PG● Processo externo iniciado junto com o PG
![Page 57: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/57.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Background Worker● Extender funcionalidades do PG● Processo externo iniciado junto com o PG● Biblioteca externa escrita em C
![Page 58: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/58.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Background Worker● Extender funcionalidades do PG● Processo externo iniciado junto com o PG● Biblioteca externa escrita em C● Carregada com “shared_preload_libraries”
![Page 59: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/59.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Background Worker● Extender funcionalidades do PG● Processo externo iniciado junto com o PG● Biblioteca externa escrita em C● Carregada com “shared_preload_libraries”● Acesso à memória compartilhada
![Page 60: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/60.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Background Worker● Extender funcionalidades do PG● Processo externo iniciado junto com o PG● Biblioteca externa escrita em C● Carregada com “shared_preload_libraries”● Acesso à memória compartilhada● Acesso ao banco com interface interna (SPI)
![Page 61: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/61.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Background Worker● Extender funcionalidades do PG● Processo externo iniciado junto com o PG● Biblioteca externa escrita em C● Carregada com “shared_preload_libraries”● Acesso à memória compartilhada● Acesso ao banco com interface interna (SPI)● libpq para instanciar novas conexões e fazer transações
![Page 62: Desbravando PG Hooks - PostgreSQL wiki · Biblioteca externa escrita em C. PGConf.Brasil 2019 Hooks - Introdução Extender / Modificar / Interromper operações Biblioteca externa](https://reader034.vdocuments.site/reader034/viewer/2022050215/5f615cb961a20f4eac68f0cb/html5/thumbnails/62.jpg)
www.2ndQuadrant.com
PGConf.Brasil 2019
Background Worker● src/test/modules/worker_spi/worker_spi.c