Planeta PostgreSQL-BR

12/05/2008

Fabio Telles

PGCon Brasil 2008

Está no ar o site do PGCon Brasil 2008. Para quem não sabe, esta é a sigla da “Conferência Brasileira de PostgreSQL”. Na sua segunda versão, o evento ocorrerá dentro da Unicamp, em Campinas/SP. A data também já está fechada: 26 e 27 de Setembro, numa sexta e sábado. Então, já reserve a data para “o maior evento sobre bancos de dados livres do Brasil”. Após contar com mais de 200 participantes em 2007, a expectativa é de ter mais de 300 pessoas este ano.

Alguns detalhes interessantes:

  • A chamada de trabalhos internacional. Espera-se a vinda de 2 desenvolvedores internacionais, além dos desenvolvedores nacionais.
  • O número de desenvolvedores nacionais parece que está aumentando neste ano e o número de colaboradores na organização do evento também.
  • O plano de captação do evento já está no ar também, se você conhece alguém que poderia patrocinar o evento, não deixe nos avisar.
  • Se você quer ajudar a divulgar o evento, já temos banners para você colocar no seu blog, site, etc.
  • As inscrições para o evento ainda não começaram, mas quem quiser ir fazendo reservas num hotel, você já pode fazer sua reserva. Conseguimos proços especiais para os participantes do evento.
  • Para se ter uma idéia, para fazer o site do evento, foram dezenas de e-mails trocados na lista pgbr-dev o que tornou a lista mais movimentada que a lista pgbr-geral. Um recorde. Gostaria de agradecer a contribuição do Dickson S. Guedes,  Euler Taveira,  Leandro Dutra, Leonardo César, Rodrigo Gomes Santana, Rodrigo Marins, Sebastian SWC, Thiago Risso e outros que não lembro agora por terem contribuído para o site sair.

Em breve, estaremos melhorando o site do evento, colocando mais informações, abrindo a chamada de trabalhos nacional e abrindo as incrições também.  Por enquanto é só pessoal. :-)

by Telles at 12/05/2008 04:27

02/05/2008

Fabio Telles

Segurança no PostgreSQL - Parte I: “A Saga”

Já faz um tempo que ando investigando a parte de segurança em Bancos de Dados. Passei um tempão estudando a parte de segurança no Oracle e andei investigando algumas questões sobre o assunto aqui e acolá neste blog e na palestra sobre melhores práticas que fiz no FISL 9.0 e no PGCon Brasil 2007. Calhou de ontem eu estar conversando com o Dickson Guedes no IRC e resolvemos escrever um pouco sobre segurança no PostgreSQL. A idéia é para variar um pouco um tanto ambiciosa: fazer uma lista de possíveis melhorias que seriam interessante implementar no PostgreSQL para melhorar a segurança. Uma segunda etapa seria colocar a mão na massa e tentar implementar algum patch no PostgreSQL. Particularmente eu tenho muito receio de abrir o código fonte e sair mexendo. Manjo pouco de C e não tenho tanto domínio assim do funcionamento interno de SGDBs para fazer isso. Mas por outro lado, se eu não fizer o fike nunca vai me deixar em paz… e ao fim e ao cabo, a gente só aprende a fazer fazendo!!! Por fim, existe uma segunda intenção, que é começar a escrever coisas mais detalhadas sobre este assunto, iniciando assim alguns capítulos do livro sobre PostgreSQL que começa a sair do papel entrar no ar. Particularmente, eu acho que só a parte de segurança já é suficiente escrever mais de 100 páginas. Bom, de toda forma, todos aqueles que lerem este texto e sentir que há algum equívoco ou que falta alguma coisa está convidadíssimo a colaborar, seja nos comentários, seja enviando um e-mail ou mesmo no IRC.

Caramba… mas segurança é um tema tão complexo assim? Bom, depende de como você define o que é segurança em SGDB para você. Vamos começar pensando em duas ou três formas de se enarar o problema:

  • Segurança em SGDB não se refere apenas ao seu banco de dados, diz respeito a toda a cadeia tecnologia associada a sua aplicação, uma vez que um único elo fraco da sua solução de TI põe em risco o conjunto como um todo. Então não basta pensar no SGDB isoladamente. Temos que pensar no equipamento onde o SGDB se encontra, no SO, na instalação do SGDB, nos dados contidos no banco de dados, na aplicação acessando o banco de dados e finalmente no usuário que precisa destas informações;
  • Todos estão carecas de saber, mas não custa repetir: os bancos de dados guardam um patrimônio valioso: informação. Quando você tem um problema de segurança num SGDB, são os seus dados que estão ameaçados. A pergunta que sempre se faz é “quanto vale a informação guardada nos bancos de dados”. Melhor pergunta seria: “quanto custa a perda destes dados?”.
  • Segurança tem haver com coisas com o potencial de tirar o sono/emprego de toda uma equipe de TI. O desempenho é importante. Algumas vezes é muito importante. Mas em geral, a segurança vem em primeiro lugar. Esta importancia hoje tem nome, endereço, telefone, e-mail e tudo o mais. Depois da onda gerada pelo SOx nos Estados Unidos, a segurança passou a ser mais importante ainda. O COBIT e o ITIL e suas normas e regulamentações associadas são representam mais uma pressão na busca por mais segurança em torno das informações.

Muito bonito tudo isso… mas enfim, quando falamos em segurança qual é a pauta em questão? Ah sim… muitas coisas, vejamos algumas:

  • Integridade: tem muito haver com ACID. Seus dados não podem se corromper, independente do que venha a acontecer. Mesmo que seus dados se tornem indisponíveis durante um certo período (devido a uma queda de energia, falha na rede ou num disco por exemplo) você tem que garantir que uma vez que o problema de indisponibilidade esteja resolvido, todos os dados tem que reaparecer intactos. Integridade também tem muito haver com o uso de restrições de integridade, para que um erro do usuário ou da aplicação não permita que os dados sejam corrompidos. O uso das restrições de integridade devem proteger seus dados contra alterações que não estão de acordo com as suas regras de negócio;
  • Perda de dados: a preocupação número 1 de todo administrador de banco de dados é evitar ao máximo a perda de dados. Aí entra em cena a mais tediosa das tarefas: o backup. Ocorre que em bancos de dados, não existe uma única forma de se fazer um backup, existem várias estratégias. De toda forma, é preciso definir antes de mais nada: qual é o volume máximo de dados que admissível perder? Os dados relativos a última semana de operação? Talvez o último dia? A última hora? Nem um segundo sequer? Bom, é claro que ninguém quer perder nada, mas você sabe realmente qual é a o grau de proteção que a sua atual política de backup lhe oferece?
  • Disponibilidade: capacidade de manter o acesso às informações de forma contínua. Falhas humanas, falhas de software e falhas de hardware podem gerar indisponibilidade a qualquer momento. A sua tolerância a indisponibilidade vai variar conforme a importância e rítimo de operação das suas aplicações. Algumas não podem parar nunca e trabalham em regime 24/7. Outras só precisam estar ativas em horário comercial, mas não admitem um minuto sequer de indisponibilidade neste período. Seja como for, é importantíssimo definir qual é o SLA agregado aos serviços prestados pelo banco de dados para que se possa traçar uma estratégia adequada para se atingir estes objetivos. Sua estratégia deve garantir que mesmo ocorrendo uma falhas, mesmo graves, os dados devem estar disponíveis no prazo determinado pelo seu contrato de SLA.
  • Controle de Acesso: capacidade de que as informações disponíveis no banco de dados estejam disponíveis para as pessoas corretas, que terão permisão de acesso apenas as operações permitidas para o seu perfil. Geralmente o controle de acesso se dá a partir de objetos do banco de dados, mas pode se re referir ao acesso de apenas um parte dos dados de um objeto, como apenas algumas linhas de uma tabela. O controle de acesso pode limitar a quantidade de recursos que você pode utilizar no banco de dados. Os recursos podem ser o número de conexões ativas, memória, processador, volume de dados acessados em disco, etc.
  • Auditoria: registro de operações realizadas no banco de dados. O registro pode conter informações sobre quem, realizou que tipo de operação, sobre qual objeto e em qual momento. O registro também pode conter quais foram as alterações realizadas, permitindo reconstruir os dados num estado anterior se necessário. A auditoria também pode significar monitorar outras condições do banco de dados, como picos de utilização, espaço em disco e outros detalhes que se deseje registrar.

Como se pode ver, ao falar em segurança, temos inúmeros desafios pela frente. Temas consagrados como “Alta Disponibilidade”, “Backup”, “Política de Mínimo Privilégio”, “Trilhas de auditoria” entre outros, fazem parte do dia-a-dia (ou seria noite-a-noite?) dos que se preocupam com segurança. Em grandes equipes de TI, há pessoas especializadas em segurança. Muitas vezes, encontramos Administradores de Bancos de Dados especializados em um ou dois aspectos da segurança, como o controle de acesso e auditoria.  Administradores de Dados são especialistas em avaliar problemas de restrição de integridade enquanto os Administradores de Sistemas costumam se preocupar com backup e alta disponibilidade.

Com isso, em mente, vejamos alguns capítulos de deveremos abordar em seguida:

  • Trabalhando de forma segura:
    • Escrevendo código robusto e flexível;
    • Usando o psql;
    • Documentando o trabalho realizado;
  • Ambientes de Trabalho
    • Isolar para proteger
    • Ambiente de Produção
    • Ambiente de Homologação
    • Ambiente de Testes
    • Ambiente de Laboratório
  • Integridade
    • Modelagem de Dados;
      • Domínios;
      • Sequências;
      • Chaves Primárias;
        • Chaves Primárias artificiais X naturais;
        • Quando é permitido criar uma tabela sem PK?
      • Chaves Estrangeiras;
      • Restrição UNIQUE;
      • Restrição NOT NULL;
      • Restrição CHECK;
      • Gatilhos;
      • Visões Materializadas;
    • ACID
      • Transações
      • MVCC
      • LOCKs
      • Write Ahead Log
        • Espelhamento dos logs;
        • Arquivamento e Stand By;
        • Recuperação de instância;
  • Perda de Dados e Disponibilidade;
    • Backup
      • Backup lógico;
      • Backup físico off-line;
      • Backup físico on-line;
        • Dificuldades com grandes bases;
      • Backup via Snapshot;
    • Técnicas de fail over
      • Hardware Redundante;
        • RAID
      • LVM e RAID por software;
      • Stand By;
      • Heart beat;
      • Replicação X Clusterização;
    • Replicação
      • Replicação Síncrona X Assíncrona;
      • Replicação Multi Master X  Master/Slave
      • Replicação via log de transação;
      • Replicação via commit em duas fases;
      • Replicação via gatilhos;
      • Replicação via Midleware;
      • Implementações para PostgreSQL;
    • Cluster
      • Shared Nothing
      • Shared All
      • Implementações para PostgreSQL;
  • Controle de Acesso
    • Política do Privilégio Mínimo;
    • SQL Injection;
    • Segurança na autenticação
      • Visões;
      • Funções;
      • Serviços de Diretório;
    • Ferramentas de controle no PostgreSQL;
      • GRANT / REVOKE
      • Roles
      • Limite de acesso aos recursos do servidor;
      • pg_hba.conf
      • SELinux
    • Estratégias de Autenticação da Aplicação;
      • Autenticação Interna;
        • Uso de grupos de usuários;
        • Impedindo os usuários de obterem acesso por fora da aplicação;
        • Lidando com senhas;
      • Autenticação Externa;
      • Autenticação via Aplicação;
        • Pool de Conexões;
  • Auditoria
    • Auditoria dos dados:
      • Utilizando campos adicionais em tabelas já existentes;
      • Utilizando tabelas de autitorias alimentadas por RULEs e TRIGGERs;
      • Utilizando o log do PostgreSQL;
      • O problema da identificação do usuário em aplicações com Autenticação via Aplicação;
        • Criando uma variável de sessão;
      • Protetendo as informações de auditoria;
    • Monitorando o seu servidor:
      • Monitorando a disponibilidade;Monitorando a performance;
      • Monitorando o espaço em disco;
        • Dividir para melhor enchergar;
      • Disparando alertas;

Como se pode ver, temos muito assunto pela frente. Não tenho nenhum ímpeto de escrever seguindo uma órdem específica, provavelmente eu deverei escrever numa ordem caótica e tentar juntar as peças aos poucos.

by Telles at 02/05/2008 01:43

24/04/2008

Fabio Telles

Fotos do PostgreSQL no FISL 9.0

Segue o link para algumas fotos do pessoal do PostgreSQL no FISL 9.0. Não tirei muitas fotos por lá e cheguei atrazado e não pude ficar lá no sábado, então faltaram algumas figuras importante que não apareceram. De toda forma, fica aqui um registro parcial.

by Telles at 24/04/2008 12:33

Fernando Ike

FISL 9.0: sobrevivi…

  Este ano de 2008 a Festa da Padroeira, Woodstock Geek, ou vulgo FISL 9.0 e sobreviveu é um guerreiro porque este ano foi o melhor FISL de todos!!!

  De volta ao Centro de Convenções da PUCRS, este ano contou com mais de 7000 participantes, mais patrocinadores, mais palestras de boa qualidade, mais estandes, mais grupo de usuários e para manter a tradição a rede wireless do FISL funcionou quando bem queria. :)

   Esse ano foi um pouco mais difícil de acompanhar porque colocaram os eventos comunitários num horário bom para pessoas que gostam de socialização (entende-se como tomar cerveja). Os eventos comunitários do Debian Brasil e do Gnome estavam marcados para  às 9 horas da manhã o que acarretou em um processo extramente lento da minha mente acordar, obrigando a consumir muitos litros de café…

  Esse ano como outros anos, foi muito bom rever os amigos, conhecer novas pessoas e voltar tomar cerveja Polar e Coruja. Esse ano, para variar continuo minha saga de esquecimento e leseira explicíta e a vítima da vez foi a Fernanda Chaves, esqueci completamente do jantar com uma galera bacana  num restaurante japonês em Porto Alegre chamado Sakae. Tive alguns contra-tempos que tulmuturam minha pequena vida insana durante o FISL mas isso fica para quem sabe um outro post.

  As plenárias do Debian Brasil e Gnome foram muito boas e as palestras que consegui assitir foram excelentes, algumas não era possível entrar pois os auditórios estavam lotados, pareciam ônibus cheio no horário do rush.

  As palestras de PostgreSQL foram boas (exceto a minha…) mas faltou o evento comunitário, para variar, eu esqueci de inscrever o evento comunitário do PostgreSQL. Gostei da organização da galera da Associação Python Brasil que organização uma mini pycon dentro do FISL, quem sabe no FISL 10.0 conseguiremos fazer o mesmo com o Debian e PostgreSQL. :)

  O Cesinha com sua pergunta surpresa, deixou muitas pessoas sem resposta ou melhor levemente constrangidas. :)

  Muitos reclamaram das palestras, do temário, da rede, do apelo comercial. Eu avalio um pouco diferente:

1 - Palestras: As palestras aprovadas pelo temário foram muito boas, porém não tem como o temário avaliar a dicção e presença de palco de um palestrante, muitos novos palestrantes apareceram outras muitos famosos simplesmentes não foram, alguns conseguiram avisar que não chegariam ou conseguiram um substituto a altura.
   Também foi muito positivo as pessoas da comunidade dispondo-se para avaliarem as palestras, claro que precisa de ajustes mas foi um dos pontos positivos do FISL.
   O evento está crescendo, obviamente terá mais palestras de patrocinadores, algumas palestras que pouco agregaram ao evento e eram bem fracas tecnicamente, isso teremos que conviver.

2 - Infra-estrutura: Segundo os números preliminares, o evento todo consumiu mais de 140GB de banda, controlar isso não é uma tarefa simples mas novamente os problemas com wireless aconteceram, se não acontecessem não seria o FISL. :)

3 - Desafios de programação: Gostei do  INDT ter organizado o desafio e a Trolltech ter trazido uma pessoa para uma oficina de programação em QT.

4 - Os Grupos de Usuários: Eles são um show a parte, mas esse ano parecia que o espaço estava um pouco menor mas não consigo afirmar pois o evento estava com muita gente (+7400 pessoas).

5 - Auditórios: Maioria das palestras estavam com os auditórios lotados, se a organização do FISL pretende que a décima edição tenha 10 mil participantes, ano que vem terão problemas com os auditórios.

6 - De volta para PUCRS: Apesar de gostar muito de ter voltado para PUCRS o FISL, sai do evento com a sensação ela ficou pequena para evento como o FISL.

7 - Público: Muito variado, tinha pessoas que estão desde a primeira edição à pessoas que não sabiam absolutamente nada, muito positivo pois aponta possíveis padawans. Também vale ressaltar que o público feminino aumentou significativamente, refletindo a mudança na área de TI do aumento da participação de mulheres.

    Estive pensando, 10 anos de FISL, décima edição. Está na hora de alguém contando as aventuras de organizar o evento, voluntários? :)

… Rumo aos 10 mil na edição 10.0…

Obs1: Perdi o recarregador de celular, não pode ser FISL se eu não esquecer/perder alguma coisa. :P

Obs2: Todas as camisetas no estande do Debian e do PostgreSQL foram vendidas. :)


 

by fernando.ike at 24/04/2008 04:08

23/04/2008

Ribamar FS

ribafs


Replicação com Slony no Windows e no Linux

Depois de muito pesquisar e testar algumas soluções finalmente consegui ver funcionando replicação no PostgreSQL.

Aqui mostrarei a solução que fiz funcionar, que usa o Slony-I e o pgAdmin, com PostgreSQL-8.2, tanto no Windows quanto no Linux (Ubuntu 7.10).

De início tive como base este tutorial:
http://people.planetpostgresql.org/dpage/index.php?/archives/51-Setting-up-Slony-I-with-pgAdmin.html

também divulgado na lista internacional do PostgreSQL.

Esse tutorial destina-se ao WindowsXP. Testei e funcionou direitinho no Windows.

Acontece que ele se refere de vez em quando ao Linux o que me motivou a tentar a mesma solução no Linux (Ubuntu 7.10).

Pesquisei outros tutoriais e um bom livro. Acabei por conseguir ver a replicação também no Linux.

Veja um PDF com os passos aqui:

http://postgresql.ribafs.net/slonywl

by ribafs at 23/04/2008 10:57

22/04/2008

Dickson dos Santos Guedes

FISL 9.0 - 18 de Abril


FISL 9.0 - 18 de AbrilA última palestra que participei foi a do Diogo Biazus sobre replicação assincrona multi-mestre, expondo de maneira clara, profissional e bem-humorada, sua experiência com Bucardo

Apesar das limitações do Bucardo, na sua versão atual, para a sua proposta ele trabalha muito bem, e tem um futuro promissor. Já andei olhando seu código fonte, e fazendo alguns testes básicos e pretendo, seguindo as considerações expostas na palestra do Diogo, aplicá-lo em um ambiente com elevado número de transações por segundo e obviamente, os resultados serão postados aqui.

Em resumo, os contatos efetuados no FISL esse ano valeram a pena, bem como o elevado grau de informação, qualidade e profissionalismo dos palestrantes. Espero que o PgCon Brasil deste ano seja tão bom (ou melhor) quanto foram as palestras sobre o nosso elefantinho no FISL.

Bom é isso.

by Guedes at 22/04/2008 04:11

Fabio Telles

PostgreSQL no FISL 9.0

Custei a chegar em Porto Alegre. O aeroporto estava “sem teto” em Porto Alegre devido neblina, que depois fiquei sabendo, é típica desta época do ano. O resultado foram 5 horas de espera em Guarulhos. Isto não chegou a ser um grande problema, pois havia bastante gente para bater papo no aeroporto. Havia uma verdadeira caravana no aeroporto. Enfim, consegui chegar na PUCRS perto das 12h.

O evento estava realmente lotado. Segundo a organização, cerca de 7500 pessoas estavam lá, fora os alunos da PUCRS que passeavam livremente por lá, trazendo uma contribuição significativa para o “astral” do evento. Os corredores estavam lotados. As salas estavam lotadas e tinha palestra com gente sentada no chão e amontoado na porta. A pesar das boas palestras, o melhor foi reencontrar os amigos por lá. Gente que eu não via faz tempo. Foi muito bom.

O Stand do PostgreSQL estava bem organizado, mas logo se mostrou apertado para a multidão que aparecia por lá no intervalo das palestras. Tive a oportunidade de conversar com muita gente interessante por lá. Muita gente querendo saber mais sobre PostgreSQL, tirar dúvidas, fazer entrevistas, comprar camisetas ou mesmo bater papo e tomar um café! Não tenho a menor idéia de quantas pessoas passaram por lá, mas foi muita gente.

As maioria das palestras de PostgreSQL se concentraram no primeiro dia. Casa cheia em todas as palestras, inclusive na minha que ocorreu no último horário, ás 20h. Muita gente ficou depois do término da palestra para tirar dúvidas. Fomos convidados a nos retirar da sala pela organização que precisava liberar o local. Para todos aqueles que me pediram cópias dos meus slides, eles estão disponíveis para download aqui. Para quem não sabe, a palestra foi parecida com a do PGCon Brasil 2007, com o título “Fazendo um Elefante Passar Debaixo da Porta”, sobre melhores práticas para DBAs e desenvolvedores. Melhorei algumas coisas e possivelmente piorei outras. Acredito que em breve teremos todas as palestras do PostgreSQL no site da comunidade.

Infelizmente não pude ficar até o final do evento, fui embora na 6ª feira a noite, mas deu para curtir um bocado do evento e tomar algumas Polares com os amigos e renovar meu estoque de camisetas :-) . Hoje devo estar indo ainda em outro evento com a presença dos nossos palestrantes internacionais do FISL. Eles estarão na UNICAMP para o Dia PostgreSQL promovido pela Dextra.. Na verdade eu devo aproveitar o momento para acertar alguns detalhes do PGCon Brasil 2008, que vai ocorrer na UNICAMP nos dias 27 e 28 de setembro. Muito em breve teremos notícias.

Bom, vou ficando por aqui… hoje vou poupa-los de um post enorme para descrever em detalhes o FISL. Fico apenas com a descrição do David Fetter no PostgreSQL Weekly News: “FISL had almost 7500 participants this year, making it the world’s largest FLOSS conference.”

by Telles at 22/04/2008 01:07

18/04/2008

Dickson dos Santos Guedes

FISL 9.0 - 18 de Abril


FISL 9.0 - 18 de AbrilA Embrapa apresentou uma palestra sobre recuperação de informações em base de dados textuais, demonstrando sua experiência com o uso de ferramentas, tanto proprietárias quanto livres.
Ao iniciarem seus estudos com ferramentas livres várias alternativas foram utilizadas, inclusive o tsearch2 do nosso elefantinho foi testado, no entanto, para a necessidade deles de fazer indexação de textos, as alternativas eram mais complexas e exigiam o acoplamento de outras soluções mais especializadas.

Em uma visão geral da palestra foram apresentados os seguintes topicos.

Tecnicas de buscas textuais em banco de dados estudadas

Foram analisadas “Full Text Search” e “TSearch2″ (do nosso elefantinho), no entanto nenhuma delas satisfizeram as necessidades da Embrapa

Ferramentas de indexação textual

Foram analisadas SWISH-E, Lucene e OpenFTS, e delas a que mais se destacou foi a Lucene. principalmente pela compatibilidade com as linguagens de programação já utilizadas, que no caso seguiam a plataforma J2EE, e algo em PHP.

Resultados obtidos

O resultado pode ser visto no link: http://www.bdpa.cnptia.embrapa.br/busca.php e são bem expressivos em termos de tempo de resposta e sensibilidade ao contexto dos dados entrados.

Talvez esteja ai, uma extensão que nosso elefantinho posso começar a amadurecer, em minha singela opnião, acredito que um bom trabalho da comunidade poderia criar uma ferramenta que pudesse auxiliar nesse contexto, utilizando o PostgreSQL como servidor de aplicação.

Bom é isso..

by Guedes at 18/04/2008 02:30

FISL 9.0 - 17 de Abril


FISL 9.0 - 17 de AbrilO clima hoje não ajudou, aeroporto em POA fechado e acabei chegando atrasado ao FISL, perdendo assim a palestra do Fike. Imprevistos à parte, o clima esse ano no FISL está show de bola. A abertura dos estandes ao público e o ambiente universitário da PUCRS deram ao evento um clima bem descontraído e recheado de novidades.

Deu tempo de chegar para a palestra de Josh Berkus que foi bem interessante, as questões envolvendo segurança no PostgreSQL foram bem esplanadas. A diferença cultural não impediu que o publico participasse ativamente.

Logo em seguida, no mesmo auditório, David Fetter apresentou-nos sua palestra que exemplificou como utilizar o nosso Elefante como um Servidor de Aplicação. Dentre as inúmeras linguagens suportadas no PostgreSQL, ele focou seu exemplo em plperl/SQL frisando as questões de segurança, imutabilidade e clareza de código. Logo no início um pequeno trecho do Tropa de Elite que demonstra, segundo David Fetter, a maneira pela qual certamente não é a experiência que se tem ao se desenvolver algo utilizando PostgreSQL como um servidor de aplicações.

Acabei perdendo a palestra do Telles por problemas particulares, mas ouvi ótimos comentários.

Em tempo, o estande do elefantinho está show de bola, vale a pena conferir..

Bom é isso… as fotos vem em breve assim que eu baixá-las…

by Guedes at 18/04/2008 02:00

16/04/2008

Dickson dos Santos Guedes

Véspera de FISL 9.0...


Véspera de FISL 9.0...E amanhã começa o FISL 9.0, as expectativas são grandes, as palestras bem interessantes, e esse ano teremos uma participação forte do nosso amigo elefante (leia-se PostgreSQL).

Acabei montando minnha agenda no google calendar e publicando-a aqui. Todas as palestras do elefantinho estão lá bem como outras que tenho interesse, monte a sua também, imprime-a e leve com você no FISL, esteja preparado pois eventuais mudanças de horário ocorrem e não esqueça de visitar nosso estande.

No decorrer do evento irei postar aqui no blog informações e imagens para os colegas que não puderem comparecer de alguma forma ou de outra ao evento.

E para ajudar o povo que está indo para lá alguns links:

Mapa de localização do evento

Mapa de localização do estande do PostgreSQL (indicador azul)

Palestras sobre PostgreSQL e Banco de dados

Minha agenda do FISL 9.0 com as palestras do PostgreSQL e outras

Quadro de palestras do FISL 9.0

Bom, é isso! Nos vemos por lá… ” :D

by Guedes at 16/04/2008 01:14

Fernando Ike

Super-quinta PostgreSQL no FISL 9.0

  

   No primeiro dia do FISL 9.0, teremos um pequena overdose de palestras PostgreSQL, se quiser ver, atente que no dia 17/03 será:

- HA em PostgreSQL; O Elefante disponível para além do infinito
- The PostgreSQL Application Server
- Fazendo um elefante passar por debaixo da porta
- Safe Data Is Happy Data: Using SQL tools to secure your database application.

 
   Não fique triste se perder a quinta pois na sexta (18/04) tem palestra sobre Bucardo:

- Replicação Assíncrona Multi-Mestre com Bucardo

 
   Tem duas palestras imperdíveis.

- Software Livre em Ambiente de Alta Criticidade com Alta Disponibilidade.
- O ponto central da questão: LDAP (centralizando dados e informações)

   Também tem outras legais mas as duas acima são de importância pois a primeira irá falar de como o Debian/PostgreSQL/Jboss e a segunda porque eu considero o maior especialista de OpenLDAP do Brasil. :P

by fernando.ike at 16/04/2008 03:05

15/04/2008

Leonardo Cezar

Josh Berkus hoje no Boteco 4linux


Josh Berkus, que faz parte da equipe Core do PostgreSQL desde 2002, falará sobre as principais características da nova versão 8.3, lançada no último mês de fevereiro. Entre as novas features que fazem parte do PostgreSQL 8.3 estão: suporte a XML, log em CSV (Comma Separated Values), Tsearch integrado, melhor monitoramento e HOT (Heap Only Tuples).

Para maiores informações acesse o site:
www.4linux.com.br

-Leo

by Leo at 15/04/2008 08:28

14/04/2008

Fernando Ike

Entrevista com Leandro Dutra: Arquiteto de Dados

   Estava precisando recomendar a contratação de um Arquiteto de Dados para uma instituição e estava faltando uma base mais sólida para sustentar a proposta de contratação. Decidi perguntar para o Leandro Dutra que é Arquiteto de Dados e no fim acabou virando uma bela de uma entrevista. Obrigado Leandro pela disposição em responder as perguntas. :)

   Na entrevista, usamos AD para Arquiteto de Dados e DBA para Administrador de Base de Dados.


1 - O que é um Arquiteto de Dados?

    A pessoa responsável pela arquitetura e administração dos dados de uma organização.
No caso, a arquitetura envolve desde a arquitetura de sistemas de bases de dados até a modelagem dos dados e sua manutenção; e a administração seria mais especificamente a manutenção dos modelos e dicionários de dados.

2 - Qual a interação de um Arquiteto de Dados e um DBA? Ou é a mesma coisa?

    Muitas vezes, em organizações menores ou menos estruturadas, a administração de dados é efetuada pelo Administrador de Bases de Dados. Mas normalmente, o DBA deve se ocupar da administração diária dos bancos de dados físicos e seu conteúdo, efetivamente uma administração dos Sistemas Gestores de Bases de Dados. Enquanto o AD deve se ocupar do projeto das bases de dados e sua estrutura lógica, não se envolvendo diretamente nos aspectos físicos.

3 - Com essa afirmação, é possível supor que o AD seria o chefe de DBA (vou manter a sigla por enquanto…)?

    Não, eles colaboram em níveis hierárquicos similares. Imagine um novo sistema.  O arquiteto de dados será responsável pelos aspectos lógicos, principalmente a modelagem da estrutura da base; o DBA participará do projeto físico, como questões de distribuição, processamento e armazenamento. Um não trabalha sem o outro, e enquanto o projeto lógico deveria teoricamente determinar o físico, restrições tecnológicas podem (embora indesejável) determinar aspectos do lógico.

4 - Como você afirmou acima, as vezes o DBA acaba executando algumas funções que estariam com AD, no Brasil tem mercado para um Arquiteto de Dados?

    Ainda restrito e subvalorizado, mas tem.  Empresas que têm na informação seu principal meio de trabalho costumam contratar ou formar um quando amadurecem.  Bancos, empresas de informação de crédito, seguradoras e até corretoras de seguros, mesmo fornecedores de programas (é o caso de meu empregador atual).

    É verdade que há retrocessos, como o advento da terceirização; assim, há o caso de uma multinacional fabril que terceirizou a mão de obra, de modo que a mesma vaga, que antes percebia determinada quantia CLT, hoje percebe a mesma quantia mas em regime PJ, sem correção significativa. Outro fator detrimental é o foco em produtos, não em conceitos e processos.  Assim, a mesma multinacional já deixou de contratar ótimos candidatos por falta de experiência em determinada marca de ferramenta de administração e diagramação, sendo que o candidato em questão tinha experiência suficiente em mais de uma ferramenta completamente equivalente.

    Resumindo, ainda é um mercado bastante imaturo, o que leva a situações como as recomendações do AD serem vencidas por meras impressões e preconceitos de pessoas sem experiência com dados, opinando simplesmente do ponto de vista de vícios de programação por exemplo.

5 - Então é possível afirma que para um Arquiteto de Dados não é necessário ter conhecimento em vários banco de dados?

    Em princípio não.  Entretanto, devido à imaturidade de vários SGBDs — citem-se por exemplo, mas não exaustivamente, suporte deficiente a tipos de dados em Oracle, MS SQL Server, Sybase e MySQL, e problemas graves de desempenho e consistência neste último —, muitas vezes é conveniente que o AD possa compreender essas especificidades e trabalhar com o DBA e os desenvolvedores para adaptar a arquitetura e o modelo de dados às circunstâncias tecnológicas.


6 - Não citou o PostgreSQL, ele é um boa referência para quem quer iniciar uma carreira como AD?

    Uma das melhores, no mesmo nível do IBM DB2.  São os SGBDs que têm o melhor suporte tanto ao padrão ISO SQL:2003 (o 2006 ainda não se fez sentir no dia-a-dia) quanto ao modelo relacional — ambos com restrições, mas ainda assim superiores a todos os concorrentes mais óbvios. Entretanto, sendo uma área de atuação eminentemente lógica, recomenda-se, mais que determinados SGBDs, o futuro AD tenha um bom domínio tanto do modelo relacional, quanto de outros aspectos da teoria da gestão de bases de dados, e inclusive do padrão ISO SQL:2003 em si.  As referências padrão, pela atenção que dão aos aspectos lógicos, são as obras de Christopher J DATE, embora polêmicas em vários aspectos que chegam a suscitar reações apaixonadas contra e a favor de vários praticantes de prestígio.


7 - Esse é um ponto interessante, pois reflete em alguns aspectos teóricos que envolvem o DBA. Um AD necessariamente deve ser um DBA também?

    Não necessariamente.  Entretanto, justamente devido a todas as restrições tecnológicas atuais, é interessante que o AD tenha a capacidade de adaptar-se a circunstâncias, o que pode ser facilitado se ele tiver tido alguma experiência com aspectos físicos, seja como DBA, programador, analista de sistemas, SysAdmin…

    Isso lhe dará mais empatia com posições eventualmente divergentes na negociação de projetos de arquitetura de dados e modelagem, e possibilidade de dialogar com os problemas físicos reais ou imaginários freqüentemente trazidos por outros profissionais.


8 - Pensando que uma empresa irá contratar uma consultoria para área de banco de dados, o que a mesma economizará contratando um Arquiteto de Dados ao invés de ter somente DBA´s?

    Nem tudo na vida são economias.  Embora o principal foco do AD não seja monetário, porque o resultado do seu trabalho dificilmente é mensurável nesses termos, há muitos erros de projeto caros que podem ser minorados pela presença de um AD, ou pelo menos de um DBA com preocupação pelos aspectos lógicos. Por exemplo, um dos aspectos do trabalho do AD é a normalização, que evita duplicação de dados que normalmente torna o desenvolvimento do sistema como um todo, mesmo na fase de programação, mais complexo, frágil, lento e arriscado, podendo também gerar custos de manutenção e operação como freqüentes anomalias de atualização, consumo exagerado de recursos de sistema, problemas de escalabilidade &c.

    Um exemplo foi uma operadora de telecomunicações brasileira que tinha um consultor ao custo de ao menos nove mil dólares por mês (valor mínimo cobrado pela consultoria, possivelmente muito mais naquele caso específico) para resolver casos de inconsistência de dados.  Além desse gasto muito simples e mensurável, essas inconsistências geravam grandes problemas de insatisfação de clientes.  Não é difícil imaginar alguns desses problemas tornando-se questões mesmo de relações públicas, no caso de uma operadora de serviços públicos.

    Há que se considerar também a questão da eficiência: embora alguns DBAs possam desempenhar funções de AD com razoável competência, será um uso ineficiente do recurso humano, que perderá foco em sua função tradicional sem realmente se concentrar na de AD. O outro lado da moeda é que, devido ao baixo nível intelectual de muitas equipes de desenvolvimento impedi-las de compreender questões lógicas de conseqüências não inteiramente óbvias e imediatas, o peso da opinião de um DBA praticante pode ser maior que a de um AD.  Entretanto, uma equipe com esse problema certamente terá muitos outros problemas igualmente óbvios e imediatos.

9 - Para finalizar, dicas rápidas para quem quer trabalhar como AD?

1) Concentrar-se num sólido conhecimento conceitual;
2) Abstrair problemas específicos de SGBDs, mesmo que depois sejam necessárias adaptações;
3) Desenvolver uma visão ampla, que contemple desde as regras de negócio (== restrições de integridade) até questões de desempenho e manutenção da aplicação.

by fernando.ike at 14/04/2008 03:35

13/04/2008

Leandro Guimarães Faria Corcete DUTRA

Entrevista concedida ao Fernando IKE

O que é um Arquiteto de Dados?
A pessoa responsável pela arquitetura e administração dos dados de uma organização. No caso, a arquitetura envolve desde a arquitetura de sistemas de bases de dados até a modelagem dos dados e sua manutenção; e a administração seria mais especificamente a manutenção dos modelos e dicionários de dados.
Qual a interação de um Arquiteto de Dados e um DBA? Ou é a mesma coisa?
Muitas vezes, em organizações menores ou menos estruturadas, a administração de dados é efetuada pelo Administrador de Bases de Dados. Mas normalmente, o DBA deve se ocupar da administração diária dos bancos de dados físicos e seu conteúdo, efetivamente uma administração dos Sistemas Gestores de Bases de Dados. Enquanto o AD deve se ocupar do projeto das bases de dados e sua estrutura lógica, não se envolvendo diretamente nos aspectos físicos.
Ok. corrigindo, Administrador de Base de Dados.
Tanto faz. Databank era o uso até os anos 70, que ficou fixado no Brasil. No resto do mundo se usa base.
Com essa afirmação, é possível supor que o AD seria o chefe de DBA (vou manter a sigla por enquanto…)?
Não, eles colaboram em níveis hierárquicos similares. Imagine um novo sistema. O arquiteto de dados será responsável pelos aspectos lógicos, principalmente a modelagem da estrutura da base; o DBA participará do projeto físico, como questões de distribuição, processamento e armazenamento. Um não trabalha sem o outro, e enquanto o projeto lógico deveria teoricamente determinar o físico, restrições tecnológicas podem (embora indesejável) determinar aspectos do lógico.
Como você afirmou acima, as vezes o DBA acaba executando algumas funções que estariam com AD, no Brasil tem mercado para um Arquiteto de Dados?
Ainda restrito e subvalorizado, mas tem. Empresas que têm na informação seu principal meio de trabalho costumam contratar ou formar um quando amadurecem. Bancos, empresas de informação de crédito, seguradoras e até corretoras de seguros, mesmo fornecedores de programas (é o caso de meu empregador atual).
É verdade que há retrocessos, como o advento da terceirização; assim, há o caso de uma multinacional fabril que terceirizou a mão de obra, de modo que a mesma vaga, que antes percebia determinada quantia CLT, hoje percebe a mesma quantia mas em regime PJ, sem correção significativa.
Outro fator detrimental é o foco em produtos, não em conceitos e processos. Assim, a mesma multinacional já deixou de contratar ótimos candidatos por falta de experiência em determinada marca de ferramenta de administração e diagramação, sendo que o candidato em questão tinha experiência suficiente em mais de uma ferramenta completamente equivalente.
Resumindo, ainda é um mercado bastante imaturo, o que leva a situações como as recomendações do AD serem vencidas por meras impressões e preconceitos de pessoas sem experiência com dados, opinando simplesmente do ponto de vista de vícios de programação por exemplo.
Então é possível afirmar que para um Arquiteto de Dados não é necessário ter conhecimento em vários banco de dados?
Em princípio não. Entretanto, devido à imaturidade de vários SGBDs — citem-se por exemplo, mas não exaustivamente, suporte deficiente a tipos de dados em Oracle, MS SQL Server, Sybase e MySQL, e problemas graves de desempenho e consistência neste último —, muitas vezes é conveniente que o AD possa compreender essas especificidades e trabalhar com o DBA e os desenvolvedores para adaptar a arquitetura e o modelo de dados às circunstâncias tecnológicas.
Não citou o PostgreSQL, ele é um boa referência para quem quer iniciar uma carreira como AD?
Uma das melhores, no mesmo nível do IBM DB2. São os SGBDs que têm o melhor suporte tanto ao padrão ISO SQL:2003 (o 2006 ainda não se fez sentir no dia-a-dia) quanto ao modelo relacional — ambos com restrições, mas ainda assim superiores a todos os concorrentes mais óbvios.
Entretanto, sendo uma área de atuação eminentemente lógica, recomenda-se, mais que determinados SGBDs, o futuro AD tenha um bom domínio tanto do modelo relacional, quanto de outros aspectos da teoria da gestão de bases de dados, e inclusive do padrão ISO SQL:2003 em si. As referências padrão, pela atenção que dão aos aspectos lógicos, são as obras de Chris J Date, embora polêmicas em vários aspectos que chegam a suscitar reações apaixonadas contra e a favor de vários praticantes de prestígio.
Esse é um ponto interessante, pois reflete alguns aspectos teóricos que envolvem o DBA. Um AD necessariamente deve ser um DBA também?
Não necessariamente. Entretanto, justamente devido a todas as restrições tecnológicas atuais, é interessante que o AD tenha a capacidade de adaptar-se a circunstâncias, o que pode ser facilitado se ele tiver tido alguma experiência com aspectos físicos, seja como DBA, programador, analista de sistemas, SysAdmin… isso lhe dará mais empatia com posições eventualmente divergentes na negociação de projetos de arquitetura de dados e modelagem, e possibilidade de dialogar com os problemas físicos reais ou imaginários freqüentemente trazidos por outros profissionais.
Pensando que uma empresa irá contratar uma consultoria para área de banco de dados, o que a mesma economizará contratando um Arquiteto de Dados ao invés de ter somente DBAs?
Nem tudo na vida são economias. Embora o principal foco do AD não seja monetário, porque o resultado do seu trabalho dificilmente é mensurável nesses termos, há muitos erros de projeto caros que podem ser minorados pela presença de um AD, ou pelo menos de um DBA com preocupação pelos aspectos lógicos.
Um dos aspectos do trabalho do AD é a normalização, que evita duplicação de dados que normalmente torna o desenvolvimento do sistema como um todo, mesmo na fase de programação, mais complexo, frágil, lento e arriscado, podendo também gerar custos de manutenção e operação como freqüentes anomalias de atualização, consumo exagerado de recursos de sistema, problemas de escalabilidade &c.
Um exemplo foi uma operadora de telecomunicações brasileira que tinha um consultor ao custo de ao menos nove mil dólares por mês (valor mínimo cobrado pela consultoria, possivelmente muito mais naquele caso específico) para resolver casos de inconsistência de dados. Além desse gasto muito simples e mensurável, essas inconsistências geravam grandes problemas de insatisfação de clientes. Não é difícil imaginar alguns desses problemas tornando-se questões mesmo de relações públicas, no caso de uma operadora de serviços públicos.
Há que se considerar também a questão da eficiência: embora alguns DBAs possam desempenhar funções de AD com razoável competência, será um uso ineficiente do recurso humano, que perderá foco em sua função tradicional sem realmente se concentrar na de AD.
O outro lado da moeda é que, devido ao baixo nível intelectual de muitas equipes de desenvolvimento impedi-las de compreender questões lógicas de conseqüências não inteiramente óbvias e imediatas, o peso da opinião de um DBA praticante pode ser maior que a de um AD. Entretanto, uma equipe com esse problema certamente terá muitos outros problemas igualmente óbvios e imediatos.
É um problema de maturação do mercado de TI no geral.
Aliás, ou de maturação ou, às vezes dá impressão, decadência…
Dê duas ou três dicas rápidas para quem quiser trabalhar como AD.
  1. Concentrar-se num sólido conhecimento conceitual;
  2. Abstrair problemas específicos de SGBDs, mesmo que depois sejam necessárias adaptações;
  3. Desenvolver uma visão ampla, que contemple desde as regras de negócio (== restrições de integridade) até questões de desempenho e manutenção da aplicação.

by Leandro Guimarães Faria Corcete DUTRA (noreply@blogger.com) at 13/04/2008 11:50

11/04/2008

Dickson dos Santos Guedes

Tamanho de tabelas no PostgreSQL


Tamanho de tabelas no PostgreSQLCaros, hoje pretendo ser o mais breve possível apresentando uma dica rápida. Pois bem, apesar de existirem algumas ferramentas gráficas como o Aqua Studio, DbVisualizer e o próprio pgAdminIII, o meu fiel companheiro de todos os dias acaba sendo o bom e velho psql. Leve, simples e bastante completo ele me proporciona agilidade em muitas das minhas tarefas diárias.

Nessas últimas versões ele vem recebendo algumas características novas. Uma delas que podemos esperar para a versão 8.4, por exemplo, é uma melhoria do comando “\l+” que, nessa versão, mostra também os tamanhos que os bancos de dados ocupam:

analise=# \l+
                                                               List of databases
   Name    |   Owner   | Encoding |                    Access Privileges                     |  Size   | Tablespace |        Description
-----------+-----------+----------+----------------------------------------------------------+---------+------------+---------------------------
 analise    | postgres  | UTF8     | {sademo=CTc/postgres,postgres=CTc/postgres,=Tc/postgres} | 151 MB  | pg_default |
 bench     | postgres  | UTF8     |                                                          | 710 MB  | pg_default |
 postgres  | postgres  | UTF8     |                                                          | 4215 kB | pg_default |
 livraria   | sasebo    | UTF8     |                                                          | 4136 kB | pg_default |
 template0 | postgres  | UTF8     | {=c/postgres,postgres=CTc/postgres}                      | 4136 kB | pg_default |
 template1 | postgres  | UTF8     | {postgres=CTc/postgres,=c/postgres}                      | 4136 kB | pg_default | default template database

No entanto, para o comando “\d+”, não foi implementada a mesma idéia, ou seja, ele não lista o tamanho dos objetos (visões, tabelas, sequências, indices) e por isso eu acabei criando o patch abaixo que, uma vez aplicado na versão última versão do PostgreSQL no CVS, habilita essa característica no psql:

Index: describe.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/psql/describe.c,v
retrieving revision 1.166
diff -c -r1.166 describe.c
*** describe.c	30 Mar 2008 18:10:20 -0000	1.166
--- describe.c	11 Apr 2008 04:59:56 -0000
***************
*** 1766,1775 ****
--- 1766,1781 ----
  						  gettext_noop("Table"));

  	if (verbose)
+ 	{
  		appendPQExpBuffer(&buf,
  			  ",\n  pg_catalog.obj_description(c.oid, 'pg_class') as \"%s\"",
  						  gettext_noop("Description"));

+ 		appendPQExpBuffer(&buf,
+ 			  ",\n  pg_catalog.pg_size_pretty(pg_catalog.pg_relation_size(c.oid)) as \"%s\"",
+ 					  	  gettext_noop("Size"));
+ 	}
+
  	appendPQExpBuffer(&buf,
  					  "\nFROM pg_catalog.pg_class c"
  					"\n     JOIN pg_catalog.pg_roles r ON r.oid = c.relowner"
***************
*** 1809,1816 ****
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "c.relname", NULL,
  						  "pg_catalog.pg_table_is_visible(c.oid)");
!
! 	appendPQExpBuffer(&buf, "ORDER BY 1,2;");

  	res = PSQLexec(buf.data, false);
  	termPQExpBuffer(&buf);
--- 1815,1825 ----
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "c.relname", NULL,
  						  "pg_catalog.pg_table_is_visible(c.oid)");
!
! 	if (verbose)
! 		appendPQExpBuffer(&buf, "ORDER BY 1, pg_catalog.pg_relation_size(c.oid) DESC, 2;");
! 	else
! 		appendPQExpBuffer(&buf, "ORDER BY 1,2;");

  	res = PSQLexec(buf.data, false);
  	termPQExpBuffer(&buf);

O que eu faço é mostrar uma coluna a mais (”Size”), e ordenar a saída por Esquema, Tamanho (decrescente) e Nome do objeto. A saída fica algo assim:

analise=# \d+
                                      List of relations
 Schema  |                Name                | Type  |   Owner    | Description |    Size
---------+------------------------------------+-------+------------+-------------+------------
 teste   | tb_cliente                         | table | sa_analiseq   | Cliente     | 8192 bytes
 teste   | tb_compra                          | table | sa_analise   | Compra      | 8192 bytes
 teste   | tb_item_compra                     | table | sa_analise   | ItemCompra  | 8192 bytes
 teste   | tb_produto                         | table | sa_analise   | Produto     | 8192 bytes
 financ | tb_caixa                           | table | sa_analise   | Caixa       | 517 MB
 financ | tb_banco                           | table | sa_analise   | Banco       | 80 MB
 generic | tb_cliente                         | table | sa_analise | Cliente     | 250 MB
 generic | tb_pessoa                          | table | sa_analise   | Pessoa      | 140 MB

Bom, é isso! ” :D

by Guedes at 11/04/2008 06:19

10/04/2008

Leonardo Cezar

07/04/2008

Dickson dos Santos Guedes

Exemplo de um script SQL interativo no PostgreSQL


Exemplo de um script SQL interativo no PostgreSQLA semana foi corrida, e o final de semana foi totalmente utilizado para descanso e lazer. Mas a vontade de escrever é maior, e cá estou novamente pronto para mais um post. A idéia hoje era falar sobre scripts SQL, então imaginei algo diferente, e pensei em mostrar como fazer um script interativo no PostgreSQL 8.3, associando o seu uso a um cenário hipotético. Vejamos…

Em um universo ideal, é muito comum existir um banco de dados de desenvolvimento, um de testes, um de homologação e um de produção. Neste cenário, imagine que seu Analista de Testes precise testar uma nova funcionalidade do sistema relacionada ao módulo de compras, e que para isso constantemente você tenha que aplicar a carga de testes desse módulo no banco de dados de teste, não é de se estranhar que você possua uma carga pronta (é o mínimo que você deveria ter).

Veja a seguir o script simplificado que representa esse cenário:

CREATE TABLE tb_cliente (
     nr_documento numeric(14,0) NOT NULL,
     nm_cliente character varying(60)
);
ALTER TABLE blog.tb_cliente OWNER TO postgres;

CREATE TABLE tb_compra (
     nr_nota_fiscal numeric(15,0) NOT NULL,
     dt_compra date,
     nr_documento_cliente numeric(14,0)
);
ALTER TABLE blog.tb_compra OWNER TO postgres;

CREATE TABLE tb_item_compra (
     nr_nota_fiscal numeric(15,0) NOT NULL,
     nr_referencia integer NOT NULL,
     qt_item smallint DEFAULT 1
);
ALTER TABLE blog.tb_item_compra OWNER TO postgres;

CREATE TABLE tb_produto (
     nr_referencia integer NOT NULL,
     ds_produto character varying(60) NOT NULL,
     vl_venda numeric(15,2)
);
ALTER TABLE blog.tb_produto OWNER TO postgres;

CREATE SEQUENCE tb_produto_nr_referencia_seq
     INCREMENT BY 1
     NO MAXVALUE
     NO MINVALUE
     CACHE 1;
ALTER TABLE blog.tb_produto_nr_referencia_seq OWNER TO postgres;

ALTER SEQUENCE tb_produto_nr_referencia_seq OWNED BY tb_produto.nr_referencia
ALTER TABLE tb_produto ALTER COLUMN nr_referencia SET DEFAULT nextval('tb_produto_nr_referencia_seq'::regclass);

ALTER TABLE ONLY tb_compra
     ADD CONSTRAINT pk_compra PRIMARY KEY (nr_nota_fiscal);
ALTER TABLE ONLY tb_item_compra
     ADD CONSTRAINT pk_item_compra PRIMARY KEY (nr_nota_fiscal, nr_referencia);
ALTER TABLE ONLY tb_cliente
     ADD CONSTRAINT pk_pessoa PRIMARY KEY (nr_documento);
ALTER TABLE ONLY tb_produt
     ADD CONSTRAINT pk_produto PRIMARY KEY (nr_referencia);

ALTER TABLE ONLY tb_compra
     ADD CONSTRAINT fk_cliente_compra_01 FOREIGN KEY (nr_documento_cliente) REFERENCES tb_cliente(nr_documento);
ALTER TABLE ONLY tb_item_compra
     ADD CONSTRAINT fk_compra_item_compra_01 FOREIGN KEY (nr_nota_fiscal) REFERENCES tb_compra(nr_nota_fiscal);
ALTER TABLE ONLY tb_item_compr
     ADD CONSTRAINT fk_produto_item_compra_01 FOREIGN KEY (nr_referencia) REFERENCES tb_produto(nr_referencia);

Esse é o conteúdo simplificado da entidade cliente no banco de dados de teste:

 nr_documento |        nm_cliente
--------------+---------------------------
74727756632 | Marta Antonia
56548986527 | Antonia Josefina
47040567970 | Adamantina Pereira
24348435149 | Carlos Augusto
80987468692 | José Silveira
56096344407 | Maria Eleontina de Castro
79056669606 | José da Silva Sauro
31887461081 | Ribamar de Castr
45792555043 | Manoel Bandeira

Esse é o conteudo simplificado da entidade produto no banco de dados de teste:

 nr_referencia |    ds_produto     | vl_venda
---------------+-------------------+----------
1 | Sapato Velho      |    15.00
2 | Sapato Novo       |    25.00
3 | Blusa Velha       |    35.00
4 | Blusa Nova        |    45.00
5 | Calça Jeans Velha |    29.50
6 | Calça Jeans Nova  |    49.50
7 | Peruca Masculina  |   439.9
8 | Camisola          |    19.50

E este é o Script de Carga de Teste para as entidades tb_compra e tb_item_compra:

postgres@banco $ cat ~/scripts/carga_compra_teste.sql
/***************************************************
*
* Script de geração de carga
* Modulo de Compras - Banco de dados de Teste
*
* (c) 2007 Dickson Guedes <guediz at gmail dot com>
*
****************************************************/

INSERT INTO tb_compra (nr_nota_fiscal, dt_compra, nr_documento_cliente
     VALUES (1234567890, now(), 56473847366);

INSERT INTO tb_item_compra (nr_nota_fiscal, nr_referencia, qt_item)
     VALUES (1234567890, 6,  2);
INSERT INTO tb_item_compra (nr_nota_fiscal, nr_referencia, qt_item)
     VALUES (1234567890, 4,  1);
INSERT INTO tb_item_compra (nr_nota_fiscal, nr_referencia, qt_item)
     VALUES (1234567890, 3, 15);
INSERT INTO tb_item_compra (nr_nota_fiscal, nr_referencia, qt_item
     VALUES (1234567890, 2,  2);

INSERT INTO tb_compra (nr_nota_fiscal, dt_compra, nr_documento_cliente
     VALUES (1122334455, now(), 56096344407);

INSERT INTO tb_item_compra (nr_nota_fiscal, nr_referencia, qt_item)
     VALUES (1122334455, 6,  2);
INSERT INTO tb_item_compra (nr_nota_fiscal, nr_referencia, qt_item)
     VALUES (1122334455, 4,  1);
INSERT INTO tb_item_compra (nr_nota_fiscal, nr_referencia, qt_item)
     VALUES (1122334455, 3, 15);
INSERT INTO tb_item_compra (nr_nota_fiscal, nr_referencia, qt_item
     VALUES (1122334455, 2,  2);

E para executá-lo e utilizo o utilitário psql:

postgresql@banco $ psql bdtesteWelcome to psql 8.4devel, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
     \h for help with SQL commands
     \? for help with psql commands
     \g or terminate with semicolon to execute quer
     \q to quit

postgres=# \i ~/scripts/carga_compra_teste.sql

E se eu quisesse tornar esse script interativo?

O utilitário psql além de aceitar instruções SQL, possui um conjunto de instrucoes proprias que nos permitem extenter suas funcionalidades. Utilizaremos duas delas: \echo, que permite enviar um texto para a console do psql e \prompt (a partir da versão 8.3 do PostgreSQL) que permite receber um dado da entrada e salvar um uma variável.

Nosso script acima poderia ficar assim:

/***************************************************
*
* Script de geração de carga
* Modulo de Compras - Banco de dados de Teste
*
* (c) 2007 Dickson Guedes <guediz at gmail dot com>
*
****************************************************/

\echo """"""""""""""""""""""""""""""""""""""""""
\echo " Gerando carga para o ambiente: TESTE   "
\echo "                                        "
\echo " Cenário: Prestacoes de compra a prazo  "
\echo "                                        "
\echo """"""""""""""""""""""""""""""""""""""""""
\echo
\echo Continuar..: Enter
\echo Cancelar...: Ctrl+C

\prompt continua
\unset continuar

\echo
SELECT nr_documento || ' -> ' || nm_cliente AS "Lista de Clientes" FROM tb_cliente;
\echo
\prompt 'Informe um dos números de CPFs acima.: ' v_nr_document
\prompt 'Informe o número da nota fiscal......: ' v_nr_nota_fiscal

\echo '* Inserindo compra para o cliente:' :v_nr_documento 'com número de nota fiscal:' :v_nr_nota_fiscal

INSERT INTO tb_compra (nr_nota_fiscal, dt_compra, nr_documento_cliente) VALUE
     (:v_nr_nota_fiscal, now(), :v_nr_documento);

INSERT INTO tb_item_compra (nr_nota_fiscal, nr_referencia, qt_item) VALUES
     (:v_nr_nota_fiscal, 2, ((RANDOM()*5)+1)::int2),
     (:v_nr_nota_fiscal, 4, ((RANDOM()*5)+1)::int2),
     (:v_nr_nota_fiscal, 7, ((RANDOM()*5)+1)::int2),
     (:v_nr_nota_fiscal, 5, ((RANDOM()*5)+1)::int2);

\echo "* Script finalizado!"

E para executá-lo e utilizo também o utilitário psql:

postgresql@banco $ psql bdtesteWelcome to psql 8.4devel, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute quer
\q to quit

postgres=# \i ~/scripts/carga_compra_teste.sql

DICA 1: quando usar o \prompt você pode usar 2 (dois) argumentos: um texto explicativo seguido do nome da variável que você deseja armazenar o valor recebido.
DICA 2: os valores das variáveis são recuperados utilizando-se o dois pontos (”:”) precedendo o nome da variável que se deseja ler o valor, como por exemplo \echo ‘Valor da variavel é’ :variavel_qualquer.

DESAFIO 1: Tente alterar o script acima para que os produtos também sejam aleatórios, ou seja, cada vez que o script for executado ele gere uma carga diferente.

DESAFIO 2: Como você trataria o problema de um erro de digitação ou problema de violação de chaves? Você poderia utilizar transações?

by Guedes at 07/04/2008 03:17

02/04/2008

Dickson dos Santos Guedes

Monitorando o PostgreSQL com ptop


Monitorando o PostgreSQL com ptopEm um ambiente corporativo com aplicações de missão crítica, qualquer instante de instabilidade pode causar um grande prejuízo para seu cliente, e conseqüentemente para sua empresa. Neste universo, onde todas as camadas de infra-estrutura que dão suporte ao funcionamento de suas aplicações precisam estar altamente-disponíveis, faz-se necessário tomar medidas preventivas a fim de identificar, pro-ativamente, qualquer incidente que pode acarretar em um grande problema.

Neste cenário, o papel do DBA é muito importante, pois ele pode identificar, já na camada de Banco de Dados, possíveis candidatos a problemas futuros. No entanto, ele precisa de ferramentas de apoio para tal tarefa, a fim de tornar seu trabalho produtivo e pró-ativo e não reativo, como em muitas empresas.

Sendo assim, gostaria de falar hoje sobre o nosso amigo ptop, que é uma espécie de ‘top’ para o PostgreSQL. Inspirado no top dos sistemas UNIX-like, ele permite:

  • Visualizar a instrução SQL sendo executada por um processo;
  • Visualizar o plano de execução de um SELECT rodando no momento;
  • Visualizar os locks de um determinado processo;
  • Visualizar as estatísticas das tabelas de usuário;
  • Visualizar as estatísticas dos índices de usuário;

Obtendo e Instalando

A última versão estável do ptop é a 3.6.1 mas já existem versões beta disponíveis que podem ser baixadas e testadas. No nosso caso utilizaremos a última versão estável, fazendo o download e salvando em um diretório temporário, como por exemplo: /tmp.

Vamos supor que você deseja monitorar via ptop um ambiente de desenvolvimento com as seguintes características:

Nome do bando de dados: desenvolvimento
Porta: 5432
Usuário: monitor
Senha: m0n1t0r

(Para esse exemplo foi criado um usuário monitor no PostgreSQL, sem qualquer privilégio a mais, apenas de conexão ao banco)

Salve o arquivo baixado no servidor que deseja monitorar e siga os passos:

# Descompacte o arquivo ...
tar zxvf ptop-3.6.1.tar.gz

# Acesse o diretorio criado
cd ptop-3.6.1/

# Leia os arquivos README e INSTALL
# (sim eles não têm esses nomes à toa… ” :D )
less README
less INSTALL

# Configure e compile o codigo
./configure && make

# Após compilar um arquivo executável sera criado
ls -la ptop
-rwxr-xr-x 1 guedes guedes 140282 2008-04-01 20:48 ptop

# Execute-o com a opção –help
./ptop –help
./ptop: invalid option — -
Top version 3.6.1
Usage: ptop [-ISTWbcinqu] [-x x] [-s x] [-o field] [-z username]
              [-p PORT] [-U USER] [-d DBNAME] [-h HOSTNAME] [number]

Visão geral do ptop

Para executar o ptop use:

./ptop -U monitor -d desenvolvimento -h localhost -W

Será solicitada a senha do usuário ‘monitor‘, informe-a corretamente. A tela que surge é semelhante a esta:

Monitorando o PostgreSQL com ptop

Com o ptop sendo executado, é possível ver uma série de informações úteis sobre o servidor e os processos do PostgreSQL. A semelhança do mesmo com o utilitário top do UNIX é visível e não é mera coincidência…

Principais comandos do ptop e suas telas

Obtendo ajuda no ptop: pressione ‘?’ ou ‘h’

Monitorando o PostgreSQL com ptop

Obtendo o plano de execução de um processo: pressione ‘E’ (maiúsculo) e digite o número de um determinado processo (PID) para visualizar o plano de execução do mesmo.

Monitorando o PostgreSQL com ptop

Obtendo as estatísticas das tabelas em uso: pressione ‘R’ (maiúsculo)

Monitorando o PostgreSQL com ptop

Obtendo as estatísticas dos índices em uso: pressione ‘X’ (maiúsculo)

Monitorando o PostgreSQL com ptop

Visualizando os locks de um determinado processo: pressione ‘L’ (maiúsculo) e digite o número do processo (PID) que deseja visualizar

Monitorando o PostgreSQL com ptop

DESAFIO 1: tente alterar a ordem de classificação dos processos (por cpu, tempo de execução ou utilização de recursos, por exemplo).
DESAFIO 2: tente alterar o número de processos a serem mostrados.

Bom, é isso! ” :D

by Guedes at 02/04/2008 11:59

Ribamar FS

Diagrama


Mini Tutorial sobre a Ferramenta PostgreSQL Autodoc

 

O autodoc é um utilitário que roda para tabelas do PostgreSQL e retorna documentos HTML, Dot, Dia e DocBook XML com a descrição e diagramas das tabelas. Existe integração com o DIA (http://www.gnome.org/projects/dia/) e com o GraphViz (http://www.research.att.com/sw/tools/graphviz/).

 

Autodoc site oficial - http://www.rbt.ca/autodoc/

 

Instalar

Para quem tem Linux Ubuntu basta atualizar seus repositórios e no terminal executar:

sudo apt-get install postgresql-autodoc

 

Aproveitar e instalar também o DIA para visualizar os diagramas:

sudo apt-get install dia

 

Instalar também o GraphViz:

sudo apt-get install graphviz

 

Para Executar

Acesse um terminal e faça login como usuário do PostgreSQL

su - postgres

postgres@cmiin07 postgresql_autodoc –help

 

Exemplo:

Com este exemplo estou gerando diagramas e DDLs de um esquema (comercial) do banco dba_projeto2.

postgres@cmiin07 postgresql_autodoc -u postgres -d dba_projeto2 -s comercial -p 5433 –password=postgres

 

Ele gerará um arquivo em HTML contendo a estrutura dos objetos do esquema, gerará um arquivo do diagrama para o DIA, um XML e vários outros.

 

Agora um exemplo abrangento todo o banco, que contém dois esquemas:

postgres@cmiin07 postgresql_autodoc -u postgres -d dba_projeto2 -p 5433 –password=postgres

 

Agora transformando o .dot em png:

postgres@cmiin07 dot -Tpng -o dba_projeto2.png dba_projeto2.dot

Com este comando gerará uma imagem oriunda do .dot.

Veja o arquivo anexo contendo uma amostra do exemplo citado.

Diagrama

Pelo visto existem muito mais recursos nesta ferramenta. O form para comentários pode enriquecer as informações aqui contidas.

 

 

by ribafs at 02/04/2008 06:59

01/04/2008

Leonardo Cezar

pgfouine e log_line_prefix hacking


A ferramenta de análise de logs pgfouine é sem dúvida nenhuma uma ferramenta indispensável para qualquer DBA no quesito de análise de logs.

Confesso que fui utilizador assíduo do PQA (antecessor falecido do pgfouine) e quando conheci o pgfouine foi amor à primeira vista e acabei largando um pouco o ruby em troca de um php bem escrito ;-).

Deixarei um pouco a paixão de lado pra falar de uma funcionalidade caracterizada como deficiente no pgfouine, IMHO.

A questão é que para funcionamento correto, o pgfouine exige um formato padrão da variável de configuração log_line_prefix (’%t [%p]: [%l-1]), e diga-se de passagem é bem conciso, mas muitas vezes não aceitável.

Quem já precisou alterar uma variável de um servidor que não pode ser reiniciado vai entender de que estou falando; ou pior ainda, quem precisa manter um formato consistente com normas internas porque existe uma política na empresa para arquivamento de logs também vai perceber.

Então, antes que tudo se desabe e voce no 5o. andar de seu prédio saia de maneira inconsolável de sua mesa em direção a janela mais próxima, eis que surgem as expressões regulares. Sim, sim elas!
Basta entender a forma como o parser do pgfouine trabalha para alterar nada mais de que (com sorte) uma única linha do núcleo desta ferramenta.

Deixemos de enrolação e vamos realmente ao que interessa:

O programa pgfouine.php inicializa o percurso que os trechos de log deverão seguir até o parser. Esta parte do fluxo tem por objetivo fazer algumas validações e configurações iniciais (informações de banco, opções escolhidas, &ca) e por fim carregar a classe GenericLogReader que baseada nas opções do usuário invoca o acumulador (Acummulator) de logs específico. A função do acumulador é avaliar o eventType de listener e armazenar o resultado em um stream para análise futura pelo parser mais adequado. Basicamente existem duas classes (tipos) maiores de eventType: uma de erro e outra de instruções SQL. Os detalhes sobre os event listeners podem ser localizados em $PGFHOME/include/listeners. A próxima etapa (e a que mais nos interessa), é a fase de parser os logs.
O pgfouine ainda não foi internacionalizado (i18n) portanto pode ser necessário alterar as expressões regulares em $PGFHOME/include/postgresql/PostgreSQLRegexps.lib.php. Basta ver qual o formato de seu arquivo de log e literalmente substituir as strings desse arquivo pelas correspondentes nos logs. Agora os arquivos responsáveis por gerar a informação que o pgfouine “confia” para criação dos gráficos, estatísticas e demais recursos visualizados no produto final, são os arquivos StderrPostgreSQLParser.class.php e SyslogPostgreSQLParser.class.php localizados em $PGFHOME/include/postgresql/parsers e estão na última etapa do percurso da conversão log -> documento. As classes StderrPostgreSQLParser e
SyslogPostgreSQLParser fazem a análise de stderr e syslog respectivamente como é óbviamente notado. Ambas possuem em seus construtores uma propriedade inicializando um objeto do tipo RegExp que é o assunto principal desse post e deve ser alterado para “casar” com o formato de seu log_line_prefix. Em nosso caso estava bem simples e foi apenas alterar o caracter especial de início de linha para “casar” com o formato do log, mas conhecendo um pouquinho de expressões regulares voce será capaz de combinar qualquer formato da linha de seus logs com o pgfouine sem a alteração da variável de configuração log_line_prefix e sem reiniciar o servidor de banco de dados.

-Leo

by Leo at 01/04/2008 10:58

Dickson dos Santos Guedes

Planeta PostgreSQL migrado para SQLite com sucesso.


Planeta PostgreSQL migrado para SQLite com sucesso.Depois de muito trabalho, finalmente o Planeta PostgreSQL foi migrado para um novo banco. Os dados, que antes se encontravam em DB2, agora estão rodando perfeitamente em SQLite hospedado em servidores gentilmente cedidos a nós pela Sony, Tokyo, Japão.

Para que você saiba, passo a passo, como tudo foi feito, disponibilizamos o artigo neste link. Bem como informações de infra-estrutura aqui neste outro.

by Guedes at 01/04/2008 07:42

Ribamar FS

ribafs


Criando Novos Clusters no PostgreSQL para Windows

Para criar um novo cluster:
Crie um diretório para abrigar o novo cluster (lembre que o usuário postgres deve ter permissão de escrita nele).
- Ex.: data2 no diretório bin.

Criar o novo cluster (acesse o terminal no diretório C:\Program Files\PostgreSQL\8.3\bin) e execute:
- C:\Program Files\PostgreSQL\8.3\bin>initdb -U postgres -D data2

Editar o data2\postgresql.conf e alterar a porta para 5444

Iniciar o servidor do novo cluster
- pg_ctl -D data2 start

Acessar a console (psql) do novo cluster
- psql -p 5444 -U postgres

Listar os bancos
- \l — Observe que somente existem os bancos de templates. Temos um novo cluster.

Obs.: No Windows não consegui dar suporte a latin1 em novos clustes nem o original suporta.
Isso só foi conseguido em novos clusters no Linux.

Tecle Ctrl+Alt+Del no Windows ou ‘ps ax|grep post’ no Linux e veja que agora temos dois pg_ctl na memória.

———————————————————————
Criação de Novos Clusters no PostgreSQL 8.3 for Linux (Ubuntu 7.10):
———————————————————————

Criando os clusters

cluster em latin1

Criação do diretório para o cluster, data_latin1, tornando o usuário postgres seu dono:
mkdir data_latin1
su - postgres
export LANG=pt_BR.ISO-8859-1
bin/initdb –encoding latin1 -D data_latin1
Editar o script data_latin1/postgresql.conf e alterar a porta para 5433

Conectando no cluster em latin1

bin/pg_ctl -D data_latin1 start
bin/psql -U postgres postgres -p 5433
\l — Veja que a codificação de todos os bancos é a latin1.

create database testeutf8 with encoding ‘utf8′;

Obs.: Cluster em latin1 com suporte a UTF-8.

cluster em utf-8

su - postgres
bin/initdb -D data_utf8

Como utf8 o default no Ubuntu, não preciso passar parãmetro.
Editar o script data_utf8/postgresql.conf e alterar a porta para 5434

Conectando no cluster utf-8

bin/pg_ctl -D data_utf8 start
bin/psql -U postgres postgres -p 5434

Bem, a saída para quem quer usar o 8.3.x e precisa de latin, no Linux, é esta (dica que recebi na lista de PostgreSQL pgbr-geral, do Euler).

by ribafs at 01/04/2008 04:43

Leonardo Cezar

patch retira autovaccum do backend


Pessoal,

Conforme prometido no último pgcon e com apoio financeiro da BEA Systems, é com orgulho que envio o patch que tem como objetivo retirar o autovaccum do backend.

A principal idéia responsável por esse avanço foi a criação de uma ferramenta chamada autoclean.

O componente autoclean atua como um processo filho de postmaster e toda vez que uma página é alterada, o autoclean detecta quais páginas estão disponíveis para armazenar e em seguida mover para áreas disponíveis em VacPageData. Para isso free_space_pages deve estar configurado corretamente.

Outra função do autoclean é detectar páginas sujas e enviá-las para uma área reservada de reciclagem (C:\Meu Computador\Desktop\Lixeira) aliviando a carga do background writer.

Existe ainda a possibilidade de uma página, já reciclada, estar “parcialmente” suja e o autoclean avaliar de acordo com heurísticas uma chamada para a rotina void AutoCleanDirtyClothes(Page *page) que irá causar uma limpeza total daquela página e coloca-la em VacPageListData.

TransactionId wraparound

Com a implementação do autoclean foi criado também um novo tipo para a variável TransactionId para suprir a necessidade de “zerar” o contador de transações, o uint128, um novo tipo com suporte para 128 bits (o segredo aqui foi a geração de um algoritmo de ponto flutuante para suporte ao tipo em servidores de 32 e 64 bits). Dessa forma XID agora foi tipado com uint128.

Outra novidade é que transações já nascem marcadas como XID=2 (Frozen), então o MVCC não precisa mais “adivinhar” qual é a transação mais recente e … Espera aí!! Mas então porque precisamos tipar XID com 128 bits uma vez que usa apenas 1 ??? Hmm, hora de volta à prancheta …

Gente, quanta besteira!!!

Só pra não esquecer que hoje é 1º. de abril.

Abraço!

-Leo

by Leo at 01/04/2008 12:46

30/03/2008

Dickson dos Santos Guedes

Como obter ajuda sobre PostgreSQL?


Como obter ajuda sobre PostgreSQL?Um dos fatores fundamentais que movimenta o universo do software livre é justamente a grande quantidade de usuários que estão prontos (e qualificados) para ajudá-lo desde as dúvidas mais simples, até as mais “cabeludas”. Pois bem, nesses mesmo barco, onde todos estamos remando, existe um “pacto”, não chega a ser uma ordem ou lei, mas sim um pré-requisito básico, que todo aquele que quer entrar nesse universo deveria se certificar de checar, um ação simples: antes de perguntar, pesquise!

Sim, é muito comum ver perguntas recorrentes na lista pgbr-geral em que muitos de seus questionadores não se deram o luxo de, no mínimo, dar uma googlada. Conclusão? Muitas vezes eles acabam saindo frustrados com uma resposta default: “Veja o histórico da lista.”

Já outros possuem espírito aventureiro, questionam-se noite e dia, procuram, encontram, testam, erram, procuram, encontram, testam, acertam … e nesse ciclo rumo ao conhecimento, algumas perguntas surgem, duvidas pelas quais alguns de nos passamos também, cujas respostas não encontramos em uma ferramenta de busca, mas sim nas entrelinhas do conhecimento alheio. E nesse caso, onde buscar então? É ruim perguntar na lista? Não! É perfeito! As respostas mais básicas estão la no histórico da lista… algumas complexas também… e você percebe a diferença entre elas pelo número de threads que um tópico mais complexo pode gerar. Veja como exemplo quantos tópicos sobre Codificação de caracteres já surgiram esse mês.

Em resumo, antes de perguntar leia o site oficial do PostgreSQL, ou o site brasileiro, veja o histórico de nossas listas, procure no Planeta PostgreSQL pesquise no Google. Ainda assim você tem dúvidas cujas respostas dependem da opinião e experiência de outros colegas? Perfeito, pergunte na lista ou procure-nos no IRC. Sim, no IRC… lembra? Lá a resposta pode ser mais rápida, ou a disc