AdministraoProfissionaldoPostgreSQLIntroduo
IntroduoFalar sobre PostgreSQL certamente no uma tarefa das mais fceis. Sempre acreditei nessa idia, devido s dificuldades que enfrentei para encontrar um material mais completo sobre este SGBD.
So poucos os livros em portugus sobre o assunto. Mesmo em ingls, devido evoluo do banco em suas ltimas verses, no muito difcil topar com algum material defasado.
Em se tratando de administrao do servidor, tambm muito comum encontrar receitas de bolo como: configure seu shared_buffers para tanto, aumente o work_mem para tanto. Libere tanto de memria disso, tanto daquilo e eu sempre me perguntei: Sim, mas por qu?.
Por outro lado, a vasta documentao oficial salvou minha pele algumas vezes (sou professor de PostgreSQL e no me envergonho de recorrer a ela mesmo durante algumas aulas). No entanto, o que poderia ser bom, imagino que possa ter provocado um efeito colateral. Muita gente pode ter pensado como eu: Como escrever um material sobre PostgreSQL que organize os assuntos de um jeito que penso ser mais didtico, mas que no fique com cara de cpia descarada da documentao oficial?.
Esta ento minha misso. Preciso escrever algo sobre administrao do PostgreSQL que seja mais breve que sua documentao oficial (at a, fcil... bronca seria se tivesse que ser maior), que possa recorrer a ela em momentos oportunos, mas que no faa voc achar que gastou dinheiro toa comprando algo que no acrescentou nada s sagradas escrituras de Berkeley1.
EmentaeorganizaoO contedo foi cuidadosamente arranjado para focar em tarefas administrativas do PostgreSQL e do ambiente em questes que influenciem em como o SGBD dever funcionar (ou no, como diria Caetano).
Trataremos aqui da verso 8.4, apesar dos caras j estarem com o 8.5 no forno com algumas idias interessantes como o suporte ao j bem esperado Hot Standby (explicar isso agora? ...). Todos os testes foram realizados na verso 8.4.2 em sistema Debian netinst virtualizado com Virtual Box aqui em um velho note de guerra, com hospedeiro rodando Ubuntu Hard Heron que s atualizo quando sair outro LTS. Em alguns momento, posso apresentar alguns resultados executados em outras mquinas. Quem sou eu para dizer qualquer coisa, mas em minha humilde opinio, o PostgreSQL ainda um sistema extremamente vinculado famlia Unix, portanto, quando me referir ao Windows, vai ser s para no dizer que no falei das flores.Captulo 1 Primeiros passos. No primeiro momento, vamos tratar do processo de instalao em mais de uma plataforma, utilizando mais de um mtodo, alm de conhecer a disposio fsica do servidor instalado. Apesar do nome Primeiros passos, no se trata aqui de um captulo de nivelamento. Vamos assumir que o leitor j possui mais de 15 minutos de experincia com PostgreSQL e tem noes de instrues SQL e Sistemas Gerenciadores de Bancos de Dados Relacionais (SGBDR ou RDBMS).
Captulo 2 Opes de configurao. Neste captulo, colocaremos uma lupa sobre o postgresql.conf, principal arquivo de configurao do banco e veremos como este est organizado. Veremos ainda alguns recursos de configurao definidos pelos clientes.
1 CidadesededaUniversidadedaCalifrnia,berodoPostgreSQL
1
AdministraoProfissionaldoPostgreSQLIntroduo
Captulo 3 Autenticaes e permisses. Aps um embasamento nas opes de configurao, importante saber como conectar e como o PostgreSQL faz para dizer quem pode fazer o qu e onde. Este captulo aborda do grosso modo aos ajustes finos sobre conexes, papis e permisses do PostgreSQL.
Captulo 4 Transaes e Write Ahead Logging. Certamente um dos captulos mais legais. O WAL a alma negcio no PostgreSQL. ele quem garante a durabilidade de uma transao e conhec-lo bem pode lhe trazer boas idias de desempenho, integridade e disponibilidade.
Captulo 5 Rotinas administrativas. Se estamos em um livro sobre administrao do PostgreSQL, este captulo o principal responsvel. Vacuum, analyze, logging e monitoria so tarefas administrativas que precisam estar bastante claras na mente do DBA PostgreSQL.
Captulo 6 Backups Eles podem salvar seu emprego. Se voc sentiu falta dos backups como tarefas administrativas fundamentais, ns tambm. Tanto que um captulo inteiro foi reservado s para eles. Veremos o mecanismo dump texto e binrio, alm do famoso Point-in-Time Recovery para backups incrementais e timelines. Ser visto aqui o que poderia estar apenas no captulo 9 Alta Disponibilidade, que a tcnica de Warm Standby baseada no log shipping de um servidor master para um slave que assume a ponta caso detecte que algo de ruim aconteceu ao master (failover). Aqui ser fundamental que voc entenda bem o captulo 4 Transaes e Write Ahead Logging.
Captulo 7 Algo sobre infraestrutura. Neste captulo eu me aventuro a falar sobre algo que no bem minha praia. Sou desenvolvedor, mas tive o cuidado de apresent-o previamente a diversos amigos Sysadmins e eles no riram da minha cara. Espero sinceramente que no tenha sido por pura amizade. Para ser um bom DBA PostgreSQL, voc precisar conhecer bem este assunto.
Captulo 8 Tunning Ensinando o elefante a voar. Aqui voc conhecer algumas ferramentas para medio de desempenho, dicas para evitar gargalos e diversas opes de configurao para transformar seu PostgreSQL num Dumbo envenenado. (Perdo leitor. Tenho certeza de que se no fossem 3h da manh e eu no estivesse morto de sono, esta frase infame no teria surgido).
Captulo 9 Alta disponibilidade. Em muitos sistemas, disponibilidade algo ainda mais crtico do que desempenho. Vejamos algumas tecnologias que podero auxili-lo em situaes onde parar ou perder dados sejam simplesmente inadmissveis.
ParaquemestouescrevendoSe voc est procurando um material introdutrio sobre PostgreSQL, modelagem de dados e linguagem SQL, pode voltar seo Best-sellers: Livros mais vendidos de todos tempos da livraria e recolocar este livro na estante. Aproveite e pea para o vendedor utilizar algo melhor como encalo para a estante. :-)
Material assim, voc encontra uns muito bons l naquela prateleira da seo Bancos de Dados, na rea de informtica. Me preocupei em falar para quem j sabe disso mas precisa administrar um servidor PostgreSQL.
Escrevo tambm para desenvolvedores curiosos na rea como eu. impressionante como ns somos capazes de, ao menor deslize, estragar tudo e congelar o banco. Se meu sonho se realizasse e todo desenvolvedor que trabalhe com o PostgreSQL se especializasse nos assuntos que este livro aborda, acredito que eu ganharia o nobel da paz por trs anos seguidos (no quarto eu negaria para dar chance a algum Obama desprestigiado).
2
AdministraoProfissionaldoPostgreSQLIntroduo
E por que no dizer que escrevo para coveiros, ascensoristas, deputados e quem mais puder encontrar um tempo livre para ler um livrinho light e bem humorado. Escrevo at mesmo para torcedores do Nutico ou do Santa Cruz. Coitados, eles precisam de algo que lhes traga mais alegria.
3
AdministraoProfissionaldoPostgreSQLIntroduo
SumrioIntroduo.............................................................................................................................................1
EMENTA E ORGANIZAO........................................................................................................................1PARA QUEM ESTOU ESCREVENDO..............................................................................................................2
1Primeirospassos...............................................................................................................................81.1PROCESSO DE INSTALAO..................................................................................................................8
1.1.1Instalao no Debian Lenny..................................................................................................8EscolhaedownloaddoDebianLenny...................................................................................8Processodeinstalaoemmodogrfico................................................................................9Efetuandoodownloaddosfontes.........................................................................................48Preparandooambiente.........................................................................................................52InstalandooPostgreSQLapartirdocdigofonte...............................................................54Psinstalao.......................................................................................................................55Inicializao..........................................................................................................................60Customizaes,facilitaeseautomatizaes.....................................................................60Instalaoviaaptget............................................................................................................64
1.1.2Instalao do EnterpriseDB no Windows...........................................................................641.1.3Instalao no Ubuntu via Synaptic.....................................................................................80
1.2INITDB INCIO DO DATABASE CLUSTER..............................................................................................851.2.1Arquivos e diretrios do cluster..........................................................................................87
Diretriobase.......................................................................................................................87Comooarmazenadorfunciona............................................................................................94Mapeamentodeespaolivreempginasdedados..............................................................97Umpoucodeprtica.............................................................................................................99Outrosdiretrios.................................................................................................................107Arquivosdeconfiguraodocluster..................................................................................109
1.2.2Encoding e localizao......................................................................................................110ProblemascomoDebian/Ubuntu.....................................................................................112ContornandooproblemanoDebian...................................................................................113ContornandooproblemanoUbuntu...................................................................................114EscolhadelocalesnoinitdbenoCREATEDATABASE..................................................115
1.3OPES DE INICIALIZAO .............................................................................................................1181.3.1Inicializao via postgres..................................................................................................1181.3.2Inicializao via pg_ctl.....................................................................................................120
Modosdeencerramento......................................................................................................121Sinaisparaprocessosemexecuo....................................................................................124
1.4SAINDO DO CLUSTER COM NOVOS TABLESPACES..................................................................................125Infraestruturaecatlogo.....................................................................................................128
1.5RESUMO GERAL............................................................................................................................1292Opesdeconfigurao...............................................................................................................130
2.1QUANDO E COMO ALTERAR OPES DE CONFIGURAO.......................................................................1302.2COMO EST ORGANIZADO O POSTGRESQL.CONF..................................................................................130
2.2.1Localizao de arquivos....................................................................................................1302.2.2Conexes e autenticaes..................................................................................................1322.2.3Consumo de recursos.........................................................................................................135
4
AdministraoProfissionaldoPostgreSQLIntroduo
2.2.4Logs de transao WAL.....................................................................................................1412.2.5Tuning de planejamento de consultas...............................................................................1452.2.6Logs do sistema.................................................................................................................1522.2.7Coletor de estatsticas.......................................................................................................1602.2.8Autovacuum.......................................................................................................................1612.2.9Padres para os clientes...................................................................................................164
Maissobreesquemasesearch_path....................................................................................171ComofuncionaatabelaBase64.........................................................................................173Representaotemporal......................................................................................................175
2.2.10Gesto de lock.................................................................................................................1772.2.11Compatibilidade..............................................................................................................178
2.3CONCLUSO.................................................................................................................................1823Autenticaesepermisses..........................................................................................................183
3.1CONTROLANDO ACESSOS................................................................................................................1833.1.1Interfaces e conexes no postgresql.conf..........................................................................1833.1.2Autenticaes no pg_hba.conf...........................................................................................185
Autenticaolocal..............................................................................................................190Identidadedeusurios........................................................................................................192Mapasdeidentificao.......................................................................................................194
3.2O TCPDUMP VAI DEDURAR A CONVERSA DAS CONEXES HOST...............................................................1943.3CONEXES SSL/TLS...................................................................................................................194
3.3.1Certificados digitais..........................................................................................................194GeraodecertificadosatravsdoOpenSSL.....................................................................194GeraodecertificadosatravsdoJavaKeyTool...............................................................194
3.3.2Realizando conexes.........................................................................................................1943.4USURIOS, GRUPOS E PAPIS (ROLES)...............................................................................................1943.5POLTICA DE PERMISSES (GRANT E REVOKE).....................................................................................1943.6VAMOS FALAR SOBRE SEGURANA?..................................................................................................194
4TransaeseWriteAheadLogging..............................................................................................1954.1VISO GERAL SOBRE TRANSAES...................................................................................................195
4.1.1Nveis de isolamento..........................................................................................................1954.2MVCC MULTIVERSION CONCURRENT SYSTEM.............................................................................1954.3COMO FUNCIONA O WAL NO SISTEMA DE ARQUIVOS..........................................................................1954.4CHECKPOINTS E O PROCESSO BGWRITER............................................................................................1954.5LOCKS........................................................................................................................................195
5Rotinasadministrativas.................................................................................................................1965.1LIMPEZA DE REGISTROS APAGADOS COM VACUUM...............................................................................196
5.1.1Configuraes de autovacuum..........................................................................................1965.1.2Deteco de espao livre...................................................................................................1965.1.3Reincio de XID.................................................................................................................196
5.2COLETA DE ESTATSTICAS................................................................................................................1965.2.1Tabelas de catlogo...........................................................................................................1965.2.2Configuraes do coletor automtico...............................................................................196
5.3LOGGING SQL E REPORTES DE ERROS..............................................................................................1965.4MONITORIA..................................................................................................................................197
5.4.1Conhecendo os processos..................................................................................................1975.4.2Monitorando processos com pg_top..................................................................................1975.4.3Monitorando uso de memria com vmstat e sar...............................................................197
5
AdministraoProfissionaldoPostgreSQLIntroduo
5.4.4Monitorando uso de disco.................................................................................................1975.4.5Monitorando logs do sistema com PgFouine....................................................................1975.4.6Monitoramentos com Cedrus............................................................................................1975.4.7Mais monitoramentos com Zabbix....................................................................................197
6BackupsElespodemsalvarseuemprego..................................................................................1986.1BACKUPS DUMP/RESTORE...............................................................................................................198
6.1.1Gerando dumps com pg_dump e pg_dumpall...................................................................1986.1.2Gerando dumps no PgAdmin III.......................................................................................1986.1.3Recuperando dumps em texto............................................................................................1986.1.4Recuperando dumps binrios com pg_restore..................................................................198
6.2BACKUPS INCREMENTAIS COM POINT-IN-TIME RECOVERY (PITR)........................................................1986.2.1Coleta contnua de logs de transaes..............................................................................1986.2.2Backup fsico a quente..................................................................................................1986.2.3Simulao de crash e recuperao do backup..................................................................1986.2.4Timelines............................................................................................................................198
6.3WARM-STANDBY..........................................................................................................................1986.3.1Log shipping com rsync e pg_standby..............................................................................1986.3.2Failover.............................................................................................................................1986.3.3Hot Failover com o WalMgr do SkyTools..........................................................................198
7Algosobreinfraestrutura..............................................................................................................1997.1GESTO DE DISCOS........................................................................................................................199
7.1.1RAID..................................................................................................................................1997.2GESTO DE SISTEMA OPERACIONAL..................................................................................................199
7.2.1Processos...........................................................................................................................1997.2.2Segmentos de memria compartilhada.............................................................................1997.2.3Semforos..........................................................................................................................199
8TuningEnsinandooelefanteavoar..........................................................................................2008.1BENCHMARKS TPC......................................................................................................................2018.2FERRAMENTAS DE BENCHMARK........................................................................................................203
8.2.1Testes TPC-B com o pgbench............................................................................................2038.2.2Testes TPC-C com DBT-2..................................................................................................2038.2.3Testes de carga com Jmeter...............................................................................................203
8.3DICAS BSICAS.............................................................................................................................2038.4EXPLAIN ENTENDA O QUE O QUERY PLANNER EST FAZENDO............................................................204
8.4.1Custo e tempo de operaes..............................................................................................2048.4.2Catlogo de operaes......................................................................................................2048.4.3Explain no PgAdmin III.....................................................................................................204
8.5CONSULTAS DE GRANDE VOLUME.....................................................................................................2048.5.1GEQO................................................................................................................................2048.5.2Particionamento................................................................................................................204
8.6RECONFIGURANDO O SERVIDOR EM BUSCA DE DESEMPENHO..................................................................2048.6.1Ferramenta pgtune............................................................................................................2048.6.2Configuraes de consumo de recursos............................................................................2048.6.3Outras configuraes........................................................................................................204
8.7RECURSOS UNIX SYSTEM V...........................................................................................................2059AltaDisponibilidade....................................................................................................................206
9.1PROJETOS DE REPLICAES.............................................................................................................2069.1.1Replicaes de baixo nvel com DRBD.............................................................................206
6
AdministraoProfissionaldoPostgreSQLIntroduo
9.1.2Replicaes master/multislaves com Slony I.....................................................................2069.1.3Replicaes multimaster e load balance com pgpool II....................................................206
9.2FAILOVERS...................................................................................................................................2069.2.1Linux Hearbeat..................................................................................................................206
7
AdministraoProfissionaldoPostgreSQL1Primeirospassos
1 PrimeirospassosVeremos aqui quase como comear do comeo. Precisamos ver o processo de instalao, mas vamos atentar um pouco mais aos detalhes, s vezes negligenciados por questes didticas em livros mais bsicos.
1.1 ProcessodeinstalaoSero apresentados aqui vrios mtodos de instalao, a maioria em ambiente Linux, o que pode ser til tambm em outros sabores Unix. Para que no ocorra de eu utilizar uma distribuio que supra certas dependncias que outras no ou eu mesmo j haver instalado junto com algum outro aplicativo, resolvi mostrar o processo de instalao em mais de uma distribuio, na tentativa de ser mais amplo e democrtico.
Tentei dispor em uma crescente de facilidade, onde iniciamos com a instalao em ambiente Debian. Aqui veremos a instalao do prprio sistema operacional. No que seja complicado, mas por ser um explicao completa de tudo que ser necessrio para se ter um ambiente preparado para o PostgreSQL.
Depois, veremos a instalao no Windows XP (no testei, mas acredito que sirva para o Vista ou o Seven), atravs do prtico instalador mantido pela EnterpriseDB, instalador tambm disponvel para o MacOS.
Por fim, veremos a instalao de pacotes .deb no Ubuntu, para quem quer tudo muito bem perfumado, atravs do gerenciador grfico de pacotes Synaptic.
1.1.1 InstalaonoDebianLennySistemas de bancos de dados so famosos por serem vidos consumidores de recursos computacionais. Com o PostgreSQL no poderia ser diferente. Em ambientes corporativos, comum dispor de uma mquina (ou uma infraestrutura bem mais robusta) com a funo especfica de prover o banco de dados, nelas o ideal que no haja gasto de recursos com operaes que poderiam ter sido evitadas.
Com o Debian, possvel instalar um ambiente operacional mnimo, onde tudo pode ser mais eficientemente aproveitado pelo banco.
EscolhaedownloaddoDebianLenny
Para efetuar o download do Debian Lenny 5.0, v ao endereo www.debian.org e clique no menu Obtendo o Debian. L vamos escolher a verso netinst, que nos trar uma imagem ISO pequena e todo resto devendo ser instalado pela prpria Internet. Para isso, clique no link Baixe um arquivo de imagem pequeno, grave-o em um CD/DVD/disco USB/disquete, e instale usando a Internet. Agora, voc poder baixar uma verso pequena (CDs Pequenos) ou minscula (CDs muito pequenos, disquetes, USB sticks, etc), alm de poder efetuar uma instalao inteiramente pela rede.Vamos optar pela primeira verso. O link CDs Pequenos traz uma ISO de apenas 150 Mb que nem tanto nem to pouco.
8
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Processodeinstalaoemmodogrfico
Apesar de estarmos interessados em um ambiente mnimo, sem gastos de recursos com suprfluos como o ambiente grfico, o processo de instalao no precisa ser tortuoso. Veremos como instalar em ambiente grfico de modo bem simples e intuitivo.
Ao gravar sua imagem em um CD ou pendrive, rebootar a mquina a partir da mdia gravada, voc dever se deparar com a seguinte tela:
1 Tela inicial de boot do Debian Lenny
Pode optar pelo Graphical install sem problemas. Feito isso, a prxima tela trar a primeira escolha, o idioma a ser utilizado durante o processo de instalao e utilizao posterior no ambiente instalado.
2 Tela inicial: Escolha do idioma
9
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Apesar de termos escolhido Portugus do Brasil, a prxima tela nos perguntar qual o pas origem do idioma. Vamos optar pelo Brasil novamente.
3 Tela de escolha do pas do idioma informado
10
AdministraoProfissionaldoPostgreSQL1Primeirospassos
A prxima escolha o layout do teclado. Vamos respeitar o sugerido.
4 Tela de escolha do layout do teclado
11
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Aps a escolha, o instalador ir efetuar algumas verificaes sobre os dispositivos.
5 Tela de deteco e montagem de dispositivos
12
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Alguns componentes adicionais devero ser carregados
6 Tela de carregamento de componentes adicionais
13
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Neste momento, o instalador tentar se conectar a algum servidor DHCP a fim de obter um IP vlido na rede. recomendvel haja este servidor em sua rede e que seja possvel a mquina em questo acessar a Internet.
7 Tela de configurao do cliente do servio DHCP
14
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Quando o instalador parar de mostrar barras de progresso, voc ser questionado a informar o nome que pretende batizar seu novo sistema.
8 Tela de configurao de nome da mquina na rede
15
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Na prxima tela, no desmerea a configurao do fuso-horrio. Isso muito importante. Normalmente, o relgio da BIOS dever estar corretamente configurado para o horrio GMT (fuso zero) com a escolha pelo nosso fuso-horrio de -3 horas.
9 Tela de escolha de cidade a fim de registrar o fuso-horrio
16
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Mais algumas deteces sero feitas para que voc possa entrar com mais alguma informao. Neste caso
10 Deteco de novos hardwares
17
AdministraoProfissionaldoPostgreSQL1Primeirospassos
O prximo momento ser sobre a configurao das parties do sistema.
11 Tela de carregamento do aplicativo de particionamento
18
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Aqui, o critrio seu. Vamos criar as parties manualmente.
12 Tela inicial de definio de parties
19
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Para facilitar a escrita deste material, instalei o Debian sobre o Virtual Box, reservando apenas 10Gb para todo o sistema, mesmo assim optei por criar uma partio swap e uma ext3 reservada raiz do sistema de arquivos. No vou entrar no mrito de quais mais parties deveriam ser criadas, isso sempre vai depender dos recursos que voc tiver disponveis. No entanto, vou voltar a falar sobre sistemas de arquivos e particionamento em outros momentos.
13 Tela de escolha do HD a ser particionado
20
AdministraoProfissionaldoPostgreSQL1Primeirospassos
14 Opo por criar nova tabela de parties no HD escolhido
21
AdministraoProfissionaldoPostgreSQL1Primeirospassos
15 Opo por criar nova partio
22
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Na prxima tela, vamos definir o tamanho da partio swap. Swap a operao de escrita em discos no momento em que houver um esgotamento da memria RAM. No Windows, o swap dinmico e ocorre por padro na mesma partio onde o sistema for instalado, j no Linux, ela reservada e otimizada em uma partio que voc deve definir.
O valor exato que voc deve reservar swap tambm no determinado. Muita gente fala sobre a mgica expresso matemtica de 2 vezes a memria RAM, uma vez que voc deve ter uma proporo ainda bem maior de espao em disco dividido pela memria disponvel. medida que sua quantidade de memria RAM cresce a necessidade de swap diminui. O fato que o swap necessrio, mas o bom mesmo que voc nunca precise dela, sob pena de ver seu elefante sentar calada.
16 Definindo o tamanho da partio swap
23
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Se a partio for primria, dever ter um nmero entre 1 e 4, se for lgica acima disso. No que haja diferena de integridade ou desempenho entre os dois tipos, mas em geral costumo optar por parties primrias.
17 Definindo a partio como primria
24
AdministraoProfissionaldoPostgreSQL1Primeirospassos
18 Escolha da posio da partio no incio ou no fim do HD
25
AdministraoProfissionaldoPostgreSQL1Primeirospassos
19 Escolha da partio como swap
26
AdministraoProfissionaldoPostgreSQL1Primeirospassos
20 Finalizando a escolha
27
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Agora vamos criar a partio principal que aqui apenas tomaremos o restante do disco. No entanto, seria possvel e bem comum que reservssemos parties para o sistema operacional, para os diretrios home dos usurios, para registros de log do sistema e para mais uma infinidade de coisas. O prprio PostgreSQL, dependendo da finalidade pode ser melhor arranjado em mais de uma partio, melhor ainda se estiver em mais de um disco, mas vamos deixar este assunto pra depois que voc resolver parar de ler na livraria e passar logo no caixa.
21 Particionando o restando do disco
28
AdministraoProfissionaldoPostgreSQL1Primeirospassos
No vou repetir aqui as telas que voc vai encontrar agora. Ao final, escolha o sistema de arquivo e ponto de montagem raiz.
Nota: Sobre ponto de montagem. Provavelmente voc j sabe disso melhor do que eu, mas no custa dizer que no Linux no tem essa de unidade C:, unidade D: e tal. Sempre deve haver uma partio que ser utilizada como unidade principal (a famosa C:). Ela dita partio raiz e deve ser escrita no ponto de montagem / (barra). As demais parties (a exceo da swap) devem ser montadas em subdiretrios da raiz. Assim: /boot, /var, /home so sugestes recorrentes em manuais de instalao de Linux uma vez que separam em parties diferentes subdiretrios com funes reconhecidamente diferentes, tornando-as capazes de evoluir de modo independente, por exemplo os diretrios dos usurios devem estar abaixo de /home. Se esta partio crescer e ficar cheia, em vez de sair por a exterminando os usurios mais chatos, voc pode simplesmente montar uma partio de um HD maior no mesmo lugar da anterior sem ningum se abalar.
O Debian Lenny ainda no traz o ext4 na instalao padro, vamos discutir um pouco sobre sistemas de arquivos em um momento mais oportuno.
22 Escolha do sistema de arquivos da partio raiz
29
AdministraoProfissionaldoPostgreSQL1Primeirospassos
23 Finalizando o particionamento
30
AdministraoProfissionaldoPostgreSQL1Primeirospassos
24 Escrevendo as mudanas no disco
31
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Aps escrever a nova tabela de partio, seu disco ser formatado.
25 Formatando nova tabela de parties
32
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Agora s ir tomar um caf.
26 Instalando sistema
33
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Sistema bsico instalado, a prxima tela ir lhe sugerir e lhe perguntar o nome de um usurio adicional para que voc possa evitar entrar como root.
27 Tela de configurao de novo usurio
34
AdministraoProfissionaldoPostgreSQL1Primeirospassos
28 Escolha a senha deste usurio
35
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Optamos pela verso netinst do Debian, portanto o final ser instalado pela rede. Devemos escolher o pas de onde buscar os demais pacotes a serem instalados.
29 Escolha do pas origem dos pacotes a serem instalados
36
AdministraoProfissionaldoPostgreSQL1Primeirospassos
30 No Brasil, estes so os repositrios servidores
37
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Caso voc se conecte rede atravs de um servidor proxy, configure-o aqui.
31 Configurao do servidor proxy
38
AdministraoProfissionaldoPostgreSQL1Primeirospassos
A prxima tela ir apenas exibir uma barra de progresso de acordo com a leitura e configurao do novo repositrio.
32 Configurando o apt
39
AdministraoProfissionaldoPostgreSQL1Primeirospassos
33 Alguns softwares j sero instalados neste momento
40
AdministraoProfissionaldoPostgreSQL1Primeirospassos
bom sempre contribuir. Na prxima tela, voc dever concordar ou descordar do seu sistema participar da pesquisa de popularidade de pacotes. Neguei por aqui, mas recomendo que voc aceite.
34 Participao na estatstica de uso de pacotes
41
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Esta tela fundamental. Aqui vamos optar pelo sistema bsico, sem interface grfica ou quaisquer outros servios que possam concorrer com nosso banco.
35 Escolha pela instalao apenas do sistema bsico
42
AdministraoProfissionaldoPostgreSQL1Primeirospassos
36 O resto dos pacotes ser instalado agora
43
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Aps instalado o sistema, voc ser questionado se deseja instalar o gestor de boot grub no incio da partio reservada raiz ou no registro pricipal do disco MBR (master boot record).
37 Instalando o grub na MBR
44
AdministraoProfissionaldoPostgreSQL1Primeirospassos
38 Andamento do trmino da instalao
45
AdministraoProfissionaldoPostgreSQL1Primeirospassos
39 That's all folks!
46
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Aps reiniciar, escolha a primeira opo de boot.
40 Tela de boot
47
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Efetuandoodownloaddosfontes
Para voc no perder o hbito de navegar na Internet, vamos instalar um navegador de modo texto para podermos ir ao site do PostgreSQL baix-lo de l.
Confira na imagem abaixo:
41 Instalando o pacote lynx
Note que precisamos executar este comando como usurio root. O indicador # esquerda do cursor indica que somos o root, do contrrio, haveria um $.
Nota: A partir deste momento, para citar qualquer comando no console, apenas informaremos o indicador # quando este precisar ser realizado pelo
48
AdministraoProfissionaldoPostgreSQL1Primeirospassos
usurio root, ou o $ quando ele no for necessrio.
Nota: Poderamos instalar o prprio PostgreSQL via apt-get, ele est disponvel nos mesmos repositrios. No o fizemos primeiramente por ser o Debian uma distribuio fortemente focada na estabilidade, o que a torna um pouco mais lenta na disponibilizao de pacotes de softwares. At o momento, a verso do PostgreSQL disponvel nos repositrios Debian a 8.3. Outro motivo foi justamente por querermos ver o que acontece de fato em um processo de instalao. O comando #aptgetinstallpostgresql vai pedir sua confirmao para efetuar o download de dependncias e s vai parar depois que o banco tiver sido baixado, configurado e inicializado, tarefas que pretendemos digerir mastigando um pouco mais.
Aps baixar o navegador, digite:
$ lynx www. postgresql.org
Voc vai se deparar com toda a beleza da pgina principal do postgresql.org em modo textual.
42 Tela do lynx na pgina www.postgresql.org/download
Navegue atravs das setas, at a opo source code acender de amarelo. Enter para clicar na opo:
43 Link para o download do PostgreSQL
49
AdministraoProfissionaldoPostgreSQL1Primeirospassos
V at a opco de verso. Neste momento, a verso 8.5 ainda se encontra em estgio alpha, optamos pela 8.4.2.
44 Opo de verso do PostgreSQL
A prxima tela traz a escolha do mirror de onde vamos baixar o SGBD, escolha qualquer um e confirme o salvamento do arquivo no final.
50
AdministraoProfissionaldoPostgreSQL1Primeirospassos
45 Escolha do site espelho
46 Tela de salvamento do arquivo
51
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Preparandooambiente
Ainda no estamos completamente preparados para receber o PostgreSQL. No temos sequer um descompactador para abrirmos o bz2. Execute o comando abaixo para instal-lo:#aptgetinstallbzip2
Com o bzip2 instalado podemos descompactar o fonto do PostgreSQL baixado anteriormente atravs do comando abaixo.$tarxvfpostgresql8.4.2.tar.bz2
Entre no diretrio gerado e liste seu contedo:$cdpostgresql8.4.2
$lsl
Voc vai obter uma sada como esta:total1744-rw-r--r-- 1 258 258 445 Abr 23 2004 aclocal.m4drwxrwxrwx 2 258 258 4096 Fev 1 15:03 config-rwxr-xr-x 1 258 258 801991 Dez 9 23:56 configure-rw-r--r-- 1 258 258 61120 Dez 9 23:56 configure.indrwxrwxrwx 41 258 258 4096 Fev 1 15:03 contrib-rw-r--r-- 1 258 258 1192 Jan 1 2009 COPYRIGHTdrwxrwxrwx 5 258 258 4096 Fev 1 15:21 doc-rw-r--r-- 1 258 258 4331 Jan 14 2009 GNUmakefile.in-rw-r--r-- 1 258 258 779345 Dez 10 00:08 HISTORY-rw-r--r-- 1 258 258 78387 Dez 10 00:08 INSTALL-rw-r--r-- 1 258 258 1423 Jan 20 2007 Makefile-rw-r--r-- 1 258 258 1287 Mai 6 2008 READMEdrwxrwxrwx 14 258 258 4096 Fev 1 15:18 src
Para seguir adiante, basta digitar o comando abaixo, mas no faa agora no, vamos conversar primeiro:$./configure
O comando acima est listado no arquivo INSTALL deste diretrio, voc at poderia seguir seus passos, mas vale uma pausa aqui. Precisamos instalar os pacotes requeridos pelo PostgreSQL. Para fazer tudo de uma s vez, execute o comando (no esquea de que onde houver # o comando deve ser realizado como root):#aptgetinstallgccmakelibreadline5devzlib1gdevflexbison
O processo de instalao feito atravs da verstil ferramenta make (ou GNU Make para os mais puristas). Softwares que a utilizam constroem um roteiro ditando cada passo que deve ser feito no ato de instalao, como criar diretrios, checar existncia de dependncias, tomar decises de acordo com alguma configurao na mquina e, claro, modificar o roteiro de acordo com informaes do usurio.
Este roteiro se chama GNUMakefile. Para cri-lo necessrio executar o arquivo configurepresente na listagem acima. Este arquivo um punhado de shell scripts que podem receber parmetros em tempo de chamada (faremos isso daqui a pouco) e vo escrever o nosso GNUMakefile de acordo com eles ou com o padro de suas configuraes.
Logo no incio das checagens do configure, ser gerado um erro se no tivermos na mquina
52
AdministraoProfissionaldoPostgreSQL1Primeirospassos
nenhum compilador C (isso mesmo, nosso elefante tambm feito em C). Da a necessidade do primeiro pacote do comando anterior: gcc.
Esse nosso bla-bla-bl sobre o make. Aps a execuo do configure, ele quem vai rodar o GNUMakefile gerado.
Os demais pacotes so recomendados estarem instalados. Sem a libreadline5dev e a zlib1gdev, a princpio nosso configure no vai passar, mas seria possvel desabilit-las. J flex e bison no impedem a instalao, mas tambm so teis.
Vejamos:
Libreadline5 uma biblioteca utilizada pelo console de linha de comando psql para guardar o histrico de comandos realizados e poder navegar por ele com o uso das setas. um recurso extremamente til, sobretudo no nosso caso j que contamos apenas com o modo texto para administrar o servidor. Caso voc tenha tendncias masoquistas v em frente e use a opo withoutreadline na chamada ao configure.
J Zlib utilizada pelos aplicativos de gerao e importao de backups (dumps) pg_dump e pg_restore. Sem ela, no ser possvel exportar e importar dumps compactados. Vou falar s por falar: se no quiser a zlib, use withoutzlib. Pronto, falei. Mas se voc disser que fui eu que falei isso, eu nego.
Flex e Bison so ferramentas Lex e Yacc respectivamente que podem ser usadas separadamente. Com elas, possvel criar novos interpretadores de programao (parsers). No so fundamentais para o uso do PostgreSQL (a no ser que voc esteja instalando uma verso ainda em desenvolvimento), mas outras ferramentas como o Slony-I podem se valer delas.
Calma, ainda no execute o configure. Pra qu tanta pressa?
Vejamos algumas opes de configurao:
I. TabelaAlgumasopesparaoconfigure
Opo (--opo=valor_default) Pra que serve?prefix=/usr/local/pgsql Certamente a configurao mais utilizada. Com ela voc
pode escolher o local base de instalao do servidor.execprefix Diretrio onde sero colocados arquivos dependentes da
plataforma. Em geral no informada valendo o mesmo caminho de prefix.
bindir=EXECPREFIX/bin Se voc quiser, pode colocar todos os executveis do PostgreSQL em um diretrio especfico.
libdir=EXECPREFIX/lib Local onde sero dispostas bibliotecas necessrias para o servidor rodar corretamente
includedir=PREFIX/include Onde sero salvos arquivos header C e C++withblocksize=8 Define o tamanho (em Kb) da menor unidade de
armazenamento. O PostgreSQL nunca vai ao disco escrever menos do que isso. Em geral, o padro 8Kb atende s necessidades.
with*, Existem diversas opes with. S para citar
53
AdministraoProfissionaldoPostgreSQL1Primeirospassos
withoutreadlineewithoutzlib
algumas:withperl e withpython para instalar respectivamente as linguagens Perl e Python para programar as funes do banco. withopensslpara habilitar conexes cifradas (SSL). withkrb5, withpam, withldap para habilitar outros mtodos de autenticao de conexes. As opes without j foram citadas.
withwalsegsize=16,withwalblocksize=8
Esses parmetros configuram o mecanismo WAL que nos aprofundaremos no captulo 4. A opo segsize expressa em Mb, pode ir de 2 a 64Mb e tem como padro 16Mb. A opo blocksize semelhante opo withblocksize.
Existem diversas outras opes, para conhec-las consulte a documentao oficial no endereo:
www.postgresql.org/docs/8.4/interactive/install-procedure.html.
InstalandooPostgreSQLapartirdocdigofonte
Agora que acabou nosso bla-bla-bl, execute o ./configure. Ah, j havia executado? Tranquilo.
Listando o diretrio novamente voc vai ver o GNUMakefile gerado:debian-pgsql:~postgresql-8.4.2# ls -ltotal 2020-rw-r--r-- 1 258 258 445 Abr 23 2004 aclocal.m4drwxrwxrwx 2 258 258 4096 Fev 1 15:03 config-rw-r--r-- 1 root root 227713 Fev 1 15:18 config.log-rwxr-xr-x 1 root root 39990 Fev 1 15:18 config.status-rwxr-xr-x 1 258 258 801991 Dez 9 23:56 configure-rw-r--r-- 1 258 258 61120 Dez 9 23:56 configure.indrwxrwxrwx 41 258 258 4096 Fev 1 15:03 contrib-rw-r--r-- 1 258 258 1192 Jan 1 2009 COPYRIGHTdrwxrwxrwx 5 258 258 4096 Fev 1 15:21 doc-rw-r--r-- 1 root root 4331 Fev 1 15:18 GNUmakefile-rw-r--r-- 1 258 258 4331 Jan 14 2009 GNUmakefile.in-rw-r--r-- 1 258 258 779345 Dez 10 00:08 HISTORY-rw-r--r-- 1 258 258 78387 Dez 10 00:08 INSTALL-rw-r--r-- 1 258 258 1423 Jan 20 2007 Makefile-rw-r--r-- 1 258 258 1287 Mai 6 2008 READMEdrwxrwxrwx 14 258 258 4096 Fev 1 15:18 src
O make baseado em alvos que voc passar no ato da chamada. Execute a instruo:$make
Ela equivale a dizer makeall. Isto ir compilar o servidor para instalao posterior.
Execute agora:$makeinstall
Note que colocamos aqui o sinal $ para representar a no obrigatoriedade de realizar o comando
54
AdministraoProfissionaldoPostgreSQL1Primeirospassos
como root. No entanto, se voc executou o ./configure sem opes de mudana de diretrio (ex.: prefix), o padro ser instalar no diretrio /usr/local/pgsql que certamente no existe e dever ser criado no makeinstall. Acontece que o diretrio /usr/local pertence ao root e s ele tem permisses de escrita neste diretrio. Em bom portugus, cara plida: Roda esta bagaa como root mesmo.
Psinstalao
Olha a, o passo anterior foi fcil demais. S que ele apenas instalou o servidor no prefix.
Checa l que o contedo dele:#lsl/usr/local/pgsql
total16
drwxrsrx2rootstaff4096Fev414:26bin
drwxrsrx6rootstaff4096Fev414:26include
drwxrsrx3rootstaff4096Fev414:26lib
drwxrsrx7rootstaff4096Fev414:26share
importante agora criar um usurio para administr-lo. A nica recomendao que este usurio conhecido como o cara no nosso servidor deve ser um usurio digamos xelelento no sistema operacional, ou seja, esquea o root, vamos criar outro.
Normalmente ele se chama postgres e est sozinho no grupo postgres ( meio autista o rapaz).
Digite o comando abaixo para criar o usurio:#adduserpostgres
No somos obrigados a chamar o usurio de postgres. Em minhas aulas, costumo at pedir para que os alunos criem um usurio com o nome deles, primeiro porque o postgres j est criado e j h uma outra instalao do PostgreSQL nas mquinas para as turmas de outras disciplinas. Mas tambm gosto de deixar claro que o superusurio do PostgreSQL normalmente, mas no obrigatoriamente, o postgres.
Este comando vai lhe solicitar algumas coisas listadas em destaque nas mensagens abaixo:Adicionandoousurio`postgres'...
Adicionandonovogrupo`postgres'(1001)...
Adicionandonovousurio`postgres'(1001)aogrupo`postgres'...
Criandodiretriopessoal`/home/postgres'...
Copiandoarquivosde`/etc/skel'...
DigiteanovasenhaUNIX:
RedigiteanovasenhaUNIX:
passwd:senhaatualizadacomsucesso.
Modificandoasinformaesdeusurioparapostgres
InformeonovovaloroupressioneENTERparaaceitaropadro
55
AdministraoProfissionaldoPostgreSQL1Primeirospassos
NomeCompleto[]:postgres
NmerodaSala[]:
FonedeTrabalho[]:
FoneDomstico[]:
Outro[]:
Istheinformationcorrect?[Y/n]y
Acredito que a sada seja bastante intuitiva pra no precisar explicar. Apenas note que no criei o grupo, o adduser criou pra mim.
Adduser na realidade um script em perl pra facilitar as coisas. Ele chama por baixo dos panos os comandos do sistema useradd (concordo, isso confunde mesmo) para criar o usurio e groupadd para criar o grupo dele.
Caso voc esteja querendo fazer algum script que crie automaticamente um usurio (sem interao humana), use useradd e veja como ele recebe parmetros que definem grupo, diretrio home, shell padro, etc atravs do comando manuseradd. No entanto, se voc quer apenas criar um usurio, adduser me parece uma escolha mais saudvel.
Criado nosso usurio, vamos iniciar o database cluster atravs do comando initdb.
Nota: O termo cluster usado tambm no PostgreSQL no a ver com um conjunto de mquinas de provem um servio como se fossem uma s, mas sim em meno ao conjunto de arquivos utilizados para prover uma instncia do banco. Ou seja, quando o servio estiver ativo, database cluster significa quais arquivos iro armazenar os dados de todas as bases, incluindo data files e logs de transaes (WAL).
A menos que voc crie novas tablespaces, todo o contedo fsico das bases de uma instncia ativa do PostgreSQL estar salva no interior do diretrio database cluster pr-configurado pelo initdb.
Os passos so os seguintes:
1. #mkdir/usr/local/pgsql/data
2. #chownpostgres:postgres/usr/local/pgsql/data
3. #supostgres
4. $cd/usr/local/pgsql
5. $bin/initdbDdata
Pra o bonde que eu quero descer. Ningum aqui rob pra s repetir comando sem saber o que est realmente fazendo (tenho alguns amigos robs que so assim).
No passo 1, ns, ento como usurio root (olha a #, t cego? Desculpe, me exaltei!), criamos um subdiretrio chamado data no local onde instalamos o PostgreSQL. Lembra do ./configureprefix? Se no, volta um pouco a fita.
No passo 2, com o comando chown (change owner), o caridoso root, disse que esse diretrio data
56
AdministraoProfissionaldoPostgreSQL1Primeirospassos
em questo no pertence a ele e sim ao usurio postgres, do grupo postgres. Se voc criou um usurio com outro nome, mantenha a coerncia aqui e use ele. O initdb explode o monitor se voc tentar rod-lo em um diretrio pertencente ao root, cuidado.
Mentira, ele vai fazer isso aqui :$bin/initdbDdata
Thefilesbelongingtothisdatabasesystemwillbeownedbyuser"postgres".
Thisusermustalsoowntheserverprocess.
Thedatabaseclusterwillbeinitializedwithlocalept_BR.UTF8.
ThedefaultdatabaseencodinghasaccordinglybeensettoUTF8.
Thedefaulttextsearchconfigurationwillbesetto"portuguese".
fixingpermissionsonexistingdirectorydata...initdb:couldnotchangepermissionsofdirectory"data":Operaonopermitida
Olha l a ltima linha. O initdb muda as permisses do diretrio para s o nosso novo usurio poder mexer com ele, os demais no conseguiro fazer nada (dando o famoso chmod700data). Se no conseguir, ele aborta a operao.
No passo 3, nos tornamos o usurio postgres. J no 4, fomos at o diretrio data criado na instalao. No 5, executamos o initdb para que ele monte a infraestrutura necessria dentro do diretrio data.
O resultado ser apresentado na tela como o disposto abaixo. Vale ressaltar que ainda vamos discutir o initdb com mais detalhes, o foco no esse por enquanto.Thefilesbelongingtothisdatabasesystemwillbeownedbyuser"postgres".
Thisusermustalsoowntheserverprocess.
Thedatabaseclusterwillbeinitializedwithlocalept_BR.UTF8.
ThedefaultdatabaseencodinghasaccordinglybeensettoUTF8.
Thedefaulttextsearchconfigurationwillbesetto"portuguese".
fixingpermissionsonexistingdirectorydata...ok
creatingsubdirectories...ok
selectingdefaultmax_connections...100
selectingdefaultshared_buffers...28MB
creatingconfigurationfiles...ok
creatingtemplate1databaseindata/base/1...ok
57
AdministraoProfissionaldoPostgreSQL1Primeirospassos
initializingpg_authid...ok
initializingdependencies...ok
creatingsystemviews...ok
loadingsystemobjects'descriptions...ok
creatingconversions...ok
creatingdictionaries...ok
settingprivilegesonbuiltinobjects...ok
creatinginformationschema...ok
vacuumingdatabasetemplate1...ok
copyingtemplate1totemplate0...ok
copyingtemplate1topostgres...ok
Success.Youcannowstartthedatabaseserverusing:
bin/postgresDdata
or
bin/pg_ctlDdatallogfilestart
WARNING:enabling"trust"authenticationforlocalconnections
Youcanchangethisbyeditingpg_hba.conforusingtheAoptionnexttimeyouruninitdb.
Telecurso 2000, vamos traduzir esse ingris a:Osarquivospertencentesaestesistemaebancodedadosseropropriedadedousuriopostgres.
Esteusuriodevetambmserodonodoprocessodoservidor.
Odatabasecluster(claro que no vou traduzir isso) serinicializadocomolocalept_BR.UTF8.
AcodificaopadrodeacordofoisetadaparaUTF8.
Aconfiguraodepesquisadetextoserdefinidacomoportugus.
Ajustandopermissesnodiretriodata...ok (olha a a fonte da discrdia, a culpa de no ter rodado antes dessa linha)criandosubdiretrios...ok
selecionandoopadromax_connections...100
selecionandoopadroshared_buffers...28MB
58
AdministraoProfissionaldoPostgreSQL1Primeirospassos
criandoarquivosdeconfigurao...ok(vamos falar muito deles ainda)
criandoabasetemplate1emdata/base/1...ok(tambm falaremos mais sobre isso)iniciandopg_authid...ok
iniciandodependncias
criandosystemviews...ok
carregandodescriesdeobjetosdesistema...ok
criandoconverses...ok
definindoprivilgiosnosobjetosnativos...ok
criandoinformationschema...ok(um esquema que abordaremos tambm)
vacuumingdatabasetemplate1...ok(vacuum tambm ser explorado aqui)copiandotemplate1paratemplate0...ok
copiandotemplate1parapostgres...ok
Sucesso.Vocjpodeiniciaroservidorusando:
bin/postgresDdata
ou
bin/pg_ctlDdatallogfilestart
Olha s, j foi criada a base de dados template1 e duas outras foram criadas a partir delas: template0 e postgres. Vale ressaltar que mesmo que o usurio owner do banco no seja o postgres, ser criada uma base de dados postgres, mas no ser criada uma base de dados para o outro usurio. Da a indicao de se usar o postgres mesmo.
Olha s o contedo do diretrio data agora:postgres@debianpgsql:/usr/local/pgsql$lsldata
total68
drwx5postgrespostgres4096Fev509:11base
drwx2postgrespostgres4096Fev509:11global
drwx2postgrespostgres4096Fev509:11pg_clog
rw1postgrespostgres3652Fev509:11pg_hba.conf
rw1postgrespostgres1631Fev509:11pg_ident.conf
drwx4postgrespostgres4096Fev509:11pg_multixact
drwx2postgrespostgres4096Fev509:11pg_stat_tmp
drwx2postgrespostgres4096Fev509:11pg_subtrans
drwx2postgrespostgres4096Fev509:11pg_tblspc
drwx2postgrespostgres4096Fev509:11pg_twophase
59
AdministraoProfissionaldoPostgreSQL1Primeirospassos
rw1postgrespostgres4Fev509:11PG_VERSION
drwx3postgrespostgres4096Fev509:11pg_xlog
rw1postgrespostgres16819Fev509:11postgresql.conf
A gente ainda vai conversar muito sobre esse pessoal a.
Inicializao
Iniciar o servidor simples tambm. H um comando vizinho do initdb, no diretrio bin, chamado postgres para esta tarefa. Antigamente este arquivo se chamada postmaster. Eles resolveram trocar para postgres para ser mais intuitivo, mas por razes histricas eu acredito, ainda existe um link simblico l chamado postmaster. Em resumo, postgres e postmaster so Batman e Bruce Wayne.
Voc pode iniciar o servidor com o seguinte comando:postgres@debianpgsql:/usr/local/pgsql$bin/postgresDdata
O que vem antes do comando em negrito s pra lhe mostrar o diretrio onde estamos para realizar este comando.
O problema que desta forma, todos os logs gerados nas operaes do banco sero jogados na tela e voc ter o console travado enquanto o servio do banco estiver ativo. Seria melhor fazer ento (estando no mesmo diretrio, s omiti aqui pra no encarecer seu livro):$bin/postgresDdata>data/logfile2>&1&
Agora, todas as mensagens da sada padro (stdout) sero desviadas para o arquivo chamado logfile, criado dentro de data. J a sada de erro (stderr), devido ao trecho 2>&1, ser tambm desviada para a sada 1 que a stdout, o vai acabar parando no mesmo arquivo. J o & do final para liberar o console.
Alm do postgres e seu alter-ego postmaster, existe um script bem legal chamado pg_ctl. Para iniciar com ele obtendo o mesmo resultado do comando anterior, use:$bin/pg_ctlllogfileDdatastart
Ele mais legal por ser mais limpo e possuir comandos como start, stop e restart.
Customizaes,facilitaeseautomatizaes
Vamos simplificar a vida do nosso usurio postgres. Para isso, edite o arquivo .bashrc no diretrio home do usurio postgres. Vamos aos passos:#aptgetinstallvim
#supostgres
$vi.bashrc
A primeira instruo instalou o pacote de melhorias (VI Improvement) pro editor Vi. Voc pode optar por no executar esse comando e ou usar o Vi cru (voc tomou seu remdio hoje?) ou usar algum editor de texto sua escolha como o pico ou seu sucessor nano.
60
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Na segunda instruo voc se transformou no postgres (e o sinal de menos foi para voc ser direcionado ao diretrio home do postgres). J na terceira, voc est abrindo para edio o arquivo .bashrc presente neste diretrio. Este arquivo sempre lido ao logon do usurio.
Se voc no est familiarizado com o Vi, tecle a letra i para entrar no modo de insero. No vou entrar no mrito de ensinar o Vi, at porque tambm me considero um usurio bsico dele, mas saiba que um editor que aceita comando, mas quando est no modo insero, vai aceitar digitaes para dentro do texto.
Existem alguns comando alias que esto comentados (iniciam com a #). Costumo retirar o comentrio para contar com comandos como ll, que j realiza umlsl.
Depois, v at o final do arquivo e insira as seguintes linhas:exportPGDATA=/usr/local/pgsql/data
exportPATH=$PATH:/usr/local/pgsql/bin
A primeira linha cria uma varivel de ambiente til para os aplicativos do PostgreSQL. Isto inclui o initdb, o postgres e o pg_ctl para que eles no precisem digitar a opo -D e informar o database cluster.
A segunda linha altera a varivel de ambiente PATH. Ela traz os caminhos para arquivos para os diretrios onde o interpretador de comandos vai varrer em busca de qualquer comando digitado. Assim, no ser necessrio informar o caminho para os comandos postgres, pg_ctl ou quaisquer outros do diretrio bin de nossa instalao.
Depois, tecle ESC e digite :wq (w para salvar write e q para sair quit).
Este arquivo s ser lido no prximo logon do usurio. Ento d o comando exit e entre com o supostgres novamente.
Agora saia. Vamos voltar a ser o root. Vamos dizer ao sistema que queremos iniciar o PostgreSQL no boot da mquina. O diretrio contrib da instalao (aquele diretrio que voc listou no ano passado logo aps o comando tar) traz uma srie de coisas interessantes (que vamos inclusive citar outras mais). Nele h um subdiretrio startscripts com scripts que vo servir para iniciar o banco em arquiteturas diferentes. O script que queremos o do arquivo linux.
Vamos aos comandos:debianpgsql:~postgresql8.4.2#cpcontrib/startscripts/linux/etc/init.d/postgresql
debianpgsql:~postgresql8.4.2#updaterc.dpostgresqlstart982.stop20016.
A primeira linha copia o script dentro do contrib/startscripts para o diretrio /etc/init.d/ que reservado na maioria das distribuies linux para scripts de start, stop, restart dos servios. Isso vai ser necessrio para o segundo comando. Note que inseri e destaquei em negrito o label anterior ao cursor para voc prestar ateno onde deve estar para executar o comando uma vez que utilizei um caminho relativo. Em resumo, esteja no diretrio de instalao ou reflita o caminho at o diretrio.
J seria possvel efetuar o start do servidor chamando o comando /etc/init.d/postgresqlstart. Veja o contedo desse arquivo, ele vai chamar o pg_ctl pra repassar o start pra ele.
O segundo comando um pouco mais obscuro e requer uma explicao prvia.
61
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Em ambientes Unix, existe o conceito de runlevels (nveis de execuo). Estes so categorizaes de operaes do sistema. Em outras palavras, quais processos devo levantar (ou derrubar) no momento que um determinado runlevel for chamado.
No Debian, os runlevels so:
0 Nvel de desligamento (halt)
1 Nvel single user / modo mnimo
2 a 5 Nveis de inicializao do sistema (o padro o 2)
6 Nvel de religamento (reboot)
Se voc inventar de executar o comando init 0, vai mandar o sistema desligar, uma vez que todos os scripts configurados para disparar no runlevel 0 chamam sua opo stop.
O comando updatercpostgresql vai dizer que queremos atualizar as chamadas automticas ao script postgresql (aquele que ns criamos no comando cp anterior). Dissemos que queremos que o sistema operacional chame o script passando o parmetro start, com prioridade 98 no runlevel 2 (o que chamado por padro quando ligamos a mquina). Dissemos que queremos chamar com o parmetro stop com prioridade 20 nos runlevels 0, 1 e 6.
Prioridade? O que isso?
simplesmente a ordem de chamada ao script. A senha da fila do caixa de um banco. Quando inventamos este nmero cabalstico 98 (sugerido pelo prprio script postgresql que criamos no /etc/init.d), apenas demos uma ordem muito alta, o que vai colocar o nosso servio PostgreSQL no final da fila de inicializaes. Isso bom, afinal o banco s deve iniciar depois de alguns servios fundamentais do sistema j terem iniciado. No stop, fizemos o contrrio, o nmero 20 j mais baixo, o que deve colocar o PostgreSQL para ser desligado logo no incio de desligamentos de servios no shutdown da mquina.
Olha s a listagem do diretrio /etc/rc0.d, que traz links para os scripts chamados neste runlevel. A linha do PostgreSQL foi destacada em negrito. O K remete a kill (chamamos com a opco stop) e o nmero 20 colocou ele no comeo da lista.#ll/etc/rc0.d
total4
lrwxrwxrwx1rootroot13Fev114:47K11atd>../init.d/atd
lrwxrwxrwx1rootroot15Fev114:47K20exim4>../init.d/exim4
lrwxrwxrwx1rootroot20Fev114:47K20nfscommon>../init.d/nfscommon
lrwxrwxrwx1rootroot23Fev114:47K20openbsdinetd>../init.d/openbsdinetd
lrwxrwxrwx1rootroot20Fev515:51K20postgresql>../init.d/postgresql
lrwxrwxrwx1rootroot20Fev114:29K25hwclock.sh>../init.d/hwclock.sh
lrwxrwxrwx1rootroot26Fev114:29K63mountoverflowtmp>../init.d/mountoverflowtmp
62
AdministraoProfissionaldoPostgreSQL1Primeirospassos
lrwxrwxrwx1rootroot17Fev114:29K90rsyslog>../init.d/rsyslog
rwrr1rootroot353Dez232007README
lrwxrwxrwx1rootroot18Fev114:29S20sendsigs>../init.d/sendsigs
lrwxrwxrwx1rootroot17Fev114:29S30urandom>../init.d/urandom
lrwxrwxrwx1rootroot22Fev114:29S31umountnfs.sh>../init.d/umountnfs.sh
lrwxrwxrwx1rootroot17Fev114:47S32portmap>../init.d/portmap
lrwxrwxrwx1rootroot20Fev114:29S35networking>../init.d/networking
lrwxrwxrwx1rootroot18Fev114:30S36ifupdown>../init.d/ifupdown
lrwxrwxrwx1rootroot18Fev114:29S40umountfs>../init.d/umountfs
lrwxrwxrwx1rootroot20Fev114:29S60umountroot>../init.d/umountroot
lrwxrwxrwx1rootroot14Fev114:29S90halt>../init.d/halt
Agora a listagem do /etc/rc2.d. Agora o PostgreSQL aparece com um S (start) e o nmero 98 o jogou pro fim da fila.#ll/etc/rc0.d
total4
rwrr1rootroot556Ago122008README
lrwxrwxrwx1rootroot17Fev114:29S10rsyslog>../init.d/rsyslog
lrwxrwxrwx1rootroot15Fev114:31S12acpid>../init.d/acpid
lrwxrwxrwx1rootroot15Fev114:47S20exim4>../init.d/exim4
lrwxrwxrwx1rootroot20Fev114:47S20nfscommon>../init.d/nfscommon
lrwxrwxrwx1rootroot23Fev114:47S20openbsdinetd>../init.d/openbsdinetd
lrwxrwxrwx1rootroot13Fev114:47S89atd>../init.d/atd
lrwxrwxrwx1rootroot14Fev114:29S89cron>../init.d/cron
lrwxrwxrwx1rootroot20Fev515:51S98postgresql>../init.d/postgresql
lrwxrwxrwx1rootroot18Fev114:29S99rc.local>
63
AdministraoProfissionaldoPostgreSQL1Primeirospassos
../init.d/rc.local
lrwxrwxrwx1rootroot19Fev114:29S99rmnologin>../init.d/rmnologin
lrwxrwxrwx1rootroot23Fev114:29S99stopbootlogd>../init.d/stopbootlogd
Instalaoviaaptget
Todo esse trabalho que tivemos (t, foi fcil, mas tivemos que executar algumas tarefas na unha) poderia ter sido dispensado se tivssemos instalado o postgresql atravs do apt-get. Do jeito que fizemos para instalar algumas bibliotecas necessrias.
Execute o comando:#aptgetinstallpostgresqlpostgresqlcontrib
Esse postgresql um metapacote que vai fazer o apt lhe perguntar se voc aprova a instalao dos pacotes libpq5, openssl, openssl-blacklist, postgresql, postgresql-8.3, postgresql-client-8.3, postgresql-client-common, postgresql-common, ssl-cert.
O pacote postgresql-contrib vai instalar o pacote postgresql-contrib-8.3.
Note que no Debian, no momento em que escrevo este material (denunciado pelas datas dos comandos ls utilizados) a verso do PostgreSQL no repositrio a 8.3.
Este o nico comando necessrio para que ele baixe dos repositrios todos os pacotes citados, instale o servidor, crie o usurio postgres (se no existir previamente), execute o initdb. Detalhe: se j houver um PostgreSQL rodando na porta padro (5432), ele vai detectar e definir a configurao para outra porta 5433 ou uma prxima disponvel. Ele vai ainda iniciar o sistema, colocar os executveis no PATH, criar o script de inicializao e coloc-lo para iniciar e encerrar junto com o sistema.
Ou seja, fazer absolutamente tudo que fizemos na mo. Ah, agora perdeu a graa! =)
Achei importante falar do processo na mo anteriormente para que voc saiba o que realmente est acontecendo. Verifique no final deste processo os diretrios onde ele vai jogar nossos arquivos.
1.1.2 InstalaodoEnterpriseDBnoWindowsDesde os anos 80, nos idos do Post-Ingres (nosso conhecido postgres) do professor da Universidade da Califrnia Michael Stonebraker, muitas empresas apoiaram o projeto do hoje conhecido sob o slogan o mais avanado banco de dados open source do mundo.
Nota: The world's most advanced open source database. Confira um link at mesmo cmico sobre iniciativas de atualizar este slogan no endereo: http://momjian.us/main/blogs/pgblog/2010.html#January_29_2010.
S pra citar algumas, a CommandPrompt, a EnterpriseDB e a SRA j lanaram verses comerciais do PostgreSQL, que possui licena BSD e permite este tipo de coisa.
Fundada em 2004, a EnterpriseDB contratou diversos nomes de peso do universo em redor do PostgreSQL Global Development Group (PGDG), como Bruce Monjiam, Dave Page, Heikki Linnakangas, Korry Douglas, entre outros. Recebe tambm investimentos pesados de empresas de como a IBM, NTT, Red Hat, Sony, entre outras que vem no PostgreSQL uma alternativa vivel a
64
AdministraoProfissionaldoPostgreSQL1Primeirospassos
produtos comerciais, sobretudo o Oracle (alis, o maior alvo dos produtos corporativos da EnterpriseDB) e na prpria EnterpriseDB como uma instituio de marca capaz de vencer barreiras de entrada em grandes empresas consumidoras que precisam do suporte e de peito forte pra bater se algo em seus bancos de dados der errado.
Nota: meu amigo, o mundo open source sim um mundo corporativo regido por empresas com interesses comerciais, por mais que s vezes selvagens, infelizmente legtimos. A prpria Sun h muito que investe bastante no PGDG, dispondo de um grupo liderado por Josh Berkus. Em 2008, ela adquiriu a MySQL AB, ento mantenedora do MySQL, o que assustou a comunidade PostgreSQL e em 2009 foi adquirida pela Oracle. O que levou at o prprio Monty Widenius, criador do MySQL, a mover uma campanha mundial ao estilo: Oh, e agora, quem poder nos defender? para que a Oracle no comprasse o MySQL temendo sua descontinuidade (http://helpmysql.org/pt/theissue/customerspaythebill). Posso estar defasado quando voc ler este material, mas at agora a Oracle nada mudou no MySQL a olho nu.
Uma das contribuies mais notrias da EnterpriseDB comunidade o instalador do PostgreSQL para Windows, mantido por Dave Page. Para baix-lo, v seo download do site oficial do PostgreSQL (1) e clique no link do pacote binrio para Windows (2).
47 Onde encontrar o PostgreSQL para Windows
65
AdministraoProfissionaldoPostgreSQL1Primeirospassos
L, voc vai se deparar com o link (3) do One click installer. One click chega a ser propaganda enganosa, mas ele ser bem fcil de instalar tambm.
48 Link para o one click installer
66
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Voc ser levado pgina da EnterpriseDB para baix-lo de l. H verses para outras plataformas, mas estamos aqui em busca da verso Windows (4).
49 Link do one click installer para Windows na EnterpriseDB
67
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Efetuado o download, execute o arquivo para iniciar a instalao.
50 Incio da instalao no Windows
68
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Sabe aquelas instalaes NNF? (Traduo infame: Next-Next-Finish). quase isso. Na prxima tela confira o local onde ele pretende instalar nosso PostgreSQL.
51 Escolha do diretrio de instalao
69
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Ele reserva uma tela tambm para que voc possa escolher o diretrio do database cluster. Lembra dele?
52 Escolha do diretrio do database cluster
70
AdministraoProfissionaldoPostgreSQL1Primeirospassos
A prxima tela j a da escolha da senha do usurio postgres. Aqui, diferente do primeiro instalador para Windows que saiu na verso 8.0 do PostgreSQL, e ainda est disponvel at a verso 8.3, voc no escolhe o usurio, eles ser necessariamente o postgres. Se ele no existir, o instalador dever cri-lo, se existir, voc fornecer a senha dele. A nica recomendao que ele no seja Administrador.
Nota: Um detalhe curioso que o instalador antigo recomendava que voc criasse senhas distintas para o usurio do Windows que detm o processo postgres e para o superusurio do banco. No entanto, aqui eles desistiram dessa idia, nem ao menos possvel fazer isso.
53 Escolha da senha do usurio postgres
71
AdministraoProfissionaldoPostgreSQL1Primeirospassos
A prxima tela inteira apenas para que voc escolha a porta onde ele vai rodar. Essa tela me deixou com pena da folha de papel gasta com sua impresso.
54 Escolha da porta
72
AdministraoProfissionaldoPostgreSQL1Primeirospassos
A prxima tela a das configuraes avanadas. Nem tanto. Escolha a regionalizao (locale) que preferir (falaremos mais sobre este assunto) e diga que voc concorda que a linguagem pl/pgsql seja instalada no template1, o que acabar replicando esta instalao para as demais bases criadas, uma vez que a template1 a template padro adotada nos CREATEs DATABASEs.
55 Tela de opes avanadas
73
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Opa. Agora est tudo pronto para instalar.
56 Pronto para instalar
74
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Note que assim como nos pacotes .deb no Linux, aqui a instalao vai rodar o initdb e iniciar o servidor.
57 Tela de incio da instalao
75
AdministraoProfissionaldoPostgreSQL1Primeirospassos
58 Tela de incio do servio
76
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Chegamos ao final. Agora, se voc pretender instalar softwares adicionais, clique em Finish com o checkbox marcado. Ele ir chamar o Stack Builder, que tambm estar disponvel no menu para chamadas posteriores.
59 Tela de finalizao da instalao
77
AdministraoProfissionaldoPostgreSQL1Primeirospassos
60 Tela inicial do Stack Builder Escolha o servidor ativo
78
AdministraoProfissionaldoPostgreSQL1Primeirospassos
61 Tela de opes de softwares adicionais do Stack Builder
79
AdministraoProfissionaldoPostgreSQL1Primeirospassos
1.1.3 InstalaonoUbuntuviaSynapticAinda mais fcil que a instalao no Windows, o gerenciador de pacotes Synaptic uma ferramenta grfica com funcionalidade semelhante ao apt-get. Nele, voc pode pesquisar algum software que ele vai buscar nos mesmos repositrios do apt-get.
Nota: O Synaptic no exclusividade do Ubuntu nem to pouco o apt-get do Debian. possvel ter um ambiente desktop bastante interessante sem muito esforo no Debian, como tambm existe verso Server do Ubuntu. No entanto, o que pretendi aqui foi mostrar as duas distribuies onde elas so mais comuns. mais fcil achar drivers para ambiente visual no Ubuntu e voc viu como interessante realizar a instalao mnima do Debian para no congestionar seu sistema (e por que no dizer potencializar os riscos de segurana) com a instalao de pacotes que no sero utilizados pelo PostgreSQL.
Nota: Os repositrios do Ubuntu so diferentes do Debian, mas so localizados a partir das configuraes do mesmo arquivo: /etc/apt/sources.list. Edite-o vontade se pretender adicionar ou remover novos repositrios de instalao.
Para abrir o Synaptic, v ao menu: Sistema > Administrao > Gerenciador de Pacotes Synaptic.
62 Onde est o Synaptic
Voc j deve saber que no Ubuntu ns no logamos como root. Precisamos criar uma conta de usurio durante a instalao. Este usurio ser um sudoer, ou seja, um usurio que tem condies de se fazer passar por root se chamar um dos comandos sudo ou gksu (um sudo visual). O link para
80
AdministraoProfissionaldoPostgreSQL1Primeirospassos
o Synaptic na verdade um comando gksusynaptic (se voc executar isso no terminal ter o mesmo resultado).
63 Tela inicial do Synaptic
Na tela inicial, digite Ctrl+F para abrir um pequeno dilogo para pesquisar. Entre com a palavra postgresql, voc ver a enorme quantidade de aplicativos ligados ao PostgreSQL.
64 Dilogo de pesquisa pelo postgresql
Com o boto direito, marque para instalar o meta pacote postgresql. Ele ir lhe informar que vai instalar os pacotes dispostos na imagem abaixo:
65 Tela de mudanas adicionais
81
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Instale tambm os pacotes postgresql-contrib (contribuies da comunidade) e pgadmin3 (cliente visual bem interessante instalado automaticamente no instalador do EnterpriseDB no Windows).
66 Pacotes a serem instalados
82
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Trabalhoso como no mtodo apt-get. Ele vai efetuar o download de tudo que for necessrio, realizar o initdb e levantar nosso servidor. Voc poder levantar e ir ao banheiro se desejar (por favor, deixe o livro sobre a mesa).
67 Dilogo de efetuando o download
83
AdministraoProfissionaldoPostgreSQL1Primeirospassos
68 Tela final. O servidor est sendo iniciado. Olha s onde ficaro os arquivos
84
AdministraoProfissionaldoPostgreSQL1Primeirospassos
1.2 InitdbInciododatabaseclusterO processo de criao do database cluster inicial merece um pouco mais de detalhamento. Alm do diretrio onde sero armazenados os arquivos de todos os databases criados, h outros parmetros que podemos passar neste momento. Confira os mais importantes deles na tabela abaixo:
II.TabelaOpesdeparmetrosmaisutilizadosparaoinitdb
Opo DescrioAmetodoauth=metodo
Mtodo que o servidor ir utilizar para autenticar as conexes dos usurios da mquina local. O valor padro trust, que significa que o servidor vai confiar que usurio quem diz ser, sem nem perguntar qual a senha dele. Veremos mais este assunto no Captulo 3 Autenticaes e Permisses.
85
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Ddiretriopgdata=diretrio
Opo que j conhecemos (se voc pulou a seo de instalao no Debian, talvez tenha pulado o que no devia). Define o diretrio onde dever ser criada a infraestrutura necessria para armazenar os arquivos de todas as bases de dados. Esta informao obrigatria, no entanto este parmetro pode ser omitido se houver uma varivel de ambiente PGDATA.
O initdb ir retornar uma falha caso o usurio em questo no seja dono do diretrio passado. O usurio que iniciar o servidor tambm dever ser o mesmo que detiver o diretrio e consequentemente executar o initdb.
Eencodingencoding=encoding
Especifica a tabela utilizada para representar os caracteres em campos desta natureza. Falaremos sobre este assunto em um tpico especfico mais adiante.
locale=locale,lc_collate=locale,lc_ctype=locale,lc_messages=locale,lc_monetary=locale,lc_numeric=locale,lc_time=locale
Define a regionalizao padro das bases de dados criadas no cluster. As verses lc_* so idnticas opco locale, mas servem para uma subcategoria especfica de regionalizao. Apenas locale afeta todas as categorias.
Este assunto tambm ser analisado no mesmo tpico que a opo encoding.
Xdiretrioxlogdir=diretrio
Especifica o diretrio onde sero salvos os logs de transao. utilizado em algumas configuraes que buscam desempenho onde estes logs so gravados em um diretrio montado em uma controladora de disco exclusiva para isso. A opco padro o subdiretrio pg_xlog abaixo de pgdata. Trataremos deste assunto no Captulo 4 Write Ahead Log e no Captulo 8 Tuning.
Uusurio,username=usurio
Nome do superusurio do banco. O padro o usurio do sistema que executar o initdb, no entanto possvel passar um usurio com um nome diferente dentro do servidor. O recomendado no utilizar esta opo, mas uma prtica utilizar o usurio postgres caso no seja este o nome do usurio no sistema operacional.
Wpwprompt
Opo que simplesmente vai solicitar a senha do superusurio do banco. Sem esta opo o superusurio criado sem senha e voc no tem condies de conectar usando algum mtodo que precise de senha como password ou md5 at que defina uma entrando por algum outro mtodo de autenticao como trust ou ident. Falaremos sobre isto novamente no Captulo 3. Autenticaes e permisses.
86
AdministraoProfissionaldoPostgreSQL1Primeirospassos
1.2.1 ArquivosediretriosdoclusterVamos tratar dos arquivos e diretrios gerados pelo init. Vamos dar uma olhada novamente no contedo do diretrio data. Iniciemos pelos diretrios:postgres@debianpgsql:/usr/local/pgsql/data$ll|grep^d
drwx6postgrespostgres4096Fev515:56base
drwx2postgrespostgres4096Fev911:50global
drwx2postgrespostgres4096Fev509:11pg_clog
drwx4postgrespostgres4096Fev509:11pg_multixact
drwx2postgrespostgres4096Fev912:49pg_stat_tmp
drwx2postgrespostgres4096Fev509:11pg_subtrans
drwx2postgrespostgres4096Fev509:11pg_tblspc
drwx2postgrespostgres4096Fev509:11pg_twophase
drwx3postgrespostgres4096Fev509:11pg_xlog
Diretriobase
O diretrio base onde ficam os arquivos de dados de todos os objetos de cada database. Ele organizado em um subdiretrio para cada database, confira uma listagem inicial:llbase
total20
drwx2postgrespostgres4096Fev1008:441
drwx2postgrespostgres4096Fev1008:4211563
drwx2postgrespostgres4096Fev1008:4411564
O diretrio 1 fcil. reservado aos arquivos da base template1. J os outros so reservados s bases template0 e postgres. Mas como saber qual deles?
Vamos l, primeiramente vamos entrar no psql para buscar nas tabelas de catlogo. Considerando que voc j tenha configurado o caminho para o diretrio bin do PostgreSQL instalado (se instalou sem ser a partir de cdigos fonte, o instalador j fez isso por voc).
Nota: Estou considerando que voc j tem um mnimo de familiaridade com instrues SQL e j teve contato com psql. Mesmo que este ltimo seja algum desconhecido, a prtica ao longo deste livro vai deix-lo mais familiarizado com a ferramenta.
$psql
psql(8.4.2)
Type"help"forhelp.
postgres=#selectdatname,oidfrompg_database;
datname|oid
87
AdministraoProfissionaldoPostgreSQL1Primeirospassos
+
template1|1
template0|11563
postgres|11564
(3rows)
A tabela de catlogo pg_database traz as informaes sobre as bases de dados j criadas. Veremos tabelas de catlogo no captulo 5 Rotinas Administrativas. O campo datname onde o nome de cada base armazenado. O oid (object identifier) um identificador de todo objeto no PostgreSQL.
Nota: O PostgreSQL um SGBD que implementa diversas caractersticas do modelo objeto-relacional. Dentre elas o identificador de objetos. No PostgreSQL, cada tabela, sequncia, registro, database, etc, possui um identificador seguindo a premissa da OO que diz que todo objeto possui uma referncia.
Apesar de alguns esforos nos padronizaes SQL ANSI mais recentes, o modelo objeto-relacional no um padro claramente definido. Inclusive foi visto por muitos como algo que trouxe mais complexidade aos SGBDs relacionais. Eles diferem bastante em o qu e como implementam. Uma boa leitura sobre o assunto o livro de um dos precursores do PostgreSQL, o professor Michael Stonebraker, Object-Relational DBMSs: The Next Great Wave, Morgan Kaufmann Pub. um pouco antigo, de 1996, mas uma leitura bem interessante.
Um material bem interessante, apesar de tambm no to recente (2003), disponvel na site da ULBRA-RS sobre como o PostgreSQL implementa o modelo objeto-relacional o TCC de Denise Boness Cunha entitulado: Estudo comparativo sobre caractersticas de bancos de dados objeto relacionais, onde ela discute como o PostgreSQL e o Oracle tratam este modelo.
H uma ferramenta, disponvel apenas no contrib, chamada oid2name. Vamos instal-la para no precisar realizar consultas diretamente nas tabelas do catlogo.debianpgsql:~/postgresql8.4.2/contrib/oid2name#make
gccO2WallWmissingprototypesWpointerarithWdeclarationafterstatementWendiflabelsfnostrictaliasingfwrapvI../../src/interfaces/libpqI.I../../src/includeD_GNU_SOURCEcooid2name.ooid2name.c
gccO2WallWmissingprototypesWpointerarithWdeclarationafterstatementWendiflabelsfnostrictaliasingfwrapvoid2name.oL../../src/portlpgportL../../src/interfaces/libpqlpqL../../src/portWl,asneededWl,rpath,'/usr/local/pgsql/lib'lpgportlzlreadlinelcryptldllmooid2name
debianpgsql:~/postgresql8.4.2/contrib/oid2name#cpoid2name/usr/local/pgsql/bin/
88
AdministraoProfissionaldoPostgreSQL1Primeirospassos
Estamos no diretrio oid2name do contrib, execute o comando make para compilar a ferramenta. Depois copie para o diretrio bin do servidor instalado. Ao logar como postgres, simplesmente execute o comando abaixo:postgres@debianpgsql:~$oid2name
Alldatabases:
OidDatabaseNameTablespace
11564postgrespg_default
11563template0pg_default
1template1pg_default
Nota: O executvel oid2name funciona de modo semelhante s demais ferramentas do diretrio bin que precisem conectar ao servidor (e.g. psql, createdb, etc). Consulte oid2namehelp para mais opes de comando.
O nome do diretrio de cada base de dados justamente o OID dele que voc pde conferir na consulta acima ou atravs da oid2name. Vamos criar uma nova base e verificar o diretrio criado.postgres=#CREATEDATABASElivro;
CREATEDATABASE
postgres=#\q
postgres@debianpgsql:/usr/local/pgsql/data$llbase/
total16
drwx2postgrespostgres4096Fev1008:441
drwx2postgrespostgres4096Fev1008:4211563
drwx2postgrespostgres4096Fev1008:4411564
drwx2postgrespostgres4096Fev1008:5016384
Um novo diretrio (16384) criado automaticamente. Dentro de cada um desses diretrios, existem diversos arquivos. Se voc um dia pensou que a base template1 era vazia, d s uma olhada no contedo de seu diretrio.postgres@debianpgsql:/usr/local/pgsql/data$lsbase/1
112114742602_vm2615_fsm266327023600_fsm
1131147626032615_vm266427033600_vm
11447114772603_fsm2616266527043601
11447_fsm114792603_vm2616_fsm266627533601_fsm
11447_vm1148126042616_vm26672753_fsm3601_vm
1144912472605261726682753_vm3602
114511247_fsm2605_fsm2617_fsm266927543602_fsm
114521247_vm2605_vm2617_vm267027553602_vm
89
AdministraoProfissionaldoPostgreSQL1Primeirospassos
11452_fsm124926062618267327563603
11452_vm1249_fsm2606_fsm2618_fsm267427573603_fsm
114541249_vm2606_vm2618_vm267528303603_vm
11456125526072619267828313604
114571255_fsm2607_fsm2619_fsm267928323605
11457_fsm1255_vm2607_vm2619_vm268028333606
11457_vm125926082620268128343607
114591259_fsm2608_fsm2620_fsm268228353608
114611259_vm2608_vm2620_vm268328363609
11462141726092650268428373712
11462_fsm14182609_fsm2651268528383764
11462_vm1742609_vm265226862838_fsm3764_fsm
114641752610265326872838_vm3764_vm
1146623282610_fsm2654268828393766
1146726002610_vm2655268928403767
11467_fsm2600_fsm2611265626902840_fsm548
11467_vm2600_vm2612265726912840_vm549
1146926012612_fsm265826922841PG_VERSION
114712601_fsm2612_vm265926933501
114722601_vm2613266026963502
11472_fsm26022614266126993503
11472_vm2602_fsm2615266227013600
Todos esses arquivos foram gerados a partir dos objetos existentes na base de dados. Por mais que a template1 normalmente no tenha nenhuma tabela criada no esquema padro (public), ela j traz 5 esquemas, onde os outros possuem sim diversos objetos.$psqltemplate1
psql(8.4.2)
Type"help"forhelp.
template1=#\dn
Listofschemas
Name|Owner
+
information_schema|postgres
pg_catalog|postgres
90
AdministraoProfissionaldoPostgreSQL1Primeirospassos
pg_toast|post