1. PostgreSQL `a la Debian
PostgreSQL `a la Debian
Pacote: postgresql-common
Leonardo Cezar
DATAPREV - PostgreSQL Brasil
10 de novembro de 2010
Leonardo Cezar PostgreSQL `a la Debian
2. PostgreSQL `a la Debian
Introdu¸c˜ao
Conte´udo
1 Introdu¸c˜ao
Resumo
2 Gerenciamento de Software
Processo de instala¸c˜ao
Su´ıte postgresql-common
Gerenciando o servidor
3 Biblioteca PgCommon
Introdu¸c˜ao
API
4 Migra¸c˜ao de Software
Situa¸c˜ao
Leonardo Cezar PostgreSQL `a la Debian
3. PostgreSQL `a la Debian
Introdu¸c˜ao
Resumo
Resumo
• Utilit´ario para gerenciar instˆancias do PostgreSQL (aka
cluster) com algumas ferramentas interessantes para
administra¸c˜ao, configura¸c˜ao e atualiza¸c˜ao do PostgreSQL
para vers˜oes maiores.
• API para desenvolvimento de software de gerenciamento de
bancos
• Processo Unificado de Migra¸c˜ao de bases de dados h´ıbridas
Leonardo Cezar PostgreSQL `a la Debian
4. PostgreSQL `a la Debian
Gerenciamento de Software
Conte´udo
1 Introdu¸c˜ao
Resumo
2 Gerenciamento de Software
Processo de instala¸c˜ao
Su´ıte postgresql-common
Gerenciando o servidor
3 Biblioteca PgCommon
Introdu¸c˜ao
API
4 Migra¸c˜ao de Software
Situa¸c˜ao
Leonardo Cezar PostgreSQL `a la Debian
5. PostgreSQL `a la Debian
Gerenciamento de Software
Processo de instala¸c˜ao
Digress˜ao: M´etodos de instala¸c˜ao
• Sistema Gerenciador de Pacotes
• Aptitude, Yum, Zypee, Up2date, AppSnap, Ports, Fink
• Bin´ario de instala¸c˜ao
• deb, rpm, pkg, mpkg, msi
• C´odigos fontes disponibilizados pelo fornecedor
• GCC, libbc6-dev, bison, yapcc
• Obter fontes, parametrizar, compilar, configurar, ...
• Instalar estritamente o necess´ario
Leonardo Cezar PostgreSQL `a la Debian
6. PostgreSQL `a la Debian
Gerenciamento de Software
Processo de instala¸c˜ao
Instala¸c˜ao `a la Debian
Bash
# aptitude install postgresql
Opcionalmente:
Bash
# aptitude install postgresql-9.0
Leonardo Cezar PostgreSQL `a la Debian
7. PostgreSQL `a la Debian
Gerenciamento de Software
Su´ıte postgresql-common
Objetivos postgresql-commom
• postgresql-common:
• Agregar software do servidor postgresql-$PGVERSION
• postgresql-client-common
• Agregar software do cliente postgresql-client-$PGVERSION
• Solucionar problema de atualiza¸c˜ao de vers˜ao do pacotes
Debian
• Substituir o antigo postgresql-dump dos pacotes Debian/Red
Hat;
• Executar instˆancias em vers˜oes diferentes do PostgreSQL;
• Gerenciar instˆancias atrav´es do utilit´ario pg wrapper;
Leonardo Cezar PostgreSQL `a la Debian
8. PostgreSQL `a la Debian
Gerenciamento de Software
Su´ıte postgresql-common
Arquivos
• /etc/postgresql-common/user clusters
- Mapear usu´arios contra ´area de dados e banco de dados
• $HOME/.postgresqlrc
- Configura¸c˜oes de usu´arios. Semelhante a user clusters, mas
com precedˆencia
• /etc/postgresql-common/autovacuum.conf
- Configura¸c˜oes de limpeza autom´atica para vers˜oes inferiores
`a 8.0
• /etc/postgresql/8.4/main/
- Configura¸c˜oes de arquivos da ´area de dados categorizados
por vers˜ao
Leonardo Cezar PostgreSQL `a la Debian
9. PostgreSQL `a la Debian
Gerenciamento de Software
Su´ıte postgresql-common
Arquivos
• /usr/lib/postgresql/vers˜ao/bin
- Arquivos execut´aveis (–bindir – pg dump, pg restore,
pg dumpall, ...) do servidor categorizados por vers˜ao
• /usr/share/postgresql/vers˜ao
- Arquivos de configura¸c˜ao distribu´ıdos
• /usr/share/doc/postgresql/postgresql-doc-version
- Documenta¸c˜ao de uma vers˜ao espec´ıfica
Leonardo Cezar PostgreSQL `a la Debian
10. PostgreSQL `a la Debian
Gerenciamento de Software
Su´ıte postgresql-common
Arquivos
Execut´aveis do servidor
• /usr/bin/bindir
- Links simb´olicos (psql, pg dump, pg ctl, pg restore,
pg controdata)
• /usr/bin/pg lsclusters
- Listagem de todas ´areas de dados dispon´ıveis no servidor
• /usr/bin/pg ctlcluster
- Realiza o trabalho da ferramenta pg ctl
Leonardo Cezar PostgreSQL `a la Debian
11. PostgreSQL `a la Debian
Gerenciamento de Software
Su´ıte postgresql-common
Arquivos
Execut´aveis do servidor
• /usr/bin/pg dropcluster
- Realiza a sequˆencia de comandos para excluir uma ´area de
dados
• /usr/bin/pg upgradecluster
- Atualiza os arquivos do servidor para uma nova
”maior”vers˜ao do PostgreSQL
• /usr/bin/pg createclusters
- Realiza o trabalho do software initdb
Leonardo Cezar PostgreSQL `a la Debian
12. PostgreSQL `a la Debian
Gerenciamento de Software
Gerenciando o servidor
Configura¸c˜ao
• Configurando arquivos:
• user cluster: Define em qual instˆancia determinado usu´ario se
conecta por padr˜ao:
# USU´ARIO GRUPO VERS˜AO ´AREA DE DADOS BANCO
DE DAODS
• $HOME/.postgresqlrc: Sobrescreve user clusters
• $PGCLUSTER: Vari´avel de ambiente que possui o nome e
porta do cluster
• Utilizando a diretiva –cluster
• aplicaca¸c˜ao-cliente –cluster vers˜ao/cluster
• Ex.: psql –cluster 8.4/nome cluster -l
Leonardo Cezar PostgreSQL `a la Debian
13. PostgreSQL `a la Debian
Gerenciamento de Software
Gerenciando o servidor
Utilit´arios
• Utilit´arios (psql, pg ctl) em /usr/bin s˜ao substitu´ıdos por links
simb´olicos para:
• /usr/share/postgresql-common/pg wrapper
• O programa pg wrapper elege qual a vers˜ao do cliente de
acordo com as configura¸c˜oes do cluster
• Por exemplo: No comando ’psql –cluster 9.0/main’ o programa
pg wrapper localiza os bin´arios em /usr/lib/postgresql/9.0/bin
• Observe que o parˆametro --cluster”n˜ao existe no psql original.
Ele ´e um pseudo-atributo do utilit´ario
• Os bin´arios originais /usr/lib/postgresql/$PGVERSION/bin
podem continuar sendo utilizados normalmente
Leonardo Cezar PostgreSQL `a la Debian
14. PostgreSQL `a la Debian
Gerenciamento de Software
Gerenciando o servidor
Multicluster: Vantagens
• Homologa¸c˜ao de vers˜ao de software
• Testar novas funcionalidades de vers˜oes maiores do
PostgreSQL
• Manter ambientes (teste/homologa¸c˜ao) no mesmo servidor;
• Benchmarking entre vers˜oes difeferentes do PostgreSQL
• POC de novas funcionalidades;
• Migra¸c˜ao;
• Ambiente de desenvolvimento;
Leonardo Cezar PostgreSQL `a la Debian
15. PostgreSQL `a la Debian
Biblioteca PgCommon
Conte´udo
1 Introdu¸c˜ao
Resumo
2 Gerenciamento de Software
Processo de instala¸c˜ao
Su´ıte postgresql-common
Gerenciando o servidor
3 Biblioteca PgCommon
Introdu¸c˜ao
API
4 Migra¸c˜ao de Software
Situa¸c˜ao
Leonardo Cezar PostgreSQL `a la Debian
16. PostgreSQL `a la Debian
Biblioteca PgCommon
Introdu¸c˜ao
Defini¸c˜ao
• Conjunto de fun¸c˜oes que comp˜oe o framework
postgresql-common
• Controla altera¸c˜oes em arquivos de configura¸c˜ao e localiza¸c˜ao
de execut´aveis
• Escrito em Perl 5.10 e compat´ıvel com vers˜oes superiores
• API madura e bem documentada
• Licenciado sob GPL
• Estens´ıvel
• Dependˆencias: IO::Socket, Text::More, Exporter
Leonardo Cezar PostgreSQL `a la Debian
17. PostgreSQL `a la Debian
Biblioteca PgCommon
Introdu¸c˜ao
Exemplos
• Exemplos de utiliza¸c˜ao
• export PERL5IB=/usr/share/postgresql-common
• perl -le ”use PgCommon; print get versions();”
- Retorna todas as vers˜oes de software instalada no servidor
• perl -le ”use PgCommon; set cluster port(8.4,main,5444)”
• perl -le ”use PgCommon; print
PgCommon::get conf value(8.4, main, port)”
• pg lscluster
– 8.2 main 5444 online postgres /dados
Leonardo Cezar PostgreSQL `a la Debian
18. PostgreSQL `a la Debian
Biblioteca PgCommon
API
PgCommon - API
• get cluster port(vers˜ao, cluster): Obt´em o valor da porta do
cluster
• set cluster port(vers˜ao, cluster, porta): Altera o valor da porta
• set cluster start conf: Altera a situa¸c˜ao do arquivo start.conf
• get program path(aplica¸c˜ao, vers˜ao): Obt´em o caminho do
execut´avel
• cluster info(vers˜ao, cluster): Obt´em informa¸c˜oes sobre o
cluster
• get cluster databases(vers˜ao, cluster): Retorna os bancos do
cluster
• error(string msg): Imprime uma mensagem para a sa´ıda de
erro padr˜ao e abandona com situa¸c˜ao 1
Leonardo Cezar PostgreSQL `a la Debian
19. PostgreSQL `a la Debian
Biblioteca PgCommon
API
Exemplo de aplica¸c˜ao
Listing 1: Dispatcher
#!/ usr / bin / p e r l
{
package MyWebPgCommon;
use HTTP : : Server : : Simple : : CGI qw/: a l l /;
use base qw(HTTP : : Server : : Simple : : CGI ) ;
use l i b ’ / usr / share / p o s t g r e s q l −common ’ ;
use PgCommon ;
my %dispatch = ( ’ / index ’ => &index ,
) ;
Leonardo Cezar PostgreSQL `a la Debian
20. PostgreSQL `a la Debian
Biblioteca PgCommon
API
Exemplo de aplica¸c˜ao (cont.)
Listing 2: Dispatcher
sub h a n d l e r e q u e s t {
my $ s e l f = s h i f t ;
my $cgi = s h i f t ;
}
my $path = $cgi −>p a t h i n f o ( ) ;
my $handler = $dispatch { $path };
i f ( ref ( $handler ) eq ”CODE” ) {
}
print ”HTTP/1.0 200 OK r n” ;
$handler −>($cgi ) ;
Leonardo Cezar PostgreSQL `a la Debian
21. PostgreSQL `a la Debian
Biblioteca PgCommon
API
Exemplo de aplica¸c˜ao (cont.)
Listing 3: Dispatcher
sub index {
my $cgi = s h i f t ;
return i f ! ref $cgi ;
my $ u r i = $ENV{REQUEST URI };
my $who = $cgi −>param ( ’name ’ ) ;
}
print $cgi −>header ;
print $cgi −>s t a r t h t m l (− t i t l e=>”PostgreSQL Common M
,− s t y l e=>{ ’ s r c ’=>$ u r i . ’ / l a f /common . css ’ }
print $cgi −>t a b l e ({− border=>”1” } ,
$cgi −>caption ( ’ C l u s t e r Re gis tr ado s ’ ) ,
$cgi −>Tr({− a l i g n=>l e f t ,− v a l i g n=>TOP} ,
[ Leonardo Cezar PostgreSQL `a la Debian
22. PostgreSQL `a la Debian
Biblioteca PgCommon
API
Exemplo de aplica¸c˜ao (cont.)
Listing 4: Dispatcher
sub l i s t c l u s t e r s () {
my @ c l u s t e r d e s c ;
foreach $v ( sort ( g e t v e r s i o n s ( ) ) ) {
my @ c l u s t e r s = g e t v e r s i o n c l u s t e r s $v ;
foreach $c ( sort @ c l u s t e r s ) {
%i n f o = c l u s t e r i n f o $v , $c ;
push @c lust er de sc , [ $v , $c , $ i n f o { ’ port
, $ i n f o { ’ running ’ } ? ” o n l i n e ” : ”down”
,( getpwuid $ i n f o { ’ owneruid ’ } ) [ 0 ]
, $ i n f o { ’ pgdata ’ }
, $ i n f o { ’ l o g f i l e ’ } | | ’ custom ’ ] ;
} return @ c l u s t e r d e s c ;
}
} Leonardo Cezar PostgreSQL `a la Debian
23. PostgreSQL `a la Debian
Biblioteca PgCommon
API
Exemplo de aplica¸c˜ao (uso)
• Aponte seu navegador para http://localhost:8181
• Uma listagem com seus cluster deve aparecer
• Clique no bot˜ao para iniciar o servi¸co
Leonardo Cezar PostgreSQL `a la Debian
24. PostgreSQL `a la Debian
Migra¸c˜ao de Software
Conte´udo
1 Introdu¸c˜ao
Resumo
2 Gerenciamento de Software
Processo de instala¸c˜ao
Su´ıte postgresql-common
Gerenciando o servidor
3 Biblioteca PgCommon
Introdu¸c˜ao
API
4 Migra¸c˜ao de Software
Situa¸c˜ao
Leonardo Cezar PostgreSQL `a la Debian
25. PostgreSQL `a la Debian
Migra¸c˜ao de Software
Situa¸c˜ao
Situa¸c˜ao
Aplica¸c˜oes
• +500 Aplica¸c˜oes rodando em Or4¢le
• +20 Aplica¸c˜oes rodando em MS SQ£$erver
• +20 Aplica¸c˜oes rodando no PostgreSQL
• +50 Aplica¸c˜oes rodando mainframe (DMS2)
Leonardo Cezar PostgreSQL `a la Debian
26. PostgreSQL `a la Debian
Migra¸c˜ao de Software
Situa¸c˜ao
Metas 2010 - 2011
• Consolida¸c˜ao do ambiente PostgreSQL
• Composi¸c˜ao do Processo de desenvolvimento e migra¸c˜ao
PostgreSQL (Eclipse Process Framework)
• Migra¸c˜ao de 30% do Oracle
• Migra¸c˜ao de todas as bases SQL Server
Leonardo Cezar PostgreSQL `a la Debian