lacrimogenio

Mais um dia triste para os professores

Eu sabia que não seria um dia tranquilo. Estava no meio da tarde quando comecei a ouvir o barulho dos tiros na avenida logo atrás de mim. Algumas pessoas comentaram radiantes como finalmente alguém agia com firmeza contra aqueles baderneiros. Ocorre que aqueles baderneiros eram professores. Não podia acreditar que, no ano 2000, um governador que se acreditava mais ponderado, aprovasse o uso da cavalaria dessa forma. Por pouco minha mãe não estava lá. Sim, eu sei como ela dedicou e dedica até hoje sua vida à luta por uma educação melhor. Aquele lema antigo, como era? Por uma educação pública, gratuita, laica, com acesso universal, permanência, qualidade… Parece tão distante!

No final, todos dizem que são a favor da educação. Mas quem estuda financiamento de educação sabe que há uma conta que não fecha. A escola pública de qualidade antes era oferecida para um número muito reduzido de pessoas. Era a boa escola pública criada para pessoas de bem e de bens. Quando saímos da ditadura militar, a luta pela universalização do acesso na década de 80 tem um grande êxito. Só tem um problema:  o orçamento para a educação não acompanhou o crescimento do número de estudantes. Na década de 90, vemos, claramente, o custo por aluno caindo vertiginosamente. De repente o problema da educação é uma questão técnica, saber investir e administrar melhor os recursos existentes. A questão do custo por aluno passa a ser  sistematicamente omitida. Os professores da rede pública passaram vários anos praticamente sem aumento. Com os salários achatados, muita gente foi procurar outras formas de ganhar o pão de cada dia. Não só eu, mas um turbilhão de gente abandonou a educação. Ser professor deixou de ser algo digno. O professor deixou de ser alguém valorizado e respeitado. Frases como “professora não ganha mal, professora é mal casada” eram e continuam famosas. Assim, assistimos ao sucateamento da educação esperando o horário da novela…

A verdade é que educação não é prioridade. Deseja-se que o outro seja mais educado, mas poucos estão dispostos a investir nisso. Educação não dá voto. Construir escolas grandes e vistosas sim, mas pagar bem ao professor e manter uma boa escola funcionando, não. O resultado é que ninguém se comove. Não vou aqui discorrer sobre a miséria dos sindicatos no Brasil. Depois que Getúlio Vargas deixou a herança maldita do imposto sindical, encontrar sindicatos combativos não é fácil. Mas essa moda de mandar a tropa de choque bater em professor parece nunca se esgotar. Se o professor pode apanhar em frente às câmeras de TV, o que não poderá ocorrer em sala de aula. Essa tática de cercar manifestantes e fazer matéria na TV sobre como os professores estavam atrapalhando o trânsito já é manjada há muito tempo. Mesmo com a internet à nossa mão, a maioria não vê  a covardia da polícia. Não me interessa se a greve parece abusiva, se há professores exaltados. Não se bate no seu semelhante dessa forma. A vida deve valer mais. Não me interessa se é um professor, um estudante ou qual grupo está pedindo isso ou aquilo. Não se mira diretamente contra uma multidão e aperta o gatilho. Não se usa bomba de gás lacrimogênio, não se coloca policiais nas portas dos hospitais para impedir que os manifestantes feridos sejam atendidos, não se cercam todas as rotas de fuga dos manifestantes mandando a tropa para cima.

E sim, tem gente que aplaude… e acha que precisamos de mais segurança. Não sei como essas pessoas conseguem dormir tranquilas. Ou pior, às vezes até sei. Claro que a conexão direta entre educação e violência não é bem assim. Longa história. No entanto, o exemplo que damos para nossos filhos é bem claro, não? E vemos professores do ensino fundamental ao superior apanhando da polícia todos os anos. Ontem não foi a primeira vez… Quando será a última?

a-origem-da-especie-humana-1419160928.184x273

Sobre o futuro da humanidade…

Comecei a juntar as peças  ao ler “A Origem da Humanidade” de Richard Leakey. Eu cursava Ciências Sociais e este livro me voltou à mente diversas vezes. Nele, o membro da notável família Leakey discorre sobre a evolução do ser humano da sua origem aos dias atuais. Claro, se você é criacionista e tem fé dogmática nisso, está convidado a ir ler algo menos herético ante que se irrite logo. Bom, o texto contém uma série de hipóteses reveladoras sobre a espécie humana, e é muito interessante colocar nossa trajetória numa esteira de milhões de anos ao invés de meses ou anos. Estamos acostumados a olhar pouco para o passado, principalmente para o passado remoto, como se apenas o passado recente tivesse realmente importância para a nossa história recente. As implicações morais para a minha vida contidas neste texto são surpreendentes.

Na parte final do livro, Leakey fala sobre o impacto para o ser humano no aumento do seu cérebro. Foi como ler um daqueles bons livros de mistério em que no final acontece uma bela reviravolta em que tudo se revela e faz sentido de forma harmoniosa e inteligente. A questão com o cérebro do ser humano não está relacionada diretamente com a capacidade superior de raciocínio. A grande questão é o parto. O parto do ser humano é muito difícil por causa do tamanho do cérebro. Se o cérebro humano estivesse plenamente desenvolvido antes de nascer, o parto jamais seria viável, pois ele não poderia passar pélvis devido ao seu tamanho. O resultado é que o feto humano nasce muito imaturo. Levam longos anos até ele atingir a plena maturidade. Veja que os mamíferos em geral, se tornam adulto (ou melhor atingem a capacidade de reproduzir) em poucos meses. O ser humano leva cerca de 14 anos até atingir a puberdade e ser capaz de se reproduzir.

O resultado dessa maturidade tardia é que a prole humana permanece sob a tutela dos pais por longos anos. Nestes período algo incrível acontece que faz toda a diferença. Conhecimentos, hábitos e costumes aprendidos pelos pais são transmitidos para os filhos. Ao longo do tempo, esse longo período de contato, de transmissão de conhecimento, constitui um patrimônio para aquele grupo de hominídeos, sua cultura. E a partir daí, a evolução da espécie humana passa a ser regida muito mais pela evolução da sua cultura do que por alterações morfológicas no seu corpo. Um hominídeo que sobreviva só sem o contato com outros da sua espécie, não pode ser considerado um ser humano. Não anda em pé, não fala, não tem hábitos como os nossos. Não aprendeu nada com seus pares, não possui uma cultura como a nossa.

Diferentes culturas fizeram com que o ser humano desenvolvesse diferentes habilidades, diferentes sociedades, diferentes valores. É claro que essa noção de ética universal que engloba toda a humanidade é balela quando você olha o ser humanos como um todo. Então essa baboseira de que o homem nasce bom ou mal, de que ele é corrupto, ou que ele é egoísta e coisa e tal, não faz muito sentido. Depende da cultura em que ele vive. Uma sociedade competitiva, que valoriza o consumo e a mais valia obviamente produz humanos de um tipo completamente diferente de um que cresceu numa pacata ilha isolada desse universo. O fato que é a nossa cultura, apesar de mudar muito vagarosamente, é fruto nosso, dos seres humanos. Somos nós que a construímos. Não é algo dado, imutável e pré-determinado. Como dizia o velho barbudo…

“Os homens fazem a sua própria história, mas não a fazem como querem, não a fazem sob circunstâncias de sua escolha e sim sob aquelas com que se defrontam diretamente, legadas e transmitidas pelo passado.”

O resultado disso é que está tudo em nossas mãos. Não precisamos de intervenção divina ou nos lamentar eternamente. Precisamos criar melhores filhos para construir um futuro  melhor. Filhos que sejam agentes transformadores da nossa cultura, que criem seus filhos melhores ainda . Não se muda uma cultura da noite para o dia, mesmo em momentos de ruptura ela leva varias décadas para mudar de forma que a maior parte da sociedade absorva essa mudança. Veja por exemplo o advento do anticoncepcional. Foi um momento de ruptura com profundas transformações na nossa sociedade, onde a mulher deixa de ser uma máquina de gerar e criar seres humanos para se tornar uma pessoa capaz de ter escolhas, de ter uma carreira, estudar, casar, ter filhos… ou não!  Já faz mais de 40 anos que o anticoncepcional surgiu e ainda estamos por vê-lo alcançar toda a sociedade, notavelmente ainda encontramos setores conservadores que reagem a qualquer tipo de anticoncepcional, até mesmo ao uso do preservativo. Mas aos poucos, vemos esta tendência se tornando cada vez mais hegemônica. A cultura está sempre em transformação, não é algo estático. O ser humano existe há milhões de anos. Só conhecemos uma pequena fração da sua jornada pela terra. Existem culturas mais solidárias, mais corruptas, mais violentas, mais competitivas, mais consumistas, com mais diversidade, com mais tolerância, com mais pessoas se suicidando. A questão é: qual ser humano queremos construir afinal?

Uma qualidade inerente ao ser humano, um instinto primário que ele traz consigo me faz acreditar que é possível construir algo melhor do que temos hoje. De que não é assim e sempre foi assim em todo lugar e há qualquer tempo. A capacidade do ser humano de amar a si mesmo e ao próximo faz com que isso seja possível. Praticamente toda religião, seja ela monoteísta, politeísta, oriental, ocidental, etc prega o amor ao próximo. É por isso que mesmo em dias em que tanta gente se preocupa em atacar, denigrir, combater e eliminar uns aos outros, apenas com o otimismo de que vale à pena acreditar no ser humano, podemos construir algo melhor. Vale à pena perdoar e resistir aos que se esquecem do amor ao próximo e desejam saciar suas frustrações combatendo um mal que sequer sabem se existe, aqueles que sonham em comprar um novo bem na esperança de conquistar a felicidade anunciada por um comercial de TV.

Que o nosso amor ao próximo seja forte, otimista e vibrante, contagioso. Que possamos construir novos alicerces. E se um dia eu parar de acreditar nisso, vou até o bar mais próximo, começo a beber e não saio nunca mais dali.

19_waterski

Próximo Programa de Índio em 01/04/2015: “PostgreSQL + Json = SQL + NoSQL!”

Anotem aí…

Dia 01/04/2015, às 20h os consultores da Timbira estarão falando sobre o uso do Json no PostgreSQL, NoSQL e por aí vai. O programa será gravado ao vivo e qualquer um pode interagir.

Link para o Hangout!

timbira

O plano de dominação mundial da Timbira!

Em 2014 tivemos grandes avanços na Timbira. O Euler e o Fabrízio foram bem atuantes em patches para a versão 9.4 e tivemos as nossas primeiras encomendas de funcionalidades para o PostgreSQL. Também lançamos 3 cursos on-line e integramos juridicamente o Fabrízio como sócio da empresa.  O Fabrizio também se destacou participando do Google Summer of Code  com um patch para transformar UNLOGGED TABLES em LOGGED e vice-versa. Um projeto bem interessante.

Este ano começou realmente acelerado. Novos clientes, novos desafios e novas atividades. O tempo anda curto para tantas atividades. O calendário não para de me mandar avisos aqui. Pra começar resolvi tirar a poeira do blog. Em janeiro foram 5 artigos novos publicados. No final de janeiro, após o Euler retornar das suas merecidas férias, nos reunimos e montamos um calendário para 2015 bem interessante. Começamos lançando uma nova leva de cursos on-line incluindo um novo curso de monitoramento. Estou devendo ainda um novo curso de SQL. Serão ao todo 5 cursos on-line. Depois lançamos o webinar da Timbira, o “programa de índio”.  No primeiro programa falamos sobre as novidades da versão 9.4 e o que já está programado para a 9.5. Combinamos que o próximo deverá ser sobre o Jsonb. Depois uma leva de 3 eventos na sequência.
Vejamos o que temos pela frente:

Além disso, novos artigos estão à caminho no blog, estou preparando um novo curso on-line de SQL em dois módulos e novos eventos devem aparecer no caminho. Por fim, estamos aceitando sugestões de temas para o nosso “Programa de Índio”, deixe sua sugestão nos comentários.

 

19_waterski

Programa de Índio – Acompanhe as novidades no universo PostgreSQL com a equipe da Timbira

É isso aí… entramos na onda! Depois de enrolar por mais de 6 meses, marcamos o nosso primeiro programa ao vivo. Vai ser no dia 03/03 às 20h. A ideia é montar um canal no Youtube e tudo o mais.

Para começar, vamos falar sobre a última versão do PostgreSQL e as tendências para as próximas versões. Minha expectativa é gravar pelo menos um vídeo por mês e contar com um chat ao vivo. Assim, as pessoas terão a oportunidade de interagir com os desenvolvedores do PostgreSQL diretamente durante a gravação.  Quem quiser acompanhar, basta se inscrever na página do Google.

Vejo vocês lá!

Atualização em 04/03/2015

Para quem não pode acompanhar ao vivo, segue o vídeo da gravação. Nos primeiros minutos ficamos ainda um pouco perdidos, mas aos 3 minutos e 30 segundos começamos efetivamente o programa.

OBS: Nunca, jamais, em hipótese alguma, grave um vídeo enquanto estiver mascando chicletes. Ficou realmente estranho isso.

timbira

Novos cursos on-line da Timbira

Ano passado lançamos 3 cursos on-line que funcionaram muito bem. Todos via Hangout do Google, on-line, com interação direta de todos participantes. Julgamos que a experiência foi positiva e este ano estamos lançando uma nova leva de cursos, incluindo um novo curso de monitoramento e um de SQL que eu ainda estou montando.

Os cursos In Company continuam rolando normalmente. Para aqueles que perguntam quando vamos abrir turmas regulares presenciais, a resposta ainda é a mesma: sem previsão. O trabalho de montar uma sala presencial e toda a burocracia envolvida nos impede de nos dedicarmos à outras atividades que hoje nós consideramos mais importantes, como criar novas funcionalidades para o Postgres e atender às demandas de consultoria.

Assim que eu fechar o conteúdo do curso de SQL (pensando em fazer 2 cursos de 9 horas, talvez) estarei divulgando. Este ano a Timbira está envolvida com um grande número de atividades, incluindo o PGBR2015 que vai acontecer em novembro, lá em Porto Alegre.

Ainda essa semana devo divulgar mais novidades.

40_anos

Quase 40…

Posso resistir bravamente à tentação de publicar aquele famoso balanço de fim de ano, contando o que aconteceu no findo ano e as promessas para o vindouro, mas o fato é que estou chegando perto dos 40… muito perto mesmo. E tanta coisa tem acontecido nos últimos tempos, não poderia deixar de parar um momento para refletir um pouco. O blog sempre foi um espaço privilegiado para minhas reflexões comigo e com o mundo que me cerca. Não consigo pensar num lugar melhor para essa reflexão hoje.

E vamos brincar em tópicos aqui, afinal, mais do que uma reflexão elaborada, ideias salpicadas vão brotando e gostaria de pontuar algumas coisas que aprendi nesses quase 40 anos….

  • Sou uma pessoa realmente boa de cama. Seja no ônibus, no metrô, no carro, na mesa do bar, falando ao telefone ou bem acompanhado. É muito raro eu perder o sono por alguma coisa. Em geral me tira o sono não conseguir honrar algum compromisso importante. Mas fora isso… durmo em segundos às vezes.
  • Tenho um profundo desprezo à rotina, mas é algo que infelizmente eu preciso para a minha vida. Particularmente para manter uma alimentação saudável. Tem sido um trabalho constante manter uma dieta um pouco mais constante. Comer bem é fácil, o duro é se planejar para isso e comer em intervalos regulares. Disciplina tem sido um grande aprendizado nestes anos.
  • Sou capaz de fazer praticamente qualquer coisa por amor, por uma paixão ou por um amigo em dificuldades. As emoções me movem e despertam o melhor de mim. Achar um ponto de equilíbrio nisso é que é o problema. Nem sempre jogar tudo para o alto é a melhor coisa a se fazer.
  • Sei ser uma pessoa educada e agradável, mas muitas vezes isso não me convém. Prefiro ser uma pessoa autêntica e direta. Me encanto por pessoas diretas e autênticas também. Pessoas que agem assim comigo ganham meu eterno respeito. Me sinto imensamente mais confortável perto delas, mesmo que suas opiniões divirjam das minhas.
  • Nunca serei uma pessoa rodeada de muitos amigos. Não tenho paciência para amizades onde eu precise medir as palavras. Não tenho problema em sair sozinho, me divertir sozinho e gosto de ter meus momentos a sós com meus pensamentos. Ainda assim, nada me dá mais prazer na vida do que poder desfrutar da companhia de bons amigos. Sou capaz de conversar por muitas horas sem me cansar se a conversa for boa. Conversa chata me dá um sono irrefreável.
  • Não consigo me imaginar numa relação afetiva seria com alguém que não traga no seu íntimo doses generosas de solidariedade. Acho que talvez isso tenha haver com um certo complexo de Édipo. Minha mãe sempre foi uma pessoa extremamente generosa. Sempre admirei muito pessoas assim. Acho que numa relação afetiva, a falta desse traço de personalidade faz com que eu perca o interesse na pessoa em pouco tempo.
  • Sou uma pessoa realmente generosa. Por muito tempo que achei que não era. O fato de ser uma pessoa egoísta sempre me fez sentir que não poderia ser uma pessoa generosa. Hoje sei que são coisas distintas. Que o egoismo é fundamental para a autopreservação e capacidade de se reconstruir. Mas ser egoísta não me impede de ser uma pessoa solidária, de me preocupar genuinamente com o próximo. Uma coisa é ser egoísta, outra é ser egocêntrico.
  • Tenho um prazer enorme em ajudar o próximo. Pode ser um altruísmo egoísta, mas o fato é que me faz muito bem poder ajudar alguém. Não confunda isso com caridade. Se por um lado tenho claro que não tenho o poder de mudar ninguém, podemos estender a mão e abrir novos horizontes para as pessoas. Sempre penso na possibilidade de transformar o mundo à minha volta. Nada me dá mais prazer do que poder transformar positivamente o mundo que me cerca. As pessoas, as ideias, os processos, os valores.
  • Só conseguimos ajudar quem realmente quer ser ajudado, quem quer buscar um caminho. Existem pessoas que apenas nos sugam toda a energia e jamais querem mudar, melhorar, ou sair do buraco onde se encontram. Elas apenas querem que as pessoas sintam piedade delas e às alimente eternamente. Nada mais idiota do que a pessoa que entra num relacionamento achando que pode concertar os defeitos do outro. Por outro lado, é muito difícil enxergar o momento de estender a mão e o momento de deixar a pessoa se erguer com as próprias pernas. Quem tem um filho com dificuldades sabe como isso é difícil.
  • Lembro que meu pai me disse que um dos momentos mais difíceis da vida dele, foi quando viu que eu havia levado um fora de uma garota na adolescência. Ele sabia que não tinha muito o que pudesse fazer por mim a não ser estar lá. Acho que em muitos momentos, é tudo o que podemos fazer. E para quem está mal, é tudo o que precisamos. Se você gosta de alguém e não sabe o que fazer para ajudar em um momento difícil, apenas esteja lá. Mas não encha o saco, não faça mil perguntas ou de um monte de conselhos. Mas esteja presente, de corpo e alma.
  • Sou uma pessoa preconceituosa e odeio isso. Não gosto de lugares cheios. Não gosto de lugares com gente que ostenta demais. Não consigo manter uma conversa animada com pessoas que não tem ideias interessantes para mim. Tenho horror ao senso comum e ideias pasteurizadas. Amo a cultura popular, mas odeio a cultura de massas.
  • Sou um exibicionista… gosto de aparecer. Acho que o fato de gostar de dar aula, palestrar e manter um blog por mais de 10 anos, mostra bem como isso funciona. Adoro receber um comentário no blog, conversar com as pessoas no final de uma palestra, ser procurado por um ex aluno. Gosto de receber atenção e ser tratado como alguém importante para o próximo. Ego bem alimentado me faz uma pessoa muito mais feliz e proativa.
  • Eu sempre quis entender tudo sobre o mundo que me cerca. Sempre fui muito curioso sobre tudo. Sempre quis saber o que as pessoas pensam e sentem. Sempre fui atrás de uma ilusão de verdade. Hoje acho que sentimento não tem verdade, não tem razão, não cabe análise. A gente sente e pronto. Se uma pessoa não gosta de você, ou deixou de gostar, ou passou a gostar de repente, provavelmente não há um motivo racional para isso. Simplesmente acontece. Há uma enormidade de sensações, experiências, valores, sabores, odores, limites, gatilhos e mecanismos que a gente não entende bem em nós mesmos. Eles podem nos levar a sentimentos e comportamentos inesperados e inexplicáveis para a nossa própria razão.
  • Sentimento não tem culpa. A culpa é uma das coisas que não ajuda ninguém a entender o que acontece. Enquanto você procurar a culpa para fenômenos irracionais, você carregará dor e raiva, e jamais vai conseguir deixar a vida seguir seu curso.
  • Eu sempre quis ajudar a mudar o mundo, mudar as estruturas da sociedade, buscar alternativas mais justas para distribuir a riqueza que produzimos. Sempre acreditei no que Marx definiu como o ideal de sociedade em que teríamos “De cada qual, segundo sua capacidade; a cada qual, segundo suas necessidades“. Mas para que essa sociedade seja possível, mais do que transformar a sociedade, precisamos antes de tudo, transformar à nós mesmos enquanto seres humanos, precisamos transformar o que nos sustenta como humanidade, precisamos transformar a nossa cultura.
  • Expectativa é o grande mal desse século. Somos bombardeados por expectativas o tempo todo. Todos querem um amor de cinema. Todos precisam de um por do sol espetacular, um restaurante divino, uma novidade incrível, uma piada genial, um produto revolucionário, uma mulher turbinada, ser melhor que todos em alguma coisa. Menos gente…. menos. Vamos viver o que é possível, o sol vai nascer amanhã… vamos viver o que há pra viver, hoje.
  • Morro de vergonha de dançar. Quando era adolescente eu era o cara estranho da sala e nunca aprendi a dançar. Dançar tem haver com essa fragilidade de não se pertencer ao grupo, de ser isolado. Tenho muita vontade de aprender, acho uma delícia, mas ainda não achei alguém que topasse me ensinar.
  • Acho que o melhor papo de botequim gira sempre em torno de política, sociedade, arte (cinema, música, etc), relações humanas, e claro, sexo. Futebol, carros e novela me dão sono.
  • Tesão está relacionado com uma infinidade de coisas objetivas e subjetivas. Variam muito de pessoa para pessoa e de momento para momento. Nem sempre o que se vende como algo muito desejado por todos, vai ser interessante para você. Acredite, o Ponto G realmente fica no cérebro. E o cérebro é muito mais misterioso e complexo e volátil do que imaginamos.
  • Ter ganhado peso mexeu muito mais com a minha auto-estima do que eu poderia imaginar. Por muito tempo tive vergonha de encontrar meus amigos. É fato que por mais que você possa ser inteligente, fazer coisas interessantes, ajudar as pessoas à sua volta etc. e tal, ainda é bom se sentir atraente fisicamente. Sim, existem pessoas que realmente acham sexy um homem gordinho, mas eu extrapolei bem essa classificação. Meu rosto ficou deformado demais e eu deixei de me reconhecer como homem. Hoje sei que se eu não me sentir desejável para o outro, não existe a menor possibilidade das coisas funcionarem bem.
  • Por outro lado… ninguém quer ser apenas um pedaço de carne. Todo mundo quer se sentir especial para os seus pares. Ser admirado é fundamental, não apenas fisicamente, mas pela pessoa que você é, pelo que você pensa  e faz.
  • E nisso gostos e predileções entram em cena. A capacidade de dividir bons momentos com os demais é que faz a diferença. Escolhemos nossa companhia por aquilo que eles tem a nos oferecer. Um bom papo, planos para mudar o mundo, dançar, andar de bicicleta, fazer uma trilha até uma cachoeira, tomar sorvete no parque, ver cinema europeu, sessão da tarde no sofá, uma partida de xadrez, uma boa cerveja num bar.
  • É possível amar mais de uma vez. Não existe uma única pessoa predestinada a te completar para o resto da vida. Existem pessoas que desejam viver determinado tipo de situação e que caminham num determinado tempo na mesma direção.
  • Eu realmente acredito no amor. Acho que fui muito amado pelos pais. Só isso me traz uma enorme referência. O amor existe e vale à pena. Também é possível amar mais de uma vez e de diferentes formas. Portanto não se preocupe se esta pessoa será ou não o seu grande amor para a vida toda. Pode ser ou não. Mas se não for, ou se acabar, outros virão.
  • Ainda cometo a maioria dos erros que citei a cima. Não gosto disso, mas vou me policiando… um dia quem sabe consigo evitá-los, ou errar um pouco menos. Fiz um bom progresso em algumas coisas. Estou tentando.

Bom, nada de grandes planos para os próximos 40 anos. A vida vai indo bem. Tenho perdido peso, a Timbira tem ganhado novos clientes, tenho pedalado bem, conhecido gente realmente interessante, feito coisas diferentes, planejando viagens bacanas. A sensação é a de que a vida inda está começando. Ainda tenho muito o que aprender, muito o que me divertir e muito o que viver.

IMG_20141012_081244

Pedalando por aí…

Eu tinha 7 anos quando meu tio, vestido de papai noel trouxe a bicicleta! Uma Peugeot. Nessa época eu não sabia que era uma bicicleta especial. O presente era para ser dividido com a minha irmã mais velha, mas logo se tornou minha companheira inseparável.  As rodinhas ficaram para trás depois de mais ou menos um mês.  Eu só podia andar pelas áreas comuns do prédio… mas naquela época já era bem divertido. Primeiro dia sem rodinhas, primeiro tombo de verdade… já aprontando claro. Fui fazer uma curva sem uma das mãos no guidão. A bicicleta ganhou acessórios, uma buzina, um banco diferente, etc e tal. Quando me mudei para uma casa eu aos poucos fui conquistando algo inesquecível… o direito de andar de bicicleta pelas ruas.

Poder andar pelas ruas sem pai nem mãe por perto sobre uma bicicleta tem um impacto incrível na vida de uma criança. Eu tinha ganhado o mundo. Podia ir para onde quisesse. Bastaria ter pernas para isso, e saber achar o caminho de volta para casa. Então as pernas ganharam força, aprendi a olhar mapas e fui desvendando os caminhos, nomes de ruas e lugares do bairro. O lado pobre, o rico, o inusitado, e por aí vai. Meu pai tinha uma Caloi 10. Passeamos algumas vezes juntos. Houve um ou dois passeios que organizaram com os amigos, com carro de apoio e tudo o mais. Foi quando descobri que minhas pernas poderiam me levar mais longe. Ganhei confiança, ganhei a cidade.

Tive outras bicicletas no caminho. A Caloi Cross que estava na moda, pesava muito mais que a velha Peugeot, mas não tinha comercial dela na TV… Depois veio a Caloi Cruiser. Eu ficava pequeno nela, mas com ela já ia para a escola com frequência. Muito mais divertido que pegar o ônibus. E de vez em quando, eu resolvia matar aula na escola e ficava passeando pela cidade. Quando fui estudar em outra cidade, a bicicleta era uma alternativa rápida ao ônibus. Mas já eram mais de 20Km, com asfalto ruim, subidas enormes e um trânsito bem pesado. O rosto chegava preto de fuligem. O pneu da bicicleta rasgava na lateral e não durava nem 2 meses direito. Mas posso dizer que as pernas estavam muito bem. E eu levava 15 minutos a menos que o ônibus.

Aos 20 e poucos anos comprei uma speed usada com sapatilhas, bermuda de ciclista, capacete e tudo o mais. Comecei a andar em estrada e cheguei no auge da boa forma. Foi quando a bicicleta salvou a minha vida. Comecei a sentir uma dor no joelho. Estava com um tumor na cabeça da fíbula. Um pedaço de mais de 2cm de osso foi removido e nunca mais tive problemas. O tumor era agressivo e estava crescendo rapidamente. Se eu não estivesse pedalando, o tumor teria crescido e se alastrado antes de eu perceber alguma coisa. Se não houvesse o diagnosticado precoce, certamente eu não estaria escrevendo aqui. Alguns meses depois da cirurgia e eu já estava indo para o trabalho de bicicleta.

Pedalar nem sempre foi um esporte solitário. Houve bons colegas de pedal. Grandes amigos e bons momentos sem dúvida. Tive momentos ruins, 3 bicicletas roubadas e uma que entortou toda num tombo um pouco pior.  Mas nunca me feri seriamente. Sei que muita gente tem medo de andar no trânsito. Realmente tem momentos que não é fácil. O asfalto é ruim, muitas ladeiras no caminho, trãnsito, barulho, poluição. Quase nunca você encontra lugar para estacionar a bicileta, e você ainda pode ser roubado. Tive mais acidentes de automóvel do que acidentes de bicicleta. Furo semáforo às vezes, ando ocasionalmente na contra mão, etc. Mas com o tempo o bom senso vai prevalecendo. Você começa a perceber a cidade de outro jeito. Sempre respeitar o pedestre, jamais subir na calçada, evitar andar na contra mão, particularmente em vias de alto tráfego, usar capacete, luzes de sinalização e por aí vai.

Houve um hiato de 12 anos no qual estive casado e deixei a minha speed literalmente apodrecer na chuva. Muito triste pensar nisso hoje. O cachorro devorou minhas sapatilhas e nunca mais pedalei. Depois do divórcio a vontade de pedalar estava latente. Mas o sobrepeso era uma preocupação. Precisaria comprar uma bicicleta muito reforçada para aguentar o meu peso. Mas o peso foi caindo, alguns amigos me chamaram para pedalar, e não resisti mais à tentação. Hoje a bicicleta é assunto sério. Alternativa de transporte para grandes cidades, lazer e esporte para um número cada vez maior de pessoas. As vendas não param de crescer. A malha cicloviária cresce em todo país. Não consegui convencer meu filho a aprender a pedalar, mas as possibilidades andam cada vez mais interessantes. Além de ir trabalhar, pedalar aos domingos, existem os grupos que saem para pedalar à noite para todos os gostos. Além de mais seguro, você tem a oportunidade de conhecer novas pessoas, conhecer novos lugares e aprender um bocado com os demais. Recomendo.

Estou sempre convidando as pessoas para saírem para pedalar. Acho que é algo que as pessoas deveriam experimentar e compartilhar independente de idade, sexo ou condição social. A bicicleta sempre ocupou um espaço importante na minha vida. É uma paixão que não deve sumir tão cedo. Não acho que eu vá voltar a andar numa speed, mas cicloturismo está na pauta, e pequenas viagens começam a sair do papel e se tornar realidade. Prestes a completar meus 40 anos, eu me lembro de quando era adolescente e era ultrapassado por um senhor em sua bicicleta que mantinha um bom rítmo  e pedalava com tranquilidade. Hoje, este senhor sou eu…

http://www.dreamstime.com/-image2965530

Trabalhando com logs no PostgreSQL

Parece incrível mas existe um número grande de pessoas que não configura corretamente os logs no PostgreSQL. Muitos nem sabem onde ele fica e nunca foram olhar o que tem lá. É verdade que muitas aplicações que levam o PostgreSQL embarcado funcionam por anos sem nenhum problema. Mas um dia o problema vai surgir, e adivinha qual o primeiro lugar em que vamos olhar? Os logs claro. No entanto é bem frustrante chegar no cliente e ver que os logs não estão configurados, às vezes, sequer habilitados. Isto significa que a capacidade de verificar um problema ocorrido no passado é quase  nula.

A documentação possui um capítulo só com as configurações do log, vamos parar para olhar alguns pontos que você deveria conhecer, ok?

Onde logar

Aqui você vai configurar onde o arquivo de log vai ser gerado, o nome do arquivo, permissões no arquivo, tamanho do arquivo, etc. Preocupações com o local, nome e espaço em disco entram aqui.

  • log_destination: Aqui você pode escolher entre stderrcsvlogsyslog e se estiver utilizando o Windows, eventlog. O uso do syslog ou do eventlog faz com que os logs sejam direcionados para o destino padrão dos logs no seu sistema operacional. Se você é um administrador de redes e está preocupado na gestão de dezenas de servidores, é possível que esteja mais confortável como isso. Por outro lado, DBAs em geral preferem o stderr ou csvlog. O padrão é utilizar o stderr, que produz um log mais fácil para a leitura humana, mas se você pretende importar os logs para uma ferramenta externa de analise, o csvlog pode ser uma boa opção também.
  • logging_collector: Ligue e seja feliz. Deixe desligado e não me culpe se não souber te dizer o que houve de errado.
  • log_directory: o diretório (dentro do diretório raiz da sua) onde os logs serão gravados. A não ser que tenha um bom motivo para isso, deixe o padrão, ‘pg_log’.
  • log_filename: O nome do log gerado é muito importante para você. Pode acontecer de você gerar muitos logs por muito tempo e você tem que decidir se vai querer reaproveitar os logs antigos ou não. Se quiser rotacionar e manter apenas um log para cada dia da semana (manter apenas 7 dias de log) ou um para cada dia do mês (manter até 31 arquivos de log), você deve escolher um nome que seja sobrescrito periodicamente. Se você não tem alguém cuidando dos seus logs, pode ser melhor utilizar um esquema de rotação destes, não é o que eu prefiro, mas pode ser melhor do que ver seus logs lotando o espaço em disco sem que ninguém entenda o que está acontecendo. Parcimônia é uma boa pedida. Se você monitora o espaço em disco do seu servidor, não há motivos para mudar do padrão, que acredito que seja uma boa configuração.
  • log_file_mode: Não mexa a não ser que você tenha um bom motivo para isso.
  • log_rotation_age: O valor padrão faz com que pelo menos um novo log seja criado por dia. Gerar logs muito grandes torna muito difícil avaliar um problema. Meu conselho: deixe o valor padrão.
  • log_rotation_size: Configura o tamanho máximo de um arquivo de log antes dele quebrar num novo arquivo. Como eu disse, logs muito grandes são difíceis de analisar. O padrão, 10MB talvez seja muito pequeno, uns 50MB ou 100MB são tranquilos para qualquer bom editor de texto abrir.
  • log_truncate_on_rotation: Se você escolher um nome de arquivo em log_file_name de forma a ele reaproveitar os nomes anteriores, você precisa habilitar este parâmetros para ele apagar o log antigo.

Quando logar

Você pode dizer ao PostgreSQL em quais situações um log deve ser gerado. Essas demandas podem mudar o tempo todo e é importante saber quando e como mudar isso conforme a necessidade e o ambiente.

  • client_min_messages, log_min_messages, log_min_error_statementEstes 3 parâmetros possuem os mesmos valores que vão são DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, LOG, NOTICE, WARNING, ERROR, FATAL e PANIC. DEBUG5 é a opção que gera mais log e PANIC é a que gera menos log. DEBUG5 a DEBUG1 é utilizado em geral pelos próprios desenvolvedores do PostgreSQL. A opção PANIC por outro lado, é só vai registrar quando uma catástrofe absoluta acontecer. Um meio termo é o mais recomendado. Algo entre INFO e ERROR. O parâmetro client_min_messages se refere às mensagens enviadas para o usuário enquanto está interagindo com o banco de dados. Então a sua aplicação recebe mensagens que ela pode tratar. Um bom exemplo disso é quando você utiliza o psql. O log_min_messages é o que parâmetro que mede o que vai ser gravado de fato no nosso log. Por fim log_min_error_statement configura especificamente quando um comando SQL com erro vai ser gravado no log.  Vamos discutir um pouco mais sobre estes parâmetros mais tarde, eles são realmente importantes para nós.
  • log_min_duration_statement: Faz com que qualquer comando SQL que leve mais do que o valor em  milissegundos configurado aqui entre no log. Muito útil para pegar comandos que estão levando muito tempo. É comum esperar que a maioria das consultas levem apenas alguns milissegundos ou no máximo alguns segundos. Capturar todas as consultas que demorem por exemplo mais de um minuto, pode ajudar a pegar gargalos importantes de performance. Se você configurar este parâmetro com 0 (zero) você vai logar todos os comandos SQL enviados para o postgres, que pode gerar uma quantidade muito grande de log. Em todo caso, experimente para ver o que acontece. Muitas pessoas se surpreendem com o que encontram…

O que logar

Dependendo da situação você pode querer logar coisas diferentes, a maioria destes parâmetros não serão alterados com o tempo, ao contrário dos parâmetros da sessão anterior.

  • application_name: Não faz muito sentido ajustar este parâmetro aqui, mas é muito importante que sua aplicação saiba ajustar este parâmetro quando se conecta no postgres. Ajuda muito saber qual aplicação está conectada. Pode-se também alterar este valor para passar mais detalhes conforme a operação que vai executar ex: “Contabilidade | Cadastro de cliente”
  • debug_print_parse, debug_print_rewritten, debug_print_plan e debug_pretty_print: Nunca vi um bom motivo para mexer nisso em condições normais de temperatura e pressão.
  • log_checkpoints: Ativa o log dos checkpoints. Você pode não entender bem o que isso quer dizer, mas é uma informação que em geral não é gravada com muita frequência e pode ser bem útil para avaliação de performance. Deixe isso ligado.
  • log_connectionslog_disconnections: Faz com que cada conexão e desconexão de um usuário seja logada. Se você tem muitas conexões entrando e saindo com frequência, isso pode ser irritante, pois serão milhares de mensagens de log. Use com parcimônia.
  • log_duration: tem um efeito parecido com o log_min_duration_statement configurado com 0 (zero). A diferença é que aqui ele não mostra a consulta executada, apenas a duração. Em geral prefiro utilizar o log_min_duration_statement, mas você pode usar ele para ter a estatística da duração das consultas que levaram menos tempo que o estipulado em log_min_duration_statement
  • log_error_verbosity: em geral não há um bom motivo para mexer nisso nas condições normais de temperatura e pressão.
  • log_hostname: Se você confia nas suas configurações de DNS na rede, pode habilitar este parâmetro para mostrar o nome das máquinas que se conectam no banco ao invés do seus IPs. Caso contrário, isso pode acrescentar um custo de performance considerável.
  • log_line_prefix: Este parâmetro é muito importante e diz quais informações adicionais vem junto com os comandos SQL que aparecerem logados. Algumas ferramentas de análise de log (vamos discutir isso mais para frente) se beneficiam de determinadas configurações. Algumas coisas dependem do seu ambiente. Informação demais pode não ajudar. Por exemplo: se você utiliza um único banco de dados no seu ambiente, ou todos usuários utilizam um único usuário do banco, logar esta informação pode não ser tão útil. Mas não seja mesquinho também… Um exemplo de configuração pode ser algo como ‘%t [%p]: [%l] db=%d,user=%u ‘, ou seja, (%t) data e hora do evento, (%p) número do processo no SO, (%l) número da sequência de execução, (%d) nome da base, (%u) nome do usuário.
  • log_lock_waits: Loga eventos de espera com locks. Você deve deixar isso ligado.
  • log_statement: Loga tipos diferentes de SQL executados com sucesso, como DDL, MOD (DDL + DML), ALL (tudo) ou none (nada). Deixar em DDL costuma ser bastante razoável.
  • log_temp_files: Útil para ajustar o tamanho do parâmetro work_mem e caçar comandos SQL mal comportados. Usar com parcimônia
  • log_timezone: Em geral não costuma ser necessário mexer aqui.

Exemplos de configurações

Alterar as configurações de log é muito simples. Você deve ter uma configuração base bem robusta para o seu ambiente e pode altera-las para situações específicas onde precise de mais informações. Isto pode ser feito em uma base específica, para um usuário específico, uma função ou mesmo uma sessão. Algumas configurações no entanto se aplicam à todo o cluster e precisam que o PostgreSQL seja reiniciado para que a alteração faça efeito. Se quiser descobrir como lidar com os parâmetros do PostgreSQL, leia este artigo que publiquei sobre o assunto.

Vejamos algum alguns exemplos que utilizo no dia-a-dia. Outras possibilidades para situações específicas podem ocorrer, se quiser fazer uma sugestão, esteja à vontade para postar nos comentários.

Servidor de produção PostgreSQL dedicado

Aqui temos um log que será gerado em $PGDATA/pg_log e rotacionado todos os dias, ou quando o log atingir 64MB, ou quando o servidor for reiniciado. Optamos por um logar todos os comandos SQL que demorarem mais de 2 minutos para executarem, DDLs, uso do TEMP, locks, checkpoints. Logar todos os comandos pode ser inviável em termos de volume de logs gerados. Se você utiliza muitas tabelas temporárias, usar o log_statemente em ‘ddl’ pode ser um exagero também. Da mesma forma, logar conexões e desconexões pode gerar um excesso de logs.

Servidor de produção embarcado

Aqui queremos um log mais enxuto, pois raramente alguém irá olhar para eles. Também vamos manter um log por dia do mês e depois reescrever eles. Também  diminuímos o número de mensagens e deixamos só as mais importantes.

Servidor de testes / homologação / desenvolvimento

Aqui deixamos o log mais verboso para pegar possíveis erros. Em geral o volume de logs nunca é tão grande como na produção, pois a base não é utilizada com a mesma intensidade.

Alterando parâmetros em pleno vôo

Certamente você vai querer alterar alguns parâmetros em alguns momentos, particularmente em produção para pegar casos específicos. Um exemplo seria habilitar o log de conexões e desconexões, outro seria habilitar o log de arquivos temporários. Um caso realmente comum é o de se alterar o log_min_duration para zero e assim logar todos os comandos SQL por um período específico de tempo até que o problema que se deseja investigar se reproduza. Depois voltamos à condição anterior. Vejamos como fazer isso nas versões anteriores ao 9.4 do PostgreSQL (à partir do 9.4 você pode utilizar o ALTER SYSTEM para editar o arquivo postgresql.conf

  1. Editar o arquivo postgresql.conf. Suponhamos aqui que iremos mexer especificamente nas configurações do log_min_duration_statement, log_connections e  log_disconnections:

    Você pode deixar comentada a opção que vai alterar e copiar a linha com o novo parâmetro para guardar como referência para quando for retornar à configuração anterior. Também pode tirar uma cópia do seu arquivo postgresql.conf e depois restaurar a cópia para voltar as configurações originais
  2. Carregar as configurações e rotacionar o log. Além de enviar um sinal de SIGHUP para o postgres recarregar as configurações alteradas, seria bom rotacionar o log (claro, a não ser se você não utiliza uma configuração no log_filename que facilite isso) para isolar o arquivo que contem as configurações diferenciadas:
  3. Esperar o evento que você quer verificar ocorrer.  Monitore o diretório pg_log e verifique o tamanho e volume dos arquivos gerados. Não seria uma boa ideia deixar a partição lotar com logs. Monitorar é importante. Claro que você deve sempre colocar o pg_log numa partição separada da raiz. Mesmo assim, monitore o volume de logs gerados.
  4. Depois que o evento ocorreu e você acha que já coletou logs por tempo suficiente, edite o postgresql.conf novamente e vote para a configuração original;
  5. Recarregue novamente as configuraçõeserotacioneolog, da mesma forma que fizemos no passo 2:

Ferramentas para análise de logs

Analisar logs pode ser uma tarefa árdua. Um bom editor de texto é uma ferramenta importantíssima. Uma das coisas que você deverá fazer com frequência é seguir uma sessão do inicio ao fim. Para isso o grep será seu grande amigo. Você pode fazer algo simples como:

Também pode filtrar por aplicação ou mesmo por PID, para pegar uma sessão específica. Isso ajuda muito a avaliar o comportamento da aplicação e ver o que realmente está acontecendo no banco de dados. Uma coisa que descobrimos como DBA é que o desenvolvedor muitas vezes não sabe o que a sua própria aplicação faz no banco de dados. Você descobre problemas crônicos apenas com este tipo de análise.

Mas haverá momentos em que você deverá descobrir onde está um gargalo de performance e existe um caso bem chato de pegar: quando um comando é repetido milhares de vezes apenas mudando os parâmetros. Por exemplo: a aplicação resolve atualizar em 10% o preço de todos os produtos e resolve fazer um UPDATE em cada produto um por vez ao invés de fazer um único UPDATE para todos os produtos. Nesta situação, outros métodos de análise falham em achar gargalos deste tipo, pois se baseiam em olhar comandos SQL lentos. Acontece que um UPDATE simples em si é bem rápido. Mas o conjunto de milhares de UPDATEs é bem lento. Uma ferramenta de analise de logs vai te ajudar nesta tarefa com muita eficiência.

pgBadger

O pgBadger é a ferramenta mais utilizada e mais eficiente que eu conheço para analisar logs do PostgreSQL. Fácil de instalar e muito rápida, ela analisa vários logs de uma vez, um intervalo de tempo específico, tem várias opções bacanas, mas se você não utilizar nenhuma delas, provavelmente já terá um resultado excepcional. Apenas tome cuidado com o parâmetro log_line_prefix, que pode ter que ser ajustado.  Segue aqui um exemplo de geração de relatório analítico do pgBadger:

O arquivo out.html pode ser aberto em qualquer navegador e possui dezenas de informações úteis. Veja aqui um exemplo de relatório gerado por ele.

Outras ferramentas

  • pgFouine: Ferramenta de analise de logs largamente utilizada antes do advento do pgBadger. Caiu em desuso.
  • Logs em CSV: Você pode gerar logs no formato CSV e utilizar outras ferramentas externas para analisar os logs. Pode inclusive utilizar o comando COPY  e importar os logs numa tabela. Assim você pode utilizar comandos SQL para filtrar e analisar os logs;
  • auto_explain: Esta ferramenta gera o EXPLAIN de comandos SQL no log que obedecerem alguns critérios.
  • Elasticsearch: Uma plataforma de analise de dados com inúmeras opções avançadas.

Conclusão

Uma parte considerável do trabalho do DBA é gasta analisando logs. É a melhor forma de se avaliar o que aconteceu no passado. Um log bem configurado possibilita um trabalho bem feito. E a chance do seu problema ser resolvido aumenta em probabilidade, velocidade e qualidade. Outra coisa importante é manter o log limpo. É comum ver aplicações que geram lixo no log ou cometem “erros inocentes” que não geram nenhum problema na prática, mas entopem o log de lixo. O log é uma fonte imprescindível de informações no PostgreSQL. Ele possui capacidades bem avançadas para trabalhar com seus logs, mas você precisa pelo menos configura-los corretamente.

canivete

Aprenda a trabalhar com as configurações do PostgreSQL

O PostgreSQL tem um monte de botões e chavinhas para você ajustar uma série de parâmetros. A maioria destes parâmetros podem ser configurados a partir de 2 arquivos:

  • postgresql.conf: aqui são ajustadas as configurações do PostgreSQL que serão utilizadas em todo o cluster (entenda aqui clister como o conjunto de bases associadas à uma única instância ou conjunto de processos do PostgreSQL).
  • pg_hba.conf: aqui são ajustadas configurações de permissão de acesso e autenticação que serão utilizadas para todo o cluster,  por base, por usuário ou role.

A versão 9.4 do PostgreSQL adicionou uma nova cláusula SQL chamada ALTER SYSTEM. Com este comando, você pode editar diretamente as configurações do arquivo posqtgresql.conf.

Conhecendo a view pg_setting

Para entender melhor como funcionam as configurações do PostgreSQL (também conhecidas como GUCs ou Grand Unified Configuration) , é fundamental conhecer a view pg_settings (que é baseada na função pg_show_all_setting):

Vamos analisar cada campo detalhadamente, pois eles envolvem vários conceitos importantes no meio:

  • name: nome da variável ou GUC, como os desenvolvedores do postgres gostam de chamar;
  • setting: o valor atual no contexto atual para aquela variável. Note que o contexto pode variar de acordo com varias coisas, como a forma como o PostgreSQL foi compilado, parâmetros passados para o postmastar ao subir o serviço, configurações do postgresql.conf, base em que você está conectada, usuário conectado e finalmente, alterações realizadas na sessão atual;
  • unit: Algumas variáveis podem ter valores que remetem a unidades específicas como: ms (milisegundos), s (segundos), min (minutos), kB (kiloBytes) e 8kB. Preste a atenção nas unidades, particularmente quando o valor estiver em unidades de 8kB, pois o valor em setting, pode lhe confundir. Um valor de 256 com uma unidade de 8kB significa na verdade 256 x 8kB =  2mB;
  • category: As variáveis estão agrupadas em categorias, vide a documentação. Fazer uma consulta apenas nas variáveis que estão na categoria que você procura pode ajudar a filtrar seus resultados ou ordenações.
  • short_desc: Descrição sucinta sobre a variável;
  • extra_desc: Descrição e detalhes adicionais sobre a variável. Não chega a substituir a documentação, mas pode lhe ajudar em alguns momentos;
  • context: Diz em qual tipo de situação a variável pode ser alterada. Os níveis mais baixos sempre podem ser alterados nos níveis mais baixos, mas não o contrário:
    • internal – não podem ser alteradas de jeito nenhum. Algumas podem ser alteradas durante a compilação do PostgreSQL. Ou seja, não adianta tentar sair alterando. Estão lá mais por referência.
    • postmaster – só podem ser alteradas após reiniciar o postgres. Você pode alterar parâmetros no postgresql.conf (ou usar o ALTER SYSTEM), mas as novas configurações só entrarão em vigor após reiniciar o postgres. Você também pode ajustar algumas variáveis passando parâmetros para o postmaster. Não recomendo fazer isso.
    • sighup – podem ser alterando com um reload (sinal SIGHUP ou usar a função pg_reload_conf).
    • backend – também podem serem alterados quando a conexão é estabelecida utilizando as variáveis de ambiente PGOPTIONS. No entanto uma vez iniciada a sessão, o valor configurado não pode ser mais alterado durante toda a vida desta sessão;
    • superuser – podem ser alterados com os comandos SET, ALTER ROLE e ALTER DATABASE, mas apenas super usuários podem executar estas alterações. Na prática isto significa que sessões de usuários que não são superusuários não podem ser alteradas no meio de uma sessão.
    • user – também podem ser alterados com SET, ALTER ROLE e ALTER DATABASE, mas não precisa ser um superusuário para fazê-lo.
  • vartype: sim senhores, os valores em no campo setting vem todos no formato texto… então você precisa saber que tipo de valor é permitido neste campo! As variáveis podem ser dos tipos  bool, enum, string, integer ou real.
  • source: Esta opção lhe diz de onde vem o valor configurado para aquela variável. Uma vez que dependendo do contexto, a variável pode ter sido ajustada em diversos contextos, ou apenas estar assumindo o valor padrão: o valor default no campo source significa que em nenhum momento esta variável foi alterada. Os possíveis valores para o campo source são: default,override, configuration file, environment variable, client, database ou user.
  • min_val: valor mínimo permitido caso o tipo do valor seja numérico
  • max_val: valor máximo permitido caso o tipo do valor seja numérico
  • enumvals: valores permitidos caso o tipo do valor seja enum
  • boot_val: valor assumido pela variável ao iniciar o postgres se ela não for configurada em nenhum local
  • reset_val: valor assumido pela variável se um RESET for solicitado no meio de uma sessão
  • sourcefile: nome do arquivo de configuração onde a variável foi ajustada. Só faz sentido utilizar este campo se você utilizar includes dentro do postgresql.conf
  • sourceline: linha do arquivo que alterou aquela variável.

Como você vê, muito da vida das suas GUCs pode ser bem investigada com um bom SELECT na pg_settings. Existem outras formas mais simples de visualizar o valor atual de uma variável, como o comando SHOW ou a função current_setting:

Note aqui que utilizando o comando SHOW ou a função current_setting, ocorre uma conversão do valor numa unidade mais fácil de se entender.

 Alterando valores

Existem várias formas de se alterar um parâmetro, mas isto depende do contexto permitido. Veja o campo context da pg_settings.

context = ‘internal’

Uma variável cuja o contexto é internal, não pode ser alterado em nenhum momento, depois que o binário foi compilado. Veja:

context = ‘postmaster’

Agora, se tentarmos alterar um parâmetro cuja o contexto é postmaster, o valor só será alterado após reiniciar o postgres:

Note que alteramos o parâmetro shared_buffers, com sucesso, mas ao rodar a função pg_reload_conf, o valor não foi alterado. Apenas após reiniciar o banco a alteração surtiu efeito. Por outro lado, se tentarmos alterar a mesma variável no meio de uma sessão com o comando SET teremos um erro:

context = ‘sighup’

Agora vejamos o que acontece quando tentamos alterar uma variável de contexto SIGHUP:

Como você vê, não foi preciso reiniciar o postgres, apenas dar um reload nele. E assim como antes, o comando SET não pode ser executado neste contexto de variável.

context = ‘backend’

Note aqui que apenas após enviar o sinal de SIGHUP e reiniciar a conexão que o valor aparece. Existe ainda a opção de ajustar a variável de ambiente PGOPTIONS antes de estabelecer a conexão:

A alteração da variável log_connections só é válida para esta sessão específica. Diferentes linguagens de programação que utilizam a bibilioteca libpg para se conectar no postgres tem formas semelhantes de ajustar opções ajustando o PGOPTIONS ao estabelecer a conexão.

context = ‘superuser’

Agora vamos finalmente poder utilizar o comando SET, ALTER ROLE e também o ALTER DATABASE:

Aqui, quando utilizamos o ALTER SYSTEM, precisamos rodar o pg_reload_conf para a alteração surtir efeito. Mas a alteração vale para todas as conexões.  Quando rodamos o SET, a alteração entra em vigor imediatamente, mas só vale para aquela sessão.

Agora vamos tentar alterar o parâmetro para uma base específica:

Aqui, criamos uma nova base e configuramos um valor diferente para o parâmetro log_mim_messages apenas para aquela base. Podemos fazer a mesma coisa com um usuário qualquer:

Agora note que o usuário novo não é um superusuário, portanto ele não pode alterar o parâmetro:

 context = ‘user’

A única diferença aqui é que até mesmo um usuário comum pode alterar parâmetros com este contexto no meio da sua sessão.

contexto: dentro de uma transação

Por padrão, sempre que você altera uma configuração usando o comando SET, esta configuração dura até o final da sessão ou até que outro comando SET seja executado alterando o mesmo parâmetro. No entanto, existe a opção LOCAL que faz com que esta configuração dure apenas a transação corrente. Ou seja: após um COMMIT ou ROLLBACK, o parâmetro retorna para o valor anterior, veja:

Outra opção equivalente ao comando SET é a função set_config, que possui uma opção chamada is_local que determina também se a alteração deverá durar para toda a sessão ou apenas para aquela transação. O único cuidado é que o valor a ser configurado deve sempre vir entre aspas simples, pois a função recebe o valor utilizando o tipo de dado text.

 GUCs rocks!

A flexibilidade como podemos ajustar diversos parâmetros tornam uma série de atividades mais simples. Agora com o comando ALTER SYSTEM, você pode trabalhar com todos os parâmetros de contexto SIGHUP para baixo só utilizando SQL. A gama de situações em que podemos ajustar em situações específicas é enorme. Um exemplo seria ajustes no work_mem para conexões que precisem gerar relatórios mais complexos. Ou alterações nos logs para gerar debug em situações específicas. E por aí vai. Se você aprender a trabalhar corretamente com as GUCs, vai descobrir que a vida pode ser mais simples e dinâmica.

Boa diversão!