O documento discute como dividir aplicações complexas em módulos menores utilizando extensões do PostgreSQL. Isso permite melhor modularidade, reutilização de código e gerenciamento de versões. O exemplo mostra como criar validadores de CPF e e-mail como uma extensão, permitindo validações no banco de dados de forma centralizada.
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
1. Estripando o Elefante
Como estender o
PostgreSQL...
… estripando sua aplicação e dividindo
um problemão em
problemas menores utilizando extensões?
por Dickson S. Guedes
(@guediz)
PGBR 2011, 4 de Novembro
2. Estripando o Elefante
Como estender o
PostgreSQL...
… estripando sua aplicação e dividindo
um problemão em
problemas menores utilizando extensões?
por Dickson S. Guedes
(@guediz)
PGBR 2011, 4 de Novembro
17. Até então não tinhamos....
● Versionamento de funções no banco
● Gerenciamento de contribs
● saber facilmente quais contribs estão instaladas, por exemplo
● Modularidade
● Reaproveitamento de código
● Contribuições para comunidade
● ...
18. Até então não tinhamos....
● Versionamento de funções no banco
● Gerenciamento de contribs
● saber facilmente quais contribs estão instaladas, por exemplo
● Modularidade
● Reaproveitamento de código
● Contribuições para comunidade
● ...
SIM! Eu consigo dividir para conquistar!
34. Banco PostgreSQL 9.0
Varias tabelas
Várias funções em varias linguagens
Código sem testes
Pouco versionamento das funcoes
O dump possui o codigo das funcoes
Gerenciamento atraves de esquemas
35. Cadastro de pessoas
CREATE TABLE pessoas
(
nro_cpf cpf PRIMARY KEY,
nome text NOT NULL,
data_nascimento date
);
36. Cadastro de pessoas
CREATE TABLE pessoas
(
nro_cpf cpf PRIMARY KEY,
nome text NOT NULL,
data_nascimento date
);
52. Os passos
● Prepare o código fonte, os testes e a
documentação
● Crie o arquivo Makefile
● Crie o arquivo de controle
● Escreva testes
● Escreva o código
● Documente
53. Os passos
● Prepare o código fonte, os testes e a
documentação
● Crie o arquivo Makefile
● Crie o arquivo de controle
● Escreva testes
● Escreva o código
● Documente
54. Makefile
EXTENSION = validadores
EXTVERSION = $(shell grep default_version $
(EXTENSION).control | sed -e
"s/default_version[[:space:]]*=[[:space:]]*'
([^']*)'/1/")
DATA = $(filter-out $(wildcard sql/*--*.sql),$
(wildcard sql/*.sql))
DOCS = $(wildcard doc/*.md)
TESTS = $(wildcard test/sql/*.sql)
REGRESS = $(patsubst test/sql/%.sql,%,$(TESTS))
REGRESS_OPTS = --inputdir=test --load-language=plpgsql
#Descomente esta linha caso tenha funções em C
#MODULES = $(patsubst %.c,%,$(wildcard src/*.c))
PG_CONFIG = pg_config
PG91 = $(shell $(PG_CONFIG) --version | grep -qE
" 8.| 9.0" && echo no || echo yes)
56. Os passos
● Prepare o código fonte, os testes e a
documentação
● Crie o arquivo Makefile
● Crie o arquivo de controle
● Escreva testes
● Escreva o código
● Documente
58. Controlfile: validadores.control
# validadores extension
comment = 'Extensao que contem validadores de CNPJ, CPF'
default_version = '0.0.1'
relocatable = true
Learn more ...
http://www.postgresql.org/docs/current/static/extend-extensions.html#AEN51780
59. Os passos
● Prepare o código fonte, os testes e a
documentação
● Crie o arquivo Makefile
● Crie o arquivo de controle
● Escreva testes
● Escreva o código
● Documente
62. Os passos
● Prepare o código fonte, os testes e a
documentação
● Crie o arquivo Makefile
● Crie o arquivo de controle
● Escreva testes
● Escreva o código
● Documente
63. Os passos
● Prepare o código fonte, os testes e a
documentação
● Crie o arquivo Makefile
● Crie o arquivo de controle
● Escreva testes
● Escreva o código
● Documente