postgresql admin cap1

Upload: ribeirosis

Post on 14-Oct-2015

134 views

Category:

Documents


1 download

TRANSCRIPT

  • 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