<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SAVEPOINT &#187; PostgreSQL</title>
	<atom:link href="http://www.midstorm.org/~telles/category/informatica/postgresql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.midstorm.org/~telles</link>
	<description>Ideas not commited yet!</description>
	<lastBuildDate>Tue, 20 Dec 2011 02:17:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Postgres, PGBR2011, Timbira e o universo.</title>
		<link>http://www.midstorm.org/~telles/2011/12/02/postgres-pgbr2011-timbira-e-o-universo/</link>
		<comments>http://www.midstorm.org/~telles/2011/12/02/postgres-pgbr2011-timbira-e-o-universo/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 11:51:54 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[pgbr2011]]></category>
		<category><![CDATA[postgres]]></category>
		<category><![CDATA[Timbira]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=819</guid>
		<description><![CDATA[Agora que o PGBR2011 está quase acabando, que as últimas prestações de contas estão terminando, os fornecedores sendo pagos e as últimas palestras sendo publicadas no site, eu me deparei com mais uma boa provocação do Fernando Ike. Ok, o &#8230; <a href="http://www.midstorm.org/~telles/2011/12/02/postgres-pgbr2011-timbira-e-o-universo/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Agora que o PGBR2011 está quase acabando, que as últimas prestações de contas estão terminando, os fornecedores sendo pagos e as últimas palestras sendo publicadas no site, eu me deparei com mais uma <a href="http://www.midstorm.org/~fike/weblog/2011/11/10/parabens-excelente-pgbr-2011/">boa provocação</a> do Fernando Ike. Ok, o post é do dia 10/11, mas eu só vi hoje. Ainda estou bem atrasado com um monte de coisas e hoje de manhã comecei a passar varias coisas em revista. Então deu aquela vontade de escrever&#8230;.</p>
<p>O #PGBR2011 foi um marco para mim. Morreu aquele jeito moleque de juntar a turma e ficou claro que a &#8220;pegada&#8221; da comunidade mudou. A turminha que se conheceu há 10 anos atrás nos FISLs da vida cresceu e tem desafios para lá de cabeludos na mão. Eu mesmo jamais imaginaria que estaria trabalhando com um dos cases mais importantes de Postgres do Brasil há 10 anos atrás. Acho que eu nem imaginava que daria para fazer o que a gente faz com o Postgres hoje naquele tempo. Mas a gente apostou, eu consegui abandonar a minha vida de DBA Oracle e estou feliz da vida me matando de trabalhar com Postgres quase em tempo integral (aka 24/7).</p>
<p>O evento foi num hotel. Não foi numa universidade, não foi num lugar barato. E para a nossa surpresa: fomos nós mesmos que pagamos boa parte da conta: Eu, o Euler, Fabrízio, o Charly, o Coutinho, etc. Nós patrocinamos o evento. Nós pudemos tirar $$ do bolso para fazer o evento acontecer. Para quem não sabe, eu e o Euler Taveira, somos Sócios da <a href="http://www.timbira.com.br/timbira">Timbira</a>, que está já há uns 2 anos na estrada. A gente nunca teve muita pressa de crescer. Nem no nosso site a gente investiu muito. Na verdade a gente está tendo de expandir para dar conta da demanda. Não, ninguém está ganhando muito dinheiro. Talvez empresas maiores como a Dextra e a 4Linux estejam melhor. Certamente a VMware vai bem. Mas estamos vivendo disso. No caso da Timbira, vivendo <strong>só</strong> disso. E temos encontrado bons parceiros no caminho. Direta ou indiretamente, estivemos presentes em várias palestras comigo, com o Euler Taveira, com o Dickson Guedes, com o Roberto Mello, com o Fabrízio Mello e tem mais um que logo logo deve estar finalmente assumindo seu lugar junto a Timbira. E tem mais, eu, o Euler e o Guedes (os 3 dos 4 fundadores da Timbira) ganharam prêmios pela nossa atuação na comunidade durante o evento. Não, nenhum de nós fez parte da comissão que elegeu os premiados. Acho que dificilmente vamos encontrar alguém que respira mais Postgres no Brasil do que o Euler Taveira. Não foi por acaso que ele foi nomeado para 4 das 5 categorias do &#8220;Prêmio PGBR2011&#8243;. É realmente uma honra ter estes caras como colegas de trabalho. Mas eu também estou finalmente dando meus pulinhos. Hoje eu teria tanta coisa para escrever aqui no blog que eu nem sei por onde começar. Preciso de um pouco de tempo para voltar a escrever para valer.</p>
<p>Não é pouca coisa né? Mas este ano foi a primeira vez que mandamos fazer um folder da Timbira. A gente passa tanto tempo trabalhando com Postgres que não tivemos tempo de &#8220;aparelhar&#8221; a nossa empresa. Sim, temos que melhorar isso. Bom, mas tirando a propaganda toda, (que é a primeira vez que eu cito aqui no blog), a questão é que agora a nossa pegada mudou. Não somos mais moleques. Ninguém mais é. Mesmo o Diogo Biazus com o seu novo visual Punk, sabe que a fase da molecagem passou. Ele também é empresário. E são empresários a maioria dos palestrantes que estiveram no evento. Nem tudo são flores. Eu descobri por exemplo que o Carlos Smanioto, um dos ícones que começou a publicar os primeiros artigos sobre Postgres na SQL Magazine estava com dificuldades alguns meses antes do PGBR2011. Outros dois grandes colegas excepcionais ficaram desempregado recentemente. Eu também tenho minhas dívidas para pagar&#8230;. Não estamos vivendo de brisa. Estamos trabalhando muito, errando muito e aprendendo muito. No entanto, me arrisco a dizer que estamos felizes. Não é fácil explicar isso para nossas famílias. Mas é bem verdade. Eu posso dizer que trabalho com o que eu gosto e isso não é para qualquer um.</p>
<p>Mas voltando a provocação do Sr. Fernando Ike. Eu tenho sempre medo do que esse cara diz, pois ele tem a mania de acertar &#8211; ele também tem a mania de ser sorteado para alguma coisa em todo evento que vai. Já vi ele ser sorteado 2 vezes num único evento. E essa história de banco de dados virar comodity, já está escrito nas estrelas faz um tempo. Quando você vira especialista numa coisa, não quer que ela deixe de existir, pois você se dedicou por anos a fio para adquirir um bom domínio naquilo. Os bancos da dados relacionais não vão deixar de existir. Mas quem acha que eles vão continuar com o seu &#8220;reinado&#8221;, como o centro do universo que muito DBA acha que é&#8230; já caiu do cavalo. Isso está ruindo mesmo. Claro, isso que não muda tão rápido assim. Ninguém acha que as transações bancárias vão começar a rodar em bases NoSQL. Mas é inútil negar que tem muita informação que não precisa de um banco de dados transacional 100% ACID para cuidar. E os novos desafios estão aí para quem quiser enxergar ou não.</p>
<p>Enquanto a adoção do Postgres cresce no mundo todo e notoriamente no Brasil, um novo movimento surge quebrando paradigmas e a gente vai ter de aprender a conviver com isso. A palestra da <a href="http://pgbr.postgresql.org.br/2011/palestras.php?id=66">VMware</a> estava lá para quem quisesse enxergar. A revolução acontecendo bem na nossa cara. Eu sei que o Ike tem uma visão clara disso. Quando você se afasta e olha mais de longe, consegue ver o mundo girar. Esse negócio de nuvem&#8230; tem muita balela e gente querendo vender coisa velha com nome novo. Mas quando eu olho o número de clientes nossos que estão colocando seus software como <a href="http://pt.wikipedia.org/wiki/Software_como_servi%C3%A7o">SaaS</a>, é notavel que as coisas estão mudando. E olha só, a Locaweb estava lá no evento&#8230;</p>
<p>É pessoal, eu não sei o próximo PGBR vai rolar ou como ele será. Sei que é bem possível que ele ocorra. Não sei se eu terei tempo para me dedicar a ele como me dediquei em 2011. Nem se as minhas prioridades estarão neste rumo até lá. Mas o mundo está girando&#8230; independente de nós sentirmos isso ou não. Os polos magnéticos vão se inverter, uma nova era do gelo vai vir e um novo super continente vai se formar. Precisamos mesmo olhar para fora da caixa. Mas enquanto isso, posso dizer que o Postgres tem me surpreendido muito. Tem se mostrado um grande parceiro, e trabalhar com ele tem sido divertido.</p>
<p>Bom, agora tem um monte de coisas para fazer aqui, até a próxima cervejada pessoal!</p>
<p><strong>OBS</strong>: Antes que alguém pergunte&#8230; o <a href="http://pt.wikipedia.org/wiki/Timbira_(povos)">nome Timbira</a> foi escolhido pelo Euler que tem um <a href="http://www.timbira.com/">blog</a> com esse nome bem antes da &#8220;Empresa Timbira nascer&#8221;. Ele ajudou muito na tradução da documentação e internacionalização do Postgres. Como ele é Goiano e tem lá uma paixão louca pelo Brasil, eu acho que escolher um nome indigena para a nossa &#8220;Empresa Brasileira de Postgres&#8221; faz até muito sentido. Claro, é bem engraçado quando as pessoas pedem para repetir o nome da empresa umas 2 ou 3 vezes até entender. Todo mundo espera um buzzword em inglês. Mas depois de um tempo, eu achei o nome tão bacana quanto continuar escrevendo um blog em pt_BR e fazer parte do nosso <a href="http://planeta.postgresql.org.br/">planeta</a> tupiniquim, <img src='http://www.midstorm.org/~telles/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  . De toda forma, quanto mais masterfucking é o cliente, mais legal é ver a Timbira entrando lá de verde e amarelo&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2011/12/02/postgres-pgbr2011-timbira-e-o-universo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PGBR2011 &#8211; DONE</title>
		<link>http://www.midstorm.org/~telles/2011/11/08/pgbr2011-done/</link>
		<comments>http://www.midstorm.org/~telles/2011/11/08/pgbr2011-done/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 13:09:37 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=816</guid>
		<description><![CDATA[Finito, senhores. O PGBR2011 já se foi. Ok, ainda tem prestação de contas, avaliações a serem feitas, dinheiro de empenhos para receber, etc e tal. Mas agora até mesmo o Koichi Suzuki já terminou de dar a volta no mundo &#8230; <a href="http://www.midstorm.org/~telles/2011/11/08/pgbr2011-done/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Finito, senhores. O PGBR2011 já se foi. Ok, ainda tem prestação de contas, avaliações a serem feitas, dinheiro de empenhos para receber, etc e tal. Mas agora até mesmo o Koichi Suzuki já terminou de dar a volta no mundo e voltou para o Japão.</p>
<p>Fazer um evento num hotel tornou tudo muito mais caro. Foram mais de R$ 16K com aluguel das salas, projetores, sonorização, sala VIP, cofee break e claro, a cervejada. As despesas com hospedagem de palestrantes também foram altas, gastamos uns R$ 8K com isso. Mas o retorno foi incrível. O preço da diária não foi tão alto para quem veio de fora (negociamos isso em abril) e estavam todos lá. Sair para dar um passeio em São Paulo com a turma, dormir até mais tarde ou mesmo ficar de bobeira no saguão com os palestrantes internacionais tomando uma caipirinha. Isso tudo ficou mais fácil. Foi um enorme avanço em relação a 2009. Em 2009 só a organização pode desfrutar do excelente hotel da Unicamp. Sim, o hotel da Unicamp era muito mais agradável. A Unicamp em si é muito mais agradável. O mar de prédios de São Paulo não é algo tão bacana assim. Mesmo tirando a nossa tradicional &#8220;<a href="http://www.flickr.com/photos/tellesr/6322484113/in/pool-1655373@N21/">foto do Bozo</a>&#8221; na piscina, a sensação de estar espremido entre prédios é meio bizarra. Mas o evento se tornou mais acessível para todos. No final, quem mais ganhou foi quem pagou para ir ao evento e pode estar mais próximo dos palestrantes e demais congressistas.</p>
<p>Trazer tanta gente de fora, não foi moleza. O Flávio perdeu a conta de quantas vezes foi até o aeroporto. Além de convidar os Srs. Alvaro Herrera, Bruce Momjian, Dave Page, Greg Smith e Koichi Suzuki, o Sr. Jaime Casanova passou pela chamada de trabalhos e houveram pessoas que saíram de outros países só para vir ao PGBR2011, como o Sr. <a href="http://pyrseas.wordpress.com/2011/10/31/postgresql-conference-brasil-2011/">Joe Abbate</a> que também aproveitou para passear pelo Brasil, claro. Bom, o fato é que o evento novamente chamou a atenção de pessoas de outros países e isso foi algo muito interessante de ver. Tenho de reconhecer que assistir uma palestra em espanhol parece mais difícil que assistir uma palestra em inglês. Acho que a nossa overdose diária de documentação em inglês deve ter algo haver com isso. Vamos ter de repensar nisso no próximo evento.</p>
<p>Houveram alguns problemas menores como erros na impressão dos certificados e o atraso no recebimento dos chaveiros e adesivos. O elefante de pelúcia não ficou uma maravilha, mas se esgotou nos primeiros minutos do evento. O chaveiro ficou muito bacana também. No final acho que ficamos bem. A comida do hotel era realmente muito boa. O almoço não tinha muita variedade mas o peixe deles estava ótimo. A sala VIP era VIP mesmo. Dois bons sofás onde era perfeitamente possível tirar um bom cochilo, uma mesa para quem precisasse terminar uma palestra, fazer uma reunião de negócios ou atender um cliente remoto (sim, isto SEMPRE acontece).</p>
<p>Achei a estrutura vertical do hotel um pouco incômoda. Você tinha que ficar subindo e descendo escadas dos auditórios para o salão de exposições. Os patrocinadores podem não ter gostado muito disso também. Mas acho que não foi algo terrível. Por outro lado, o salão de exposições era bem espaçoso, e conseguiu comportar todos no intervalo para o café sem problemas. E olha que era muuuita gente.</p>
<p>As inscrições foram muito mais tranquilas que em 2009. Mais antecedência, o apoio com atendimento telefônico e um sistema de inscrições mais maduro ajudaram muito. Não que não houvessem problemas. O fato da prefeitura de Porto Alegre não emitir nota fiscal eletrônica, junto com a greve dos correios foi um tiro no pé. Mas o Euler e a Débora estão de parabéns pelo trabalho nesta área.</p>
<p>Então vejamos alguns números:</p>
<ul>
<li>Quase R$ 65K de custo no evento, sendo R$ 23K recebido pelas inscrições e o restante de 13 patrocinadores nacionais e internacionais. Este também foi o primeiro ano que não precisamos de ajuda da <a href="http://www.spi-inc.org/">SPI</a>.</li>
<li>Mais de 240 pessoas inscritas no evento;</li>
<li>Mais de 50 propostas de palestras na chamada de trabalhos e um total de 32 palestrantes presentes, fora os Lightning Talks.</li>
<li>400 ecobags, 200 chaveiros, 100 squeezes, 100 camisetas, 60 elefantes de pelúcia, 5 banners, 1000 cartazes, 1000 adesivos pequenos e 100 adesivos normais.</li>
<li>200 litros de chopp e inúmeras histórias para contar.</li>
</ul>
<div>É, não tem preço mesmo.</div>
<div>Foi muito bom ver todos vocês novamente, eu realmente estava com saudades do pessoal. Até a próxima gente. <img src='http://www.midstorm.org/~telles/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </div>
<div>Eu precisava escrever algo mais inteligente, com impressões mais filosóficas e coisa e tal. Mas até agora não consegui digerir direito minhas próprias impressões, então mais para frente eu escrevo novamente.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2011/11/08/pgbr2011-done/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>#PGBR2011 &#8211; Tudo ao mesmo tempo agora</title>
		<link>http://www.midstorm.org/~telles/2011/10/06/pgbr2011-tudo-ao-mesmo-tempo-agora/</link>
		<comments>http://www.midstorm.org/~telles/2011/10/06/pgbr2011-tudo-ao-mesmo-tempo-agora/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 12:13:15 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[pgbr2011]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=809</guid>
		<description><![CDATA[Zilhões de coisas rolando ao mesmo tempo: Saiu a lista dos palestrantes do PGBR2011. A grade ainda estamos montando. Sim, uma palestra minha foi aprovada (não, eu não faço parte da banca avaliadora), vou falar sobre processos de melhoria de &#8230; <a href="http://www.midstorm.org/~telles/2011/10/06/pgbr2011-tudo-ao-mesmo-tempo-agora/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Zilhões de coisas rolando ao mesmo tempo:</p>
<ul>
<li>Saiu a lista dos palestrantes do PGBR2011. A grade ainda estamos montando.</li>
<li>Sim, uma palestra minha foi aprovada (não, eu não faço parte da banca avaliadora), vou falar sobre processos de melhoria de desempenho em ambiente OLTP de alta concorrência. A palestra se chama: &#8220;Fazendo uma manada passar debaixo da porta&#8221;</li>
<li>O link onde o site do PGBR está hospedado está com problemas sérios no link. Esperamos que isto esteja normalizado em breve.</li>
<li>Foi publicada a minha participação no #DatabaseCast sobre PostgreSQL, no Imasters.</li>
<li>Estamos mandando bala no material promocional. Tirando a sacola, tudo será vendido praticamente a preço de custo. Até agora serão:</li>
<ul>
<li> 400 ecobags para o material do evento;</li>
<li>100 squeezes em alumínio;</li>
<li>100 elefantes de pelúcia;</li>
<li>100 camisetas pólo;</li>
<li>200 chaveiros;</li>
<li>1000 adesivos;</li>
</ul>
<li>Um mês antes do evento ocorrer, temos 120 inscritos. Sim, brasileiro deixa tudo para a última hora&#8230; então devemos ter um número bem superior até lá.</li>
<li>Teremos um prêmio para as pessoas que mais se destacaram nos últimos tempos. Estamos organizando isso ainda, mas será uma forma de valorizar aqueles que tem contribuído para o fortalecimento da comunidade brasileira.</li>
</ul>
<div>Bom, muita coisa ao mesmo tempo&#8230; não dá para falar tudo que eu gostaria, mas o mais importante de tudo:</div>
<h2>O chopp está garantido no final do evento!!!</h2>
<p>(ok, vai ter refrigerante também&#8230; mas não consegui achar o Guaraná Jesus por aqui)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2011/10/06/pgbr2011-tudo-ao-mesmo-tempo-agora/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PGBR2011 &#8211; Inscrições abertas!</title>
		<link>http://www.midstorm.org/~telles/2011/09/03/pgbr2011-inscricoes-abertas/</link>
		<comments>http://www.midstorm.org/~telles/2011/09/03/pgbr2011-inscricoes-abertas/#comments</comments>
		<pubDate>Sat, 03 Sep 2011 13:00:39 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[pgbr2011]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=795</guid>
		<description><![CDATA[Este ano tudo será diferente&#8230;. sim já é. Uma das maiores dificuldades do PGCon Brasil, agora rebatizado como PGBR, é a parte das inscrições. É o tipo de coisa difícil de fazer de forma voluntária. Nas edições anteriores o Euler &#8230; <a href="http://www.midstorm.org/~telles/2011/09/03/pgbr2011-inscricoes-abertas/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="PGBR2011 - Inscrições abertas!" href="http://pgbr.postgresql.org.br/"><img class="aligncenter" style="border-style: initial; border-color: initial; border-width: 0px;" title="PGBR2011 - Inscrições abertas" src="http://pgbr.postgresql.org.br/2011/imgs/divulgue_inscricoes.png" alt="" width="168" height="80" /></a></p>
<p>Este ano tudo será diferente&#8230;. sim já é. Uma das maiores dificuldades do PGCon Brasil, agora rebatizado como PGBR, é a parte das inscrições. É o tipo de coisa difícil de fazer de forma voluntária. Nas edições anteriores o Euler Taveira e o Diogo Biazus se mataram para fazer as inscrições acontecerem. Bom, a gente continua se matando, mas desta vez temos uma forcinha. Temos algo revolucionário: um número de telefone!!! Ou seja, alguém poderá lhe ouvir, tirar suas dúvidas, falar como nós somos bacanas, ouvir reclamações e passar receitas de bolo pelo telefone. Não, a pessoa que irá atender o telefone não vai lhe ensinar a deixar o seu banco de dados mais rápido&#8230;. se a gente faz isso ninguém vai no evento, <img src='http://www.midstorm.org/~telles/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </p>
<p>Mas não é só isso, o Euler melhorou bastante a 3º versão do sistema de inscrições. As notas fiscais continuarão sendo um problema chato, pois a prefeitura de Porto Alegre &#8211; RS ainda não emite nota fiscal eletrônica. Ou seja, ainda vamos ter que continuar mandando pelo correio. Se você não precisa de nota fiscal, pegue o seu boleto, pague, autentique e use-o como comprovante. Dá um trabalhão despachar tudo pelo correio.</p>
<p>Se você pertence a um órgão público, se adiante por favor. Todo mundo sabe o mega trampo que é fazer o processo de empenho. Estamos com todos os documentos em ordem, a <a href="http://softwarelivre.org/asl">ASL</a> (o PostgreSQL-BR é associado a ASL, que é quem nos dá respaldo jurídico e contábil), e já está cadastrada no SICAF. Facilite a sua vida e consulte o <a href="http://www.comprasnet.gov.br/">SICAF</a>. Sim, o preço da inscrição para governo é mais caro. Também nos custa muito receber o dinheiro da inscrição de um órgão público. E o dinheiro só pode ser utilizado para custear o evento do próximo ano, uma vez que governo só paga depois do evento&#8230; e os nossos fornecedores não trabalham assim.</p>
<p>A grande novidade na minha opinião é a inscrição VIP. Todo mundo que se inscreve tem acesso às palestras nos 2 dias, coffe-break e a cervejada que deverá rolar no encerramento. Mas quem puder pagar um pouco mais, já pode incluir o custo do almoço no hotel. As vagas são limitadas, pois o restaurante do hotel não vai comportar todos. Mas para quem optar por isso, vai poder almoçar junto com os palestrantes, patrocinadores e a organização do evento. As vagas são limitadas a 80 pessoas, então corram, pois a maioria dos inscritos até agora optou mesmo pela inscrição VIP.</p>
<p>Bom, por enquanto é só, façam já sua inscrição e o chopp será por nossa conta. Em tempo: há também uma promoção para os 20 primeiros inscritos <em>confirmados</em> no evento. Eles ganharão um elefante de pelúcia do PGBR. Mas acredito que quando você estiver lendo isso, a promoção já tenha acabado. A não ser que o 20 primeiros demorem muito para <em>confirmar</em> (a.k.a. <em>pagar</em>) suas inscrições.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2011/09/03/pgbr2011-inscricoes-abertas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PGDay RS no dia 19 de agosto de 2011</title>
		<link>http://www.midstorm.org/~telles/2011/08/15/pgday-rs-no-dia-19-de-agosto-de-2011/</link>
		<comments>http://www.midstorm.org/~telles/2011/08/15/pgday-rs-no-dia-19-de-agosto-de-2011/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 11:26:35 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=791</guid>
		<description><![CDATA[O pessoal de RS se mexeu e mais um PGDay RS estará ocorrendo este ano. Será no dia 19 de agosto (sexta-feira) em Porto Alegre. Os palestrantes, a programação e o local estão todos publicados no site do evento. Infelizmente &#8230; <a href="http://www.midstorm.org/~telles/2011/08/15/pgday-rs-no-dia-19-de-agosto-de-2011/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>O pessoal de RS se mexeu e mais um PGDay RS estará ocorrendo este ano. Será no dia 19 de agosto (sexta-feira) em Porto Alegre.</p>
<p>Os palestrantes, a programação e o local estão todos publicados no site do evento. Infelizmente não vou poder estar lá, mas já vi que a grade de palestrantes é excelente e será um evento bem bacana, incluindo um Dojo PL/pgSQL e os já conhecidos Lightning Talks.</p>
<p>Gostaria aqui de parabenizar os palestrantes Dickson Guedes, Diego Rossi, Diogo Biazus, Eduardo Wolak e Fabiano Machado Dias por palestrarem no evento e em especial para o Fabrízio de Royes Mello que é a pessoa que está liderando a organização do evento.</p>
<p>Não esqueçam de mandarem as fotos, publicarem as palestas, ok?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2011/08/15/pgday-rs-no-dia-19-de-agosto-de-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PGBR2011 &#8211; Chamada de trabalhos</title>
		<link>http://www.midstorm.org/~telles/2011/08/14/pgbr2011-chamada-de-trabalhos/</link>
		<comments>http://www.midstorm.org/~telles/2011/08/14/pgbr2011-chamada-de-trabalhos/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 03:21:53 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[pgbr2011]]></category>
		<category><![CDATA[postgres]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=784</guid>
		<description><![CDATA[Nesta semana foi aberta a Chamada de Trabalhos do PGBR2011. A chamada ficará aberta até o dia 09/09/2011 então não bobeie e mande logo as suas propostas. Este ano serão 4 modalidades diferentes (fora os Lightning Talks): Palestras normais de 50 &#8230; <a href="http://www.midstorm.org/~telles/2011/08/14/pgbr2011-chamada-de-trabalhos/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Nesta semana foi aberta a <a href="http://pgbr.postgresql.org.br/2011/chamada.php">Chamada de Trabalhos</a> do <a href="http://pgbr.postgresql.org.br/">PGBR2011</a>.</h2>
<p>A chamada ficará aberta até o dia 09/09/2011 então não bobeie e mande logo as suas propostas. Este ano serão 4 modalidades diferentes (fora os Lightning Talks): Palestras normais de 50 minutos, tutoriais de 2 horas, hacker talks que podem der de 30 minutos até 2 horas e os painéis acadêmicos que serão expostos no saguão do evento. Tudo explicado no site do evento. Você pode mandar até 5 propostas diferentes para a banca avaliadora (da qual eu não faço parte) escolher.</p>
<p>Eu já estou preparando as minhas propostas, mas segue algumas que eu gostaria de ver lá. Eu sei que tem muita gente que já usa PostgreSQL há um tempão e acha que não teria nada de interessante para falar. Não se intimide, tenho certeza que se você usa o PostgreSQL há mais de um ano, deve se sentir à vontade para falar algum assunto como:</p>
<ul>
<li>
<h4><em>Postgressssss</em>, lendas urbanas sobre PostgreSQL e um apanhado da sua evolução nas últimas versões;</h4>
</li>
<li>
<h4>Casos de sucesso de quem não tem vergonha de revelar que usa o PostgreSQL em negócios críticos;</h4>
</li>
<li>
<h4>Porquê o PostgreSQL é cada vez mais amante predileta dos DBAs experientes;</h4>
</li>
<li>
<h4>&#8220;<a href="http://agajorte.blogspot.com/2009/03/meu-postgresql-nao-conecta.html">Meu PostgreSQL não Conecta</a>&#8221; e outras coisas que alguém tem de escrever para a gente não repetir novamente na lista&#8230;</h4>
</li>
<li>
<h4>Ops, minha base já tem mais de 1TB&#8230; ;</h4>
</li>
<li>
<h4>BI, Data Mining, OLAP, PL/R e outros bichos;</h4>
</li>
<li>
<h4><a href="http://www.postgresql.org/docs/9.1/static/textsearch.html">Full Text Search</a>, particularmente como raios se montam Ranks e dicionários personalizados;</h4>
</li>
<li>
<h4>Funções de agregação personalizadas, operadores personalizados, tipos de dados personalizados e o que mais você tiver coragem de inventar;</h4>
</li>
<li>
<h4>Bancos de dados em pesquisas científicas, como em biologia, física e outras ciências ocultas;</h4>
</li>
<li>
<h4>Haks, muitos hacks! Queremos hacks em C, em Perl, Python, SPI, PL/pgSQL etc. Queremos nerds genuínos!!!</h4>
</li>
<li>
<h4>Vou te apresentar a uma tal de libpq&#8230;</h4>
</li>
<li>
<h4>Tuning em bases OLTP  com fucking hight concorrência;</h4>
</li>
<li>
<h4>ETL (Extract Transform Load) em ambientes alucinógenos;</h4>
</li>
<li>
<h4>pgbench e outras técnicas para emular a carga da aplicação em ambiente de homologação ou &#8220;hum&#8230;. então dá para fazer isso antes de sentar a aplicação no cliente?&#8221;</h4>
</li>
<li>
<h4>Versionamento de DDL e como controlar do demônio da tasmânia das alterações de estrutura em desenvolvimento e produção sem ir parar no hospital;</h4>
</li>
<li>
<h4>Segurem os trolls, vamos falar sobre sistemas de arquivos, tablespaces e discos de novo&#8230;.</h4>
</li>
<li>
<h4>Como fazer poesia com SQL e parar de fazer caquinha com PL/você_não_precisa_usar_isto_aqui.</h4>
</li>
<li>
<h4>Técnicas (ok, se você gosta de buzzwords, pode chamar de &#8220;design patterns&#8221;) de otimização de processos e ajuste de SQL;</h4>
</li>
<li>
<h4>&#8220;Rodei o <a href="http://www.postgresql.org/docs/9.1/static/sql-explain.html">EXPLAIN</a>, e agora?&#8221;;</h4>
</li>
<li>
<h4>Magia negra com <a href="http://www.postgresql.org/docs/9.1/static/queries-table-expressions.html#QUERIES-WINDOW">Window Function</a>;</h4>
</li>
<li>
<h4><a href="http://www.postgresql.org/docs/9.1/static/queries-with.html">CTE</a>, recursividade e como não destruir a memória do seu servidor;</h4>
</li>
<li>
<h4><a href="http://www.postgresql.org/docs/9.1/static/charset.html">Localização, codificação de caracteres</a> e coisas que infelizmente você tem de aprender se não quiser sofrer por toda a eternamente com isso;</h4>
</li>
<li>
<h4>Segurança para preguiçosos (ou seja, para todo mundo);</h4>
</li>
<li>
<h4>Técnicas de monitoramento, administração que funcionam e fazem sentido para seres mortais;</h4>
</li>
<li>
<h4>Armadilhas no<a href="http://www.postgresql.org/docs/9.1/static/different-replication-solutions.html"> zoológico das replicações</a>;</h4>
</li>
<li>
<h4>Muito além das configurações do <a href="http://www.postgresql.org/docs/9.1/static/runtime-config.html">postgresql.conf</a>: personalizando bases, roles , tabelas, tablespaces e até sessões para um ajuste perfeito;</h4>
</li>
<li>
<h4>Eu sei, eu sei&#8230;. <a href="http://pt.wikipedia.org/wiki/ACID">ACID</a>, blá, blá, blá, <a href="http://en.wikipedia.org/wiki/Relational_model">Teoria Relacional</a>, etc e tal, mas o <a href="http://en.wikipedia.org/wiki/Christopher_J._Date">C. J. Date</a> diz que bi, bi, bi, bó, bó, bó&#8230;. mas eu quero muito ver &#8220;Técnicas de <a href="http://pt.wikipedia.org/wiki/NoSQL">NoSQL</a> integradas com PosgreSQL&#8221;;</h4>
</li>
<li>
<h4><a href="http://www.postgresql.org/docs/9.1/static/backup.html">Backup</a> e o &#8220;complexo de Chuck Norris&#8221;. (Quem respondeu a <a href="http://www.postgresql.org.br/node/7460">pesquisa sobre uso de PostgreSQL</a> sabe do que eu estou falando);</h4>
</li>
<li>
<h4>Técnicas de recuperação de desastres e como é chato ouvir &#8220;mas eu já faço assim há 5 anos e nunca deu nenhum problema&#8230;&#8221;;</h4>
</li>
<li>
<h4>Não entendeu? Vou falar de novo: RECOVER, RECOVER, RECOVER!</h4>
</li>
<li>
<h4>Quer dizer então que para ter um banco de dados é preciso ter um DBA na equipe ou aprender como fazer o trabalho de um?</h4>
</li>
</ul>
<p>OBS: Quem sabe este ano o indefectível Osvaldo Kussama não manda uma proposta?</p>
<p>OBS2: Se tiver alguma outra sugestão de palestra que você gostaria de ver no PGBR201, não deixe de deixar um comentário aqui! Vai que alguém gosta da ideia e você acaba tendo uma aula sobre aquele tema que vem lhe assombrando há tempos&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2011/08/14/pgbr2011-chamada-de-trabalhos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PGCasts</title>
		<link>http://www.midstorm.org/~telles/2011/05/20/pgcasts/</link>
		<comments>http://www.midstorm.org/~telles/2011/05/20/pgcasts/#comments</comments>
		<pubDate>Fri, 20 May 2011 12:18:12 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=737</guid>
		<description><![CDATA[&#160; O Sr. Dickson Guedes resurgiu das cinzas em grande estilo e com um projeto muito bacana. O pgcasts é um screencast, ou seja, áudio e vídeo com uma demonstração de como fazer alguma coisa no PostgreSQL. Ver a tela dele &#8230; <a href="http://www.midstorm.org/~telles/2011/05/20/pgcasts/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>O Sr. <a href="http://guedesoft.net/blog/" target="_blank">Dickson Guedes</a> resurgiu das cinzas em grande estilo e com um projeto muito bacana. O <a href="http://pgcasts.com" target="_blank">pgcasts</a> é um <a href="http://pt.wikipedia.org/wiki/Screencast" target="_blank">screencast</a>, ou seja, áudio e vídeo com uma demonstração de como fazer alguma coisa no PostgreSQL. Ver a tela dele fazendo enquanto vai comentando, é muito mais simples do que ler um artigo enorme num blog como o meu&#8230;. assuntos que eu levaria páginas para abordar ele mostra como fazer na prática com 20 a 30 minutos de screencast.</p>
<p>&nbsp;</p>
<p>Muito bacana, eu recomendo. Até hoje (02/05/11) são 3 episódios e ele vem mantendo a média de um novo screencast por semana:</p>
<ol>
<li><span style="font-size: 20px; font-weight: bold;"><a href="http://pgcasts.com/episodes/1-instalando-postgresql-9-0">Instalando PostgreSQL 9.0</a></span></li>
<li><span style="font-size: 20px; font-weight: bold;"><a href="http://pgcasts.com/episodes/2-trabalhando-com-datas-no-postgresql" target="_blank">Trabalhando com datas no PostgreSQL</a></span></li>
<li><span style="font-size: 20px; font-weight: bold;"><a href="http://pgcasts.com/episodes/3-alterando-colunas-de-tipos-conflitantes" target="_blank">Alterando colunas de tipos conflitantes</a></span></li>
</ol>
<p>Divirtam-se.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2011/05/20/pgcasts/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PGBR2011</title>
		<link>http://www.midstorm.org/~telles/2011/05/09/pgbr2011/</link>
		<comments>http://www.midstorm.org/~telles/2011/05/09/pgbr2011/#comments</comments>
		<pubDate>Mon, 09 May 2011 12:31:26 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[pgbr2011]]></category>
		<category><![CDATA[postgres]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=732</guid>
		<description><![CDATA[Para quem não sabe, o PGBR2011 (nome novo para o PGCon Brasil) está à pleno vapor e em sua 4ª edição estamos novamente dando um bom salto de qualidade. Vejamos algumas novidades: 5 Palestrantes internacionais Confirmados Álvaro Herrera (Chile) Bruce &#8230; <a href="http://www.midstorm.org/~telles/2011/05/09/pgbr2011/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://pgbr.postgresql.org.br"><img class="aligncenter" src="http://pgbr.postgresql.org.br/2011/imgs/divulgue_horizontal_pequeno.jpg" alt="PGBR 2011 - Conferência Brasileira PostgreSQL" width="432" height="60" /></a></p>
<p>Para quem não sabe, o <a href="http://pgbr.postgresql.org.br" target="_blank">PGBR2011</a> (nome novo para o PGCon Brasil) está à pleno vapor e em sua 4ª edição estamos novamente dando um bom salto de qualidade. Vejamos algumas novidades:</p>
<h3>5 Palestrantes internacionais Confirmados</h3>
<ul>
<li><a href="http://www.commandprompt.com/blogs/alvaro_herrera" target="_blank">Álvaro Herrera (Chile)</a></li>
<li><a href="http://momjian.us" target="_blank">Bruce Momjian (EUA)</a></li>
<li><a href="http://pgsnake.blogspot.com" target="_blank">Dave Page (Inglaterra)</a></li>
<li><a href="http://www.westnet.com/~gsmith" target="_blank">Greg Smith (EUA)</a></li>
<li><a href="http://www.westnet.com/~gsmith" target="_blank"></a>Koichi Suziki (Japão)</li>
</ul>
<p>Todos eles são desenvolvedores do PostgreSQL e tem grandes <a href="http://www.postgresql.org/community/contributors" target="_blank">contribuições para a comunidade</a>.</p>
<h3>O evento será realizado no conforto do <a href="http://www.centuryflat.com.br/" target="_blank">Hotel Century Paulista</a>, em São Paulo</h3>
<p>Os detalhes do local já estão acertados. A decisão de fazer o evento num hotel deverá ajudar bastante quem vem de longe. Você poderá se hospedar no mesmo local do evento. Assim as pessoas gastam menos com deslocamento e perdem menos tempo. Para quem for se hospedar, confira os <a href="http://pgbr.postgresql.org.br/2011/local.php" target="_blank">preços especiais</a> para quem for participar do evento. Recomendo fazer a sua reserva o quanto antes para evitar surpresas na última hora.</p>
<p>Para quem mora em São Paulo, também será uma grande vantagem, o local fica a apenas algumas quadras da estação Brigadeiro do metrô. Se você preferir vir de carro até o local, há um estacionamento com preço fechado para participantes do evento.</p>
<p>Serão 3 salas simultâneas que juntas comportam 470 pessoas, uma sala de apoio, um salão de exposições e um local para o famoso coffee break à tarde. Estamos esperando um público de 400 pessoas nos 2 dias do evento, que cairão numa 5ª e 6ª feira, diferente das edições anteriores. Notem que na 4ª, haverá um feriado.</p>
<h3>Participe</h3>
<p>Você pode ajudar:</p>
<ol>
<li>Venha ao evento. Sua presença é o mais importante para nós. As inscrições deverão abrir em agosto. Como sempre, quem se inscrever com antecedência, vai poder aproveitar um preço especial.</li>
<li>Mande uma proposta de palestra. A chamada de trabalhos será aberta em meados de junho ou julho, fique atento.</li>
<li>Divulgue o evento:
<ul>
<li> Se você tem um blog, um site, pode divulgar um <a href="http://pgbr.postgresql.org.br/2011/divulgacao.php" target="_blank">banner do evento</a> ou falar sobre ele.</li>
<li>Se você utiliza o Twitter, fale sobre o evento e utilize a hash tag #PGBR2011.</li>
<li>Se você participa de alguma lista de discussão por e-mail, informe as pessoas sobre o evento. Não esqueça das boas maneiras e coloque um <em>[off-topic]</em> no assunto.</li>
<li>Se você estuda numa faculdade, estaremos fazendo alguns cartazes sobre o evento que você poderá afixar no mural.</li>
</ul>
</li>
<li>Se você trabalha numa empresa de TI ou utiliza muito o PostgreSQL no seu trabalho, considere a possibilidade da sua empresa <a href="http://pgbr.postgresql.org.br/2011/patrocinio.php" target="_blank">patrocinar o evento</a>.</li>
<li>Se você gostaria de dar sugestões ou ajudar na organização do evento, entre na <a href="https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-dev" target="_blank">lista da comunidade</a>.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2011/05/09/pgbr2011/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>O guro Oracle Thomas Kyte mostra os argumentos para usar o PostgreSQL</title>
		<link>http://www.midstorm.org/~telles/2011/02/17/o-guro-oracle-thomas-kyte-mostra-os-argumentos-para-usar-o-postgresql/</link>
		<comments>http://www.midstorm.org/~telles/2011/02/17/o-guro-oracle-thomas-kyte-mostra-os-argumentos-para-usar-o-postgresql/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 19:39:46 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=722</guid>
		<description><![CDATA[Sim, é verdade! Estava lendo uma thread no blog do respeitável Thomas Kyte sobre comparações do Oracle com outros bancos de dados aqui.  Claro, o Thomas não cita o PostgreSQL em momento algum, ele cita apenas o Informix, Ingres, Sybase, &#8230; <a href="http://www.midstorm.org/~telles/2011/02/17/o-guro-oracle-thomas-kyte-mostra-os-argumentos-para-usar-o-postgresql/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Sim, é verdade! Estava lendo uma thread no blog do respeitável Thomas Kyte sobre comparações do Oracle com outros bancos de dados <a href="http://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:1886476148373#tom2778014300346061501">aqui</a>.  Claro, o Thomas não cita o PostgreSQL em momento algum, ele cita apenas o Informix, Ingres, Sybase, DB2 e o MS SQL Server.</p>
<p>Bom, vale a pena ler o artigo. Você verá que nos comentários o PostgreSQL começa a aparecer, e com boas avaliações. Mais interessante ainda é que o Thomas ignora ao máximo o PostgreSQL nos comentários. Claro, ele não é estúpido, não seria inteligente nem diplomático da parte dele. O máximo que ele chega a citar é que a Oracle tem o XE, que quem conhece sabe que é algo limitado e certamente foi lançado (a exemplo do que fez a MicroSoft e IBM) para retardar o avanço dos bancos de dados livres.</p>
<p>O post é de 2001 e os comentários perduram até 2010. De qualquer forma, fica claro, que os mesmos argumentos que ele utiliza para mostrar a superioridade do Oracle, serviriam para o PostgreSQL&#8230;. vale a pena ler.</p>
<h3><a href="http://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:1886476148373#tom2778014300346061501">Comparison between Oracle and Others</a></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2011/02/17/o-guro-oracle-thomas-kyte-mostra-os-argumentos-para-usar-o-postgresql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Brincando com funções de janelas (Window Functions)</title>
		<link>http://www.midstorm.org/~telles/2010/10/26/brincando-com-funcoes-de-janelas-window-functions/</link>
		<comments>http://www.midstorm.org/~telles/2010/10/26/brincando-com-funcoes-de-janelas-window-functions/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 14:58:17 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[window funcitions]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=682</guid>
		<description><![CDATA[&#60;pre lang=&#8221;sql&#8221;&#62;Tempos atrás me deparei com um problema que era criar uma função para gerar uma CURVA ABC. Eu não tinha a menor idéia do que ser tratava, mas resumindo, uma Curva ABC é uma separação entre faixas de valores, &#8230; <a href="http://www.midstorm.org/~telles/2010/10/26/brincando-com-funcoes-de-janelas-window-functions/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>&lt;pre lang=&#8221;sql&#8221;&gt;Tempos atrás me deparei com um problema que era criar uma função para gerar uma CURVA ABC. Eu não tinha a menor idéia do que ser tratava, mas resumindo, uma Curva ABC é uma separação entre faixas de valores, como os 20% mais ricos e o 20% mais pobres. Se quiser mais detalhes, veja a <a href="http://pt.wikipedia.org/wiki/Curva_ABC">definição do Wikipédia</a>. Apesar do conceito ser simples, fazer isso com SQL convencional não é. E quem me conhece, sabe que eu só utilizo PL no banco de dados, quando é absolutamente necessário. O motivo é simples, o PL não deixa muita margem para o otimizador do banco de dados encontrar a melhor forma de agrupar os dados. E eu sei que o otimizador é muito mais inteligente que eu.</p>
<p>Bom, resumindo a história, eu precisei lançar mão das novas funções de janela, incorporadas na versão 8.4 do PostgreSQL. Para exemplificar aqui, vou utilizar uma base de exemplo conhecida de todos, o <a href="http://pgfoundry.org/projects/dbsamples/">PAGILA</a>. Eu tentei o <a href="http://pgfoundry.org/projects/dbsamples/">DELLSTORE</a>, mas os dados não apareceram tão bem distribuídos para efeito de visualização.</p>
<p>Bom, depois de criar uma base e importar os dados do PAGILA, eu criei uma visão para facilitar a minha vida e simplificar a análise, deixando de lado detalhes desnecessários:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">OR</span> <span style="color: #993333; font-weight: bold;">REPLACE</span> <span style="color: #993333; font-weight: bold;">VIEW</span> sales_pgday <span style="color: #993333; font-weight: bold;">AS</span>
    <span style="color: #993333; font-weight: bold;">SELECT</span>
        f<span style="color: #66cc66;">.</span>title<span style="color: #66cc66;">,</span>
        c<span style="color: #66cc66;">.</span>name <span style="color: #993333; font-weight: bold;">AS</span> category<span style="color: #66cc66;">,</span>
        <span style="color: #993333; font-weight: bold;">SUM</span><span style="color: #66cc66;">&#40;</span>p<span style="color: #66cc66;">.</span>amount<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> total_sales
        <span style="color: #993333; font-weight: bold;">FROM</span>
            <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>payment p <span style="color: #993333; font-weight: bold;">JOIN</span> rental r <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>p<span style="color: #66cc66;">.</span>rental_id <span style="color: #66cc66;">=</span> r<span style="color: #66cc66;">.</span>rental_id<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                <span style="color: #993333; font-weight: bold;">JOIN</span> inventory i <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>r<span style="color: #66cc66;">.</span>inventory_id <span style="color: #66cc66;">=</span> i<span style="color: #66cc66;">.</span>inventory_id<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                <span style="color: #993333; font-weight: bold;">JOIN</span> film f <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">.</span>film_id <span style="color: #66cc66;">=</span> f<span style="color: #66cc66;">.</span>film_id<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                <span style="color: #993333; font-weight: bold;">JOIN</span> film_category fc <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>f<span style="color: #66cc66;">.</span>film_id <span style="color: #66cc66;">=</span> fc<span style="color: #66cc66;">.</span>film_id<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                <span style="color: #993333; font-weight: bold;">JOIN</span> category c <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>fc<span style="color: #66cc66;">.</span>category_id <span style="color: #66cc66;">=</span> c<span style="color: #66cc66;">.</span>category_id<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #993333; font-weight: bold;">GROUP</span> <span style="color: #993333; font-weight: bold;">BY</span> c<span style="color: #66cc66;">.</span>name<span style="color: #66cc66;">,</span> f<span style="color: #66cc66;">.</span>title
    ;</pre></div></div>

<p>Com um select você verá os dados mais ou menos assim:</p>
<pre>           title            |  category   | total_sales
-----------------------------+-------------+-------------
 AMADEUS HOLY                | Action      |       33.79
 AMERICAN CIRCUS             | Action      |      167.78
 ANTITRUST TOMATOES          | Action      |       37.90
 BAREFOOT MANCHURIAN         | Action      |       66.82
 BERETS AGENT                | Action      |       78.78
 BRIDE INTRIGUE              | Action      |       21.81
 BULL SHAWSHANK              | Action      |       21.84
 CADDYSHACK JEDI             | Action      |       51.84
 CAMPUS REMEMBER             | Action      |       90.81
 CASUALTIES ENCINO           | Action      |       72.91
 CELEBRITY HORN              | Action      |       32.76
 CLUELESS BUCKET             | Action      |      112.75
 CROW GREASE                 | Action      |       18.88
 DANCES NONE                 | Action      |       31.86
 DARKO DORADO                | Action      |       82.89
 DARN FORRESTER              | Action      |       93.82
 DEVIL DESIRE                | Action      |       83.85
 DRAGON SQUAD                | Action      |       27.89
 DREAM PICKUP                | Action      |       81.78
 DRIFTER COMMANDMENTS        | Action      |      141.76
...</pre>
<p>O primeiro passo para calcular a curva ABC sobre as vendas de cada filme, para cada categoria de filme (os filmes mais vendidos e os menos vendidos em cada categoria) é calcular o total de vendas. Uma vez que queremos os 20% mais vendidos e os 20% menos vendidos, precisamos do total (100%) para calcular a porcentagem:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> category<span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">SUM</span><span style="color: #66cc66;">&#40;</span>total_sales<span style="color: #66cc66;">&#41;</span>
    <span style="color: #993333; font-weight: bold;">FROM</span> sales_pgday
    <span style="color: #993333; font-weight: bold;">GROUP</span> <span style="color: #993333; font-weight: bold;">BY</span> category;</pre></div></div>

<p>E assim teremos:</p>
<pre>  category   |   sum
-------------+---------
 Action      | 4375.85
 Animation   | 4656.30
 Children    | 3655.55
 Classics    | 3639.59
 Comedy      | 4383.58
 Documentary | 4217.52
 Drama       | 4587.39
 Family      | 4226.07
 Foreign     | 4270.67
 Games       | 4281.33
 Horror      | 3722.54
 Music       | 3417.72
 New         | 4361.57
 Sci-Fi      | 4756.98
 Sports      | 5314.21
 Travel      | 3549.64
(16 linhas)</pre>
<p>Agora vejamos uma função de janela em ação aqui. Ainda não é a que vamos utilizar, é apenas um exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span>
    title<span style="color: #66cc66;">,</span>
    category<span style="color: #66cc66;">,</span>
    total_sales<span style="color: #66cc66;">,</span>
    rank<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">OVER</span> <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> total_sales <span style="color: #993333; font-weight: bold;">DESC</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> rank
<span style="color: #993333; font-weight: bold;">FROM</span> sales_pgday;</pre></div></div>

<p>Agora vejamos o resultado:</p>
<pre>            title            |  category   | total_sales | rank
-----------------------------+-------------+-------------+------
 TELEGRAPH VOYAGE            | Music       |      231.73 |    1
 WIFE TURN                   | Documentary |      223.69 |    2
 ZORRO ARK                   | Comedy      |      214.69 |    3
 GOODFELLAS SALUTE           | Sci-Fi      |      209.69 |    4
 SATURDAY LAMBS              | Sports      |      204.72 |    5
 TITANS JERK                 | Sci-Fi      |      201.71 |    6
 TORQUE BOUND                | Drama       |      198.72 |    7
 HARRY IDAHO                 | Drama       |      195.70 |    8
 INNOCENT USUAL              | Foreign     |      191.74 |    9
 HUSTLER PARTY               | Comedy      |      190.78 |   10
 PELICAN COMFORTS            | Documentary |      188.74 |   11
 CAT CONEHEADS               | Comedy      |      181.70 |   12
 ENEMY ODDS                  | Music       |      180.71 |   13
 BUCKET BROTHERHOOD          | Travel      |      180.66 |   14
 RANGE MOONWALKER            | Family      |      179.73 |   15
 MASSACRE USUAL              | Games       |      179.70 |   16
 VIDEOTAPE ARSENIC           | Games       |      178.71 |   17
 DOGMA FAMILY                | Animation   |      178.70 |   18
 APACHE DIVINE               | Family      |      178.69 |   19
 VELVET TERMINATOR           | Comedy      |      177.74 |   20
...</pre>
<p>Agora vamos olhar com calma os dados (tirei aqui apenas as 20 primeiras linhas) e a parte do SELECT que diz:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;">rank<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">OVER</span> <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> total_sales <span style="color: #993333; font-weight: bold;">DESC</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> rank</pre></div></div>

<p>Veja, o campo está utilizando a função RANK, sobre uma janela de dados ordenados pelo total de vendas. O campo RANK simplesmente diz qual é mais significativo, sobre a amostra (OVER) determinada. Agora queremos saber quais são os mais vendidos por categoria. O curioso é que ao invés de utilizar o GROUP BY que afetaria todas as colunas, vamos utilizar o PARTITION BY dentro da definição da janela, assim, isto afetará apenas a nossa última coluna:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span>
    title<span style="color: #66cc66;">,</span>
    category<span style="color: #66cc66;">,</span>
    total_sales<span style="color: #66cc66;">,</span>
    rank<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">OVER</span> <span style="color: #66cc66;">&#40;</span>PARTITION <span style="color: #993333; font-weight: bold;">BY</span> category <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> total_sales <span style="color: #993333; font-weight: bold;">DESC</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> rank
<span style="color: #993333; font-weight: bold;">FROM</span> sales_pgday;</pre></div></div>

<p>Assim teremos:</p>
<pre>            title            |  category   | total_sales | rank
-----------------------------+-------------+-------------+------
 FOOL MOCKINGBIRD            | Action      |      175.77 |    1
 AMERICAN CIRCUS             | Action      |      167.78 |    2
 STAGECOACH ARMAGEDDON       | Action      |      154.74 |    3
 EASY GLADIATOR              | Action      |      150.77 |    4
 MINDS TRUMAN                | Action      |      149.80 |    5
 KISSING DOLLS               | Action      |      147.80 |    6
 TRIP NEWTON                 | Action      |      145.72 |    7
 DRIFTER COMMANDMENTS        | Action      |      141.76 |    8
 SUSPECTS QUILLS             | Action      |      133.70 |    9
 WATERFRONT DELIVERANCE      | Action      |      121.83 |   10
...
 DRAGON SQUAD                | Action      |       27.89 |   56
 BULL SHAWSHANK              | Action      |       21.84 |   57
 BRIDE INTRIGUE              | Action      |       21.81 |   58
 CROW GREASE                 | Action      |       18.88 |   59
 LAWRENCE LOVE               | Action      |       15.87 |   60
 MONTEZUMA COMMAND           | Action      |       11.91 |   61
 DOGMA FAMILY                | Animation   |      178.70 |    1
 SUNRISE LEAGUE              | Animation   |      170.76 |    2
 TITANIC BOONDOCK            | Animation   |      154.77 |    3
 FORRESTER COMANCHEROS       | Animation   |      146.73 |    4
 FALCON VOLUME               | Animation   |      127.77 |    5
...</pre>
<p>Notem que agora o rank é realizado para cada categoria, o rank é ordenado pelas vendas. Vale a pena executar o SQL no seu computador para verificar os dados com mais calma.</p>
<p>Bom, mas eu quero saber dos 20% mais vendidos. O problema aqui é que você precisaria ir somando o total de vendas de cada produto até chegar em 20% do total. Ocorre que você pode utilizar as funções de agregação como SUM, COUNT e outras junto com a sua janela. Vejamos como isso funciona:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span>
    title<span style="color: #66cc66;">,</span>
    category<span style="color: #66cc66;">,</span>
    total_sales<span style="color: #66cc66;">,</span>
    rank<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">OVER</span> <span style="color: #66cc66;">&#40;</span>PARTITION <span style="color: #993333; font-weight: bold;">BY</span> category <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> total_sales <span style="color: #993333; font-weight: bold;">DESC</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> rank<span style="color: #66cc66;">,</span>
    <span style="color: #993333; font-weight: bold;">SUM</span><span style="color: #66cc66;">&#40;</span>total_sales<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">OVER</span> <span style="color: #66cc66;">&#40;</span>PARTITION <span style="color: #993333; font-weight: bold;">BY</span> category <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> total_sales <span style="color: #993333; font-weight: bold;">DESC</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #993333; font-weight: bold;">SUM</span>
<span style="color: #993333; font-weight: bold;">FROM</span> sales_pgday;</pre></div></div>

<p>E teremos os seguintes dados:</p>
<pre>            title            |  category   | total_sales | rank |   sum
-----------------------------+-------------+-------------+------+---------
 FOOL MOCKINGBIRD            | Action      |      175.77 |    1 |  175.77
 AMERICAN CIRCUS             | Action      |      167.78 |    2 |  343.55
 STAGECOACH ARMAGEDDON       | Action      |      154.74 |    3 |  498.29
 EASY GLADIATOR              | Action      |      150.77 |    4 |  649.06
 MINDS TRUMAN                | Action      |      149.80 |    5 |  798.86
 KISSING DOLLS               | Action      |      147.80 |    6 |  946.66
 TRIP NEWTON                 | Action      |      145.72 |    7 | 1092.38
 DRIFTER COMMANDMENTS        | Action      |      141.76 |    8 | 1234.14
 SUSPECTS QUILLS             | Action      |      133.70 |    9 | 1367.84
 WATERFRONT DELIVERANCE      | Action      |      121.83 |   10 | 1489.67
 TRUMAN CRAZY                | Action      |      121.77 |   11 | 1611.44
 CLUELESS BUCKET             | Action      |      112.75 |   12 | 1724.19
 SOUTH WAIT                  | Action      |      107.78 |   13 | 1831.97
 DARN FORRESTER              | Action      |       93.82 |   14 | 1925.79
 CAMPUS REMEMBER             | Action      |       90.81 |   15 | 2016.60
 FORREST SONS                | Action      |       87.82 |   16 | 2104.42
 DEVIL DESIRE                | Action      |       83.85 |   17 | 2188.27
 DARKO DORADO                | Action      |       82.89 |   18 | 2271.16
 DREAM PICKUP                | Action      |       81.78 |   19 | 2352.94
 WEREWOLF LOLA               | Action      |       78.86 |   20 | 2431.80
...
 REAR TRADING                | Action      |       32.83 |   52 | 4163.15
 CELEBRITY HORN              | Action      |       32.76 |   53 | 4195.91
 DANCES NONE                 | Action      |       31.86 |   54 | 4227.77
 SIDE ARK                    | Action      |       29.88 |   55 | 4257.65
 DRAGON SQUAD                | Action      |       27.89 |   56 | 4285.54
 BULL SHAWSHANK              | Action      |       21.84 |   57 | 4307.38
 BRIDE INTRIGUE              | Action      |       21.81 |   58 | 4329.19
 CROW GREASE                 | Action      |       18.88 |   59 | 4348.07
 LAWRENCE LOVE               | Action      |       15.87 |   60 | 4363.94
 MONTEZUMA COMMAND           | Action      |       11.91 |   61 | 4375.85
 DOGMA FAMILY                | Animation   |      178.70 |    1 |  178.70
 SUNRISE LEAGUE              | Animation   |      170.76 |    2 |  349.46
 TITANIC BOONDOCK            | Animation   |      154.77 |    3 |  504.23
 FORRESTER COMANCHEROS       | Animation   |      146.73 |    4 |  650.96
 FALCON VOLUME               | Animation   |      127.77 |    5 |  778.73
 MISSION ZOOLANDER           | Animation   |      126.82 |    6 |  905.55
 DOORS PRESIDENT             | Animation   |      123.81 |    7 | 1029.36
 SLEEPLESS MONSOON           | Animation   |      121.80 |    8 | 1151.16
 THIEF PELICAN               | Animation   |      117.81 |    9 | 1268.97
 HORN WORKING                | Animation   |      112.76 |   10 | 1381.73
...</pre>
<p>Note que o valor da soma (SUM) vai acumulando registro a registro até que uma nova categoria apareça. Isto é uma coisa muito difícil de se fazer com SQL puro, você não consegue fazer cálculos com base nos registros anteriores.</p>
<p>Agora nós podemos juntar esta última consulta com a primeira para calcular a porcentagem de vendas sobre o total da categoria. Vamos colocar cada uma das consultas como uma entrada em FROM:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span>
    sales<span style="color: #66cc66;">.</span>category<span style="color: #66cc66;">,</span>
    title<span style="color: #66cc66;">,</span>
    somatorio<span style="color: #66cc66;">,</span>
    total<span style="color: #66cc66;">,</span>
    <span style="color: #66cc66;">&#40;</span>somatorio <span style="color: #66cc66;">/</span> total<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">100</span> <span style="color: #993333; font-weight: bold;">AS</span> porcentagem
    <span style="color: #993333; font-weight: bold;">FROM</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span>
            category<span style="color: #66cc66;">,</span>
            <span style="color: #993333; font-weight: bold;">SUM</span><span style="color: #66cc66;">&#40;</span>total_sales<span style="color: #66cc66;">&#41;</span> total
          <span style="color: #993333; font-weight: bold;">FROM</span> sales_pgday
          <span style="color: #993333; font-weight: bold;">GROUP</span> <span style="color: #993333; font-weight: bold;">BY</span> category<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> tot<span style="color: #66cc66;">,</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span>
            title<span style="color: #66cc66;">,</span>
            category<span style="color: #66cc66;">,</span>
            <span style="color: #993333; font-weight: bold;">SUM</span><span style="color: #66cc66;">&#40;</span>total_sales<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">OVER</span> <span style="color: #66cc66;">&#40;</span>PARTITION <span style="color: #993333; font-weight: bold;">BY</span> category <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> total_sales <span style="color: #993333; font-weight: bold;">DESC</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> somatorio
          <span style="color: #993333; font-weight: bold;">FROM</span> sales_pgday<span style="color: #66cc66;">&#41;</span> sales
    <span style="color: #993333; font-weight: bold;">WHERE</span> tot<span style="color: #66cc66;">.</span>category <span style="color: #66cc66;">=</span> sales<span style="color: #66cc66;">.</span>category;</pre></div></div>

<p>O resultado será:</p>
<pre>  category   |            title            | somatorio |  total  |       porcentagem
-------------+-----------------------------+-----------+---------+--------------------------
 Action      | FOOL MOCKINGBIRD            |    175.77 | 4375.85 |   4.01681958933692882500
 Action      | AMERICAN CIRCUS             |    343.55 | 4375.85 |   7.85104608247540477900
 Action      | STAGECOACH ARMAGEDDON       |    498.29 | 4375.85 |  11.38727332975307654500
 Action      | EASY GLADIATOR              |    649.06 | 4375.85 |  14.83277534650410777300
 Action      | MINDS TRUMAN                |    798.86 | 4375.85 |  18.25611024143880617500
 Action      | KISSING DOLLS               |    946.66 | 4375.85 |  21.63373973056663276800
 Action      | TRIP NEWTON                 |   1092.38 | 4375.85 |  24.96383559765531268200
 Action      | DRIFTER COMMANDMENTS        |   1234.14 | 4375.85 |  28.20343476124638641600
 Action      | SUSPECTS QUILLS             |   1367.84 | 4375.85 |  31.25884113943576676500
 Action      | WATERFRONT DELIVERANCE      |   1489.67 | 4375.85 |  34.04298593416136293500
 Action      | TRUMAN CRAZY                |   1611.44 | 4375.85 |  36.82575956671275295100
 Action      | CLUELESS BUCKET             |   1724.19 | 4375.85 |  39.40240181907515111300
 Action      | SOUTH WAIT                  |   1831.97 | 4375.85 |  41.86546613800747283400
 Action      | DARN FORRESTER              |   1925.79 | 4375.85 |  44.00950672440782933600
 Action      | CAMPUS REMEMBER             |   2016.60 | 4375.85 |  46.08476067506884376700
...
 Action      | REAR TRADING                |   4163.15 | 4375.85 |  95.13923009243918324400
 Action      | CELEBRITY HORN              |   4195.91 | 4375.85 |  95.88788463955574345600
 Action      | DANCES NONE                 |   4227.77 | 4375.85 |  96.61597175405921135300
 Action      | SIDE ARK                    |   4257.65 | 4375.85 |  97.29881051681387616100
 Action      | DRAGON SQUAD                |   4285.54 | 4375.85 |  97.93617240079070352000
 Action      | BULL SHAWSHANK              |   4307.38 | 4375.85 |  98.43527543220174366100
 Action      | BRIDE INTRIGUE              |   4329.19 | 4375.85 |  98.93369288252568072500
 Action      | CROW GREASE                 |   4348.07 | 4375.85 |  99.36515191334255059000
 Action      | LAWRENCE LOVE               |   4363.94 | 4375.85 |  99.72782430842007838500
 Action      | MONTEZUMA COMMAND           |   4375.85 | 4375.85 | 100.00000000000000000000
 Animation   | DOGMA FAMILY                |    178.70 | 4656.30 |   3.83781113759852243200
 Animation   | SUNRISE LEAGUE              |    349.46 | 4656.30 |   7.50510061636922019600
 Animation   | TITANIC BOONDOCK            |    504.23 | 4656.30 |  10.82898438674484032400
 Animation   | FORRESTER COMANCHEROS       |    650.96 | 4656.30 |  13.98019887034770096400
 Animation   | FALCON VOLUME               |    778.73 | 4656.30 |  16.72422309559091982900
 Animation   | MISSION ZOOLANDER           |    905.55 | 4656.30 |  19.44784485535725790900
 Animation   | DOORS PRESIDENT             |   1029.36 | 4656.30 |  22.10682301398105792200
 Animation   | SLEEPLESS MONSOON           |   1151.16 | 4656.30 |  24.72263385091166806300
...</pre>
<p>O resultado é a porcentagem do total de vendas sendo acumulado até 100% e depois começando novamente para outra categoria. Com isso fica fácil atribuir A para os 20% mais significativos, B para os próximos 60% e C para os 20% menos significativos. Aqui, irei utilizar uma função CASE, que embora ocupe um bom espaço no nosso SQL é algo bastante trivial:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span>
    sales<span style="color: #66cc66;">.</span>category<span style="color: #66cc66;">,</span>
    title<span style="color: #66cc66;">,</span>
    TRUNC<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>somatorio <span style="color: #66cc66;">/</span> total<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> porcentagem<span style="color: #66cc66;">,</span>
    <span style="color: #993333; font-weight: bold;">CASE</span>
        <span style="color: #993333; font-weight: bold;">WHEN</span> <span style="color: #66cc66;">&#40;</span>somatorio <span style="color: #66cc66;">/</span> total<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&lt;=</span> <span style="color: #cc66cc;">0.2</span> <span style="color: #993333; font-weight: bold;">THEN</span> <span style="color: #ff0000;">'A'</span>
        <span style="color: #993333; font-weight: bold;">WHEN</span> <span style="color: #66cc66;">&#40;</span>somatorio <span style="color: #66cc66;">/</span> total<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #cc66cc;">0.2</span>  <span style="color: #993333; font-weight: bold;">AND</span>  <span style="color: #66cc66;">&#40;</span>somatorio <span style="color: #66cc66;">/</span> total<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&lt;=</span> <span style="color: #cc66cc;">0.8</span> <span style="color: #993333; font-weight: bold;">THEN</span> <span style="color: #ff0000;">'B'</span>
        <span style="color: #993333; font-weight: bold;">ELSE</span> <span style="color: #ff0000;">'C'</span> <span style="color: #993333; font-weight: bold;">END</span> <span style="color: #993333; font-weight: bold;">AS</span> curva_abc
    <span style="color: #993333; font-weight: bold;">FROM</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span>
            category<span style="color: #66cc66;">,</span>
            <span style="color: #993333; font-weight: bold;">SUM</span><span style="color: #66cc66;">&#40;</span>total_sales<span style="color: #66cc66;">&#41;</span> total
          <span style="color: #993333; font-weight: bold;">FROM</span> sales_pgday
          <span style="color: #993333; font-weight: bold;">GROUP</span> <span style="color: #993333; font-weight: bold;">BY</span> category<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> tot<span style="color: #66cc66;">,</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span>
            title<span style="color: #66cc66;">,</span>
            category<span style="color: #66cc66;">,</span>
            <span style="color: #993333; font-weight: bold;">SUM</span><span style="color: #66cc66;">&#40;</span>total_sales<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">OVER</span> <span style="color: #66cc66;">&#40;</span>PARTITION <span style="color: #993333; font-weight: bold;">BY</span> category <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> total_sales <span style="color: #993333; font-weight: bold;">DESC</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> somatorio
          <span style="color: #993333; font-weight: bold;">FROM</span> sales_pgday<span style="color: #66cc66;">&#41;</span> sales
    <span style="color: #993333; font-weight: bold;">WHERE</span> tot<span style="color: #66cc66;">.</span>category <span style="color: #66cc66;">=</span> sales<span style="color: #66cc66;">.</span>category;</pre></div></div>

<p>E finalmente temos a nossa curva ABC:</p>
<pre>  category   |            title            | porcentagem | curva_abc
-------------+-----------------------------+-------------+-----------
 Action      | FOOL MOCKINGBIRD            |           4 | A
 Action      | AMERICAN CIRCUS             |           7 | A
 Action      | STAGECOACH ARMAGEDDON       |          11 | A
 Action      | EASY GLADIATOR              |          14 | A
 Action      | MINDS TRUMAN                |          18 | A
 Action      | KISSING DOLLS               |          21 | B
 Action      | TRIP NEWTON                 |          24 | B
 Action      | DRIFTER COMMANDMENTS        |          28 | B
 Action      | SUSPECTS QUILLS             |          31 | B
 Action      | WATERFRONT DELIVERANCE      |          34 | B
 Action      | TRUMAN CRAZY                |          36 | B
...
 Action      | EXCITEMENT EVE              |          69 | B
 Action      | BAREFOOT MANCHURIAN         |          70 | B
 Action      | HANDICAP BOONDOCK           |          72 | B
 Action      | PARK CITIZEN                |          73 | B
 Action      | UPRISING UPTOWN             |          74 | B
 Action      | MOCKINGBIRD HOLLYWOOD       |          76 | B
 Action      | PATRIOT ROMAN               |          77 | B
 Action      | GRAIL FRANKENSTEIN          |          78 | B
 Action      | SHRUNK DIVINE               |          79 | B
 Action      | CADDYSHACK JEDI             |          81 | C
 Action      | GOSFORD DONNIE              |          82 | C
 Action      | ENTRAPMENT SATISFACTION     |          83 | C
 Action      | SPEAKEASY DATE              |          84 | C
 Action      | MIDNIGHT WESTWARD           |          85 | C
 Action      | FANTASY TROOPERS            |          86 | C
 Action      | WOMEN DORADO                |          87 | C
...
 Action      | DRAGON SQUAD                |          97 | C
 Action      | BULL SHAWSHANK              |          98 | C
 Action      | BRIDE INTRIGUE              |          98 | C
 Action      | CROW GREASE                 |          99 | C
 Action      | LAWRENCE LOVE               |          99 | C
 Action      | MONTEZUMA COMMAND           |         100 | C
 Animation   | DOGMA FAMILY                |           3 | A
 Animation   | SUNRISE LEAGUE              |           7 | A
 Animation   | TITANIC BOONDOCK            |          10 | A
 Animation   | FORRESTER COMANCHEROS       |          13 | A
 Animation   | FALCON VOLUME               |          16 | A
 Animation   | MISSION ZOOLANDER           |          19 | A
 Animation   | DOORS PRESIDENT             |          22 | B
 Animation   | SLEEPLESS MONSOON           |          24 | B
 Animation   | THIEF PELICAN               |          27 | B
 Animation   | HORN WORKING                |          29 | B
 Animation   | GANGS PRIDE                 |          32 | B
...</pre>
<p>É claro que existem N coisas que você pode fazer com funções de janela. A documentação possui <a href="http://www.postgresql.org/docs/current/static/queries-table-expressions.html#QUERIES-WINDOW">algumas explicações</a> sobre este recurso e também uma <a href="http://www.postgresql.org/docs/current/static/functions-window.html">lista com várias funções</a> que você pode testar com a sua base, aproveitando como ponto de partida os exemplos mostrados aqui.</p>
<h3>Boa diversão!</h3>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2010/10/26/brincando-com-funcoes-de-janelas-window-functions/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Sobre o PGCon Brasil, ou melhor PGBR</title>
		<link>http://www.midstorm.org/~telles/2010/10/23/sobre-o-pgcon-brasil-ou-melhor-pgbr/</link>
		<comments>http://www.midstorm.org/~telles/2010/10/23/sobre-o-pgcon-brasil-ou-melhor-pgbr/#comments</comments>
		<pubDate>Sat, 23 Oct 2010 11:38:50 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=680</guid>
		<description><![CDATA[A notícia agora é oficial, o PGBR 2010 foi cancelado. Isso exige um pouco de reflexão. E como faz tempo que eu não faço isso por aqui, lá vai&#8230; Bom, quem acompanha o blog aqui está careca de saber que &#8230; <a href="http://www.midstorm.org/~telles/2010/10/23/sobre-o-pgcon-brasil-ou-melhor-pgbr/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A notícia agora é oficial, o <a href="http://www.postgresql.org.br/node/118">PGBR 2010 foi cancelado.</a></p>
<p>Isso exige um pouco de reflexão. E como faz tempo que eu não faço isso por aqui, lá vai&#8230;</p>
<p>Bom, quem acompanha o blog aqui está careca de saber que em 2009 eu fui uma das pessoas que colaborou na organização da &#8220;<a href="http://pgbr.postgresql.org.br/2009/index.php">III Conferência Brasileira de PostgreSQL</a>&#8220;, também conhecida como PGCon Brasil 2009. Bom a organização de um evento deste porte não é nem de perto algo como a organização de um FISL. Mas não é nada simples. Quando você cobra R$ 100,00 pora alguém entrar num evento, tem que fazer este investimento voltar para a pessoa. É um compromisso que você assume. Não pode pisar na bola.</p>
<p>Para quem não sabe, existem 3 tipos de eventos que se encaixam aqui no Brasil:</p>
<ul>
<li>O PG Metting, que seria algo como um Happy Hour com uma palestra e um convite para tomar uma cerveja depois. Em São Francisco, CA, o povo do PostgreSQL se encontra toda  na 3ª quinta-feira de cada mês. É algo que São Paulo, Brasília, Porto Alegre, Fortaleza, teriam todas as condições de fazer. Basta achar um local e criar a tradição. Tenho muita vontade de criar algo deste tipo aqui em São Paulo, mas não pode ser no dia do meu rodízio, hehehe.</li>
<li>O PGDay, que é um dia de palestras em um evento em geral direcionado para novatos. Assim como o PG Metting, pode ser organizado com custo zero, sem cobrar ingresso e sem patrocínio. Se tiver patrocínio, ótimo, mas não é preciso. Já foram vários PGDays com muito sucesso até agora. No ano passado tivemos: Brasília, São Paulo-SP, Porto Velho-RO, Ji-Paraná-RO, Porto Alegre-RS e ainda Florianópolis-SC. Este ano foram Ilheus-BA, Manaus-AM e São Paulo-SP, mas ainda deverá acontecer um no Rio de Janeiro-RJ. Vejam que não é pouca coisa. A simplicidade na organização e o aproveitamento de palestrantes locais é a chave do sucesso. E é a porta de entrada para novos colaboradores na comunidade.</li>
<li>O PGBR, antes era chamado de PGCon Brasil, mas atendendo ao pedido do Dan Languile, trocamos o nome. Questões internas, não vale a pena discutir e não é nenhum problema para nós. É o grande evento da comunidade nacional e tem tudo para ser referência em toda a América do Sul e é também um dos maiores eventos de usuários de PostgreSQL do mundo. Ele não é voltado para novatos, é voltado para quem já trabalha ou esta avaliando seriamente a possibilidade de trabalhar com o PostgreSQL. Aqui o nível das palestras vai de intermediário para avançado, passando por uma sala reservada aos Hackers onde o nível é para quem quer fazer coisas realmente divertidas.</li>
</ul>
<p><em>&lt;mimimi mode ON&gt;<br />
No ano passado a organização do PGCon Brasil 2009 tomou muito do meu tempo assim como o tempo de muitos outros como o Euler Taveira, Diogo Biazus, Leonardo Cezar, Fernando Ike, Marcelo Costa, a equipe da 4Linux e muitos outros mais. Mas houve algo curioso em 2009, que não houve nas outras 2 edições do evento em 2007 e 2008: pouca repercussão. Antes de depois do evento, vi pouca divulgação, comentários, posts em blogs, fotos, etc. E o mais estranho é que o evento deve defeitos mas não se pode dizer que foi pior que os anteriores, então o que aconteceu? Eu não sei exatamente o que aconteceu, só posso especular aqui. Uma pista é o que houve com muitos organizadores este ano: eu, Euler, Fike e Diogo, nos afastamos um pouco da comunidade. E isto teve um peso forte. Mas nós temos trabalhado juntos há alguns anos, o que houve? Bom, quando começamos, o PostgreSQL era quase um hobby para alguns de nós, hoje começa a ser meio de vida. Isso acontece em várias comunidades, eu vi isso claramente aqui no PSL-ABCD. Veja que por outro lado, este anos foram 3 palestrantes brasileiros no PGCon 2010, lá no Canadá! O nível tem crescido, e o nosso tempo disponível está indo para o ralo. De toda forma, depois de ralar muito, ver uma repercussão baixa após o PGCon 2009 também me desanimou um pouco.<br />
&lt;mimimi mode off&gt;</em></p>
<h3>O que aprendemos no passado</h3>
<ul>
<li>A burocracia é nosso inimigo número 1. Projeto de captação, contratos de patrocínio, notas fiscais, as inscrições, notas de empenho, prestação de contas, etc, etc, etc. Conseguir tirar esta parte burocrática da frente é uma meta que pode mudar tudo. A burocracia é o nosso maior inimigo. Ele nos leva ao próximo ponto:</li>
<li>As inscrições não podem ser realizadas pela comunidade. Receber dinheiro dá muito trabalho e fazer isso do jeito certo dá um absurdo de trabalho. Se tivéssemos patrocinadores em abundância, seria muito, mas muito mais fácil não cobrar nada. Não se trata apenas de ter um bom sistema para fazer as inscrições (coisa que o Euler fez do zero), não se trata apenas de ter banco, nota, recibo, documentação, etc. Se trata de ter alguém que atenda a meleca do telefone o tempo todo e resolva as dúvidas, encaminhe os processos bizarros de alguns órgãos públicos e suas notas de empenho from hell.</li>
<li>Patrocínio em troca de serviços é um bom negócio. Ao invés de receber dinheiro, receber o serviço. Foi assim com os brindes (canecas, pins, chaveiros, etc), com o credenciamento e com o Coffee Break. Tira uma boa parte da carga de burocracia e preocupação das nossas costas.</li>
<li>Começar a organização com pelo menos um ano antes e adiantar ao máximo as coisas no começo, garante que o evento saia, pois:
<ul>
<li>Reservar auditório com menos de 6 meses de antecedência é quase impossível, com 12 meses também não é tão fácil assim;</li>
<li>Ter o plano de captação pronto, com local e data definidos com mais de 6 meses de antecedência torna possível conseguir patrocínio. Com isso na mão, muitas portas vão bater na sua cara, mas outras vão se abrir. Sem isso, só na base da amizade mesmo, nem pense em órgãos públicos;</li>
<li>Os palestrantes internacionais precisam se agendar com muita antecedência e comprar passagens adiantado sai bem mais barato;</li>
<li>Com local, data e plano de captação prontos com um ano de antecedência, você tem tempo de se dedicar aos zilhões de detalhes que vão surgir nos 6 meses que antecedem o evento;</li>
<li>As inscrições tem de abrir cedo, para você começar a ter dinheiro em caixa cedo.</li>
</ul>
</li>
<li>O valor das incrições tem de cobrir pelo menos os dois maiores custos do evento: a locação dos auditórios e o coffee-break.</li>
<li>Receber dinheiro de patrocinadores estrangeiros é um inferno. Então peça a eles que ajudem no pagamento de viagens de palestrantes internacionais;</li>
</ul>
<h3>Que venha o PGBR 2011!</h3>
<p>Bom, e porquê o PGBR 2010 não deu certo? De certo não vale a pena entrar nesta questão. Pessoas, trabalharam muito para tentar organizar o evento mas isso não foi sificiente. A única coisa realmente óbivia é que a organização começou muito tarde. Mas de fato houveram pessoas que trabalharam bastante e imagino o quanto elas estejam frustradas agora. Muito mais do que aqueles que já aguardavam com expectativa o evento deste ano.</p>
<p>Agora é hora de pensar em 2011 e nos PGMettings e PGDays que podemos fazer em breve. Não temos tempo para ficar se remoendo mais, já estamos em cima da hora para começar o PGBR 2011. O mercado de PostgreSQL está crescendo, com o 9.0 está aparecendo um novo Standby em cada esquina. Vamos que vamos gente, que atrás vem muita gente!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2010/10/23/sobre-o-pgcon-brasil-ou-melhor-pgbr/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Projeto PGXN</title>
		<link>http://www.midstorm.org/~telles/2010/08/13/projeto-pgxn/</link>
		<comments>http://www.midstorm.org/~telles/2010/08/13/projeto-pgxn/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 22:29:57 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=665</guid>
		<description><![CDATA[Todo usuário do PostgreSQL deveria conhecer o PgFoundry, lar de inúmeros projetos e extensões que tornam o nosso banco de dados ainda mais poderoso. Muitos programadores já devem ter ouvido falar do CPAN, um repositório com mais de 20 mil &#8230; <a href="http://www.midstorm.org/~telles/2010/08/13/projeto-pgxn/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Todo usuário do PostgreSQL deveria conhecer o <a href="http://pgfoundry.org/">PgFoundry</a>, lar de inúmeros projetos e extensões que tornam o nosso banco de dados ainda mais poderoso. Muitos programadores já devem ter ouvido falar do <a href="http://www.cpan.org/">CPAN</a>, um repositório com mais de 20 mil  módulos para o <a href="http://www.perl.org/">PERL</a>. Pois bem, o pessoal da PGExperts teve a ideia de criar um repositório no mesmo estilo para o Postgres.</p>
<p>Esta com certeza é uma funcionalidade muito interessante para a comunidade como um todo, além de facilitar a vida de muita gente. Mas é aí que VOCÊ entra. Eles montaram um site e estão pedindo a doação para financiar o desenvolvimento desta ferramenta.</p>
<p>A doação pode ser algo vultoso como USD5000 ou algo simples como 25 dólares. Então você, que sempre diz que gostaria de ajudar a comunidade, mas não tem tempo ou diz que não conhece tão bem assim programação e coisa e tal&#8230; chegou a sua vez de retribuir um pouco e fazer a sua doação.</p>
<p>Um dia nós brasileiros precisamos perder aquela fama de sanguessugas do Software Livre. Eu já fiz, <a href="http://pgxn.org/contributors.html">minha doação</a>, agora é a sua vez. Conheça o projeto e faça a sua parte:</p>
<h3><a href="http://pgxn.org/">PostgreSQL Extension network</a></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2010/08/13/projeto-pgxn/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PGDay Brasília em 31/05</title>
		<link>http://www.midstorm.org/~telles/2010/05/11/pgday-brasilia-em-3105/</link>
		<comments>http://www.midstorm.org/~telles/2010/05/11/pgday-brasilia-em-3105/#comments</comments>
		<pubDate>Tue, 11 May 2010 15:11:36 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=627</guid>
		<description><![CDATA[Atualização Se inscreva no site do evento, vagas limitadas. Sim,  este ano tem Copa do mundo, eleição, e claro PGCon e PGDay. O blog podia estar parado, mas a comunidade brasileira de PostgreSQL continua a todo o vapor. Já tivemos &#8230; <a href="http://www.midstorm.org/~telles/2010/05/11/pgday-brasilia-em-3105/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Atualização</h2>
<h3>Se inscreva no <a href="http://www.postgresql.org.br/eventos/pgday/df/2010">site do evento</a>, vagas limitadas.</h3>
<p>Sim,  este ano tem Copa do mundo, eleição, e claro PGCon e PGDay.</p>
<p>O blog podia estar parado, mas a comunidade brasileira de PostgreSQL continua a todo o vapor. Já tivemos o <a href="http://www.postgresql.org.br/eventos/2010/pgday/ba">PGDay BA</a>, em Ilhéus, e em breve deverá sair a data do PGDay RJ. O próximo será o PGDay DF, em 31/05 no SERPRO. Então fiquem antenados para as inscrições no evento.</p>
<h2>Palestrantes confirmados:</h2>
<ul>
<li><a href="http://www.timbira.com/">Euler Taveira</a></li>
<li>Fábio Telles</li>
<li><a href="http://www.midstorm.org/~fike/weblog/">Fernando Ike</a></li>
<li><a href="http://postgreslogia.wordpress.com/">Leonardo César</a></li>
<li><a href="http://joaocosme.wordpress.com/">João Cosme</a></li>
</ul>
<h2>Nesse eu vou!</h2>
<p>Bom, fui convidado para o evento e se nada der errado (fui escalado para uma migração na data do PGDay BA) estarei lá. Nada, já fiz uma mega amarração no trabalho, o meu chefe vai me substituir! Nesse eu vou mesmo.</p>
<h2>Me ajude a escolher o tema para a palestra no PGDay DF!</h2>
<p>Ocorre que o pessoal me deixou a vontade para escolher o tema da palestra. Eu que sou preguiçoso tenho uma forte tendência a reciclar artigos e palestras anteriores. Claro que para o PGCon Brasil, a gente sempre tras coisa nova, mas com menos de 20 dias para preparar a palestra (é claro que não estar na organização do evento já ajuda muito) a chance de eu dar uma atualizada em uma palestra antiga aumenta.</p>
<p>Então gostaria de saber se alguém tem alguma sugestão para o PGDay DF. Pode ser um artigo aqui do blog, pode ser uma <a href="http://www.slideshare.net/telles">palestra minha no Slide Share</a>, ou pode ser um tema novo. Comentários com sugestões aqui no blog, até o final da semana (que é quando eu vou começar a mexer nisso) são bem vindos. É claro que se eu não mandar logo a descrição da palestra para a organização o povo lá me mata também!</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 9px; width: 1px; height: 1px;">http://postgreslogia.wordpress.com/</div>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2010/05/11/pgday-brasilia-em-3105/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dump não é backup!</title>
		<link>http://www.midstorm.org/~telles/2010/05/06/dump-nao-e-backup/</link>
		<comments>http://www.midstorm.org/~telles/2010/05/06/dump-nao-e-backup/#comments</comments>
		<pubDate>Thu, 06 May 2010 17:01:21 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=618</guid>
		<description><![CDATA[Não, não é. Pode chorar, pode xingar mas não é. No ano passado fiz uma pesquisa aqui no blog sobre as rotinas de backup utilizados no PostgreSQL. O resultado foi que a maioria esmagadora só utiliza o pg_dump. Veja, eu &#8230; <a href="http://www.midstorm.org/~telles/2010/05/06/dump-nao-e-backup/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Não, não é. Pode chorar, pode xingar mas não é.</h2>
<p>No ano passado fiz uma pesquisa aqui no blog sobre as <a href="http://www.midstorm.org/~telles/2009/06/25/pesquisa-sobre-backup-em-postgresql/">rotinas de backup utilizados no PostgreSQL</a>. O resultado foi que a maioria esmagadora só utiliza o <em><strong><a href="http://www.postgresql.org/docs/9.0/static/app-pgdump.html">pg_dump</a></strong></em>. Veja, eu não tenho absolutamente nada contra o <span style="font-weight: normal; font-size: 13px;"><em>pg_dump</em></span><span style="font-weight: normal; font-size: 13px;">. Mas antes de me explicar, vamos pensar&#8230; <strong>PARA QUE SERVEM OS BACKUPS MESMO?</strong></span></p>
<p>Se eu fizer uma pesquisa, 10 entre 10 irão dizer: para se recuperar em caso de desastres! Simples assim, eu faço uma cópia dos dados e caso tudo dê errado eu restauro a minha cópia e volto a trabalhar.</p>
<p>Simples não?</p>
<p><strong>NÃO.</strong></p>
<p>Não tem nada de simples nisso. Vamos avaliar melhor o caso. Primeiro temos que entender o que é &#8220;tudo dê errado&#8221;. Podem acontecer várias coisas diferentes&#8230;</p>
<h3>Quanto tudo dá errado!</h3>
<ol>
<li><strong>Desastre natural</strong><br />
O CPD pegou fogo, inundou (eu já vi acontecer), teve um terremoto, jogaram um avião no prédio&#8230; bom, nestes casos só um stand by em outro prédio (ou outra cidade, outro país) resolve a situação. Mas você bem que poderia guardar os seus backups fora do prédio onde está o CPD, não?</li>
<li><strong>Falha de hardware (exceto os discos)</strong><br />
Um problema no hardware do servidor, que não seja o disco. Neste caso, basta substituir a peça com defeito e voltar a trabalhar, certo? Errado. Quem disse que você tem pentes de memória, fontes, processadores ou mesmo uma placa-mãe sobressalente para substituir naquele servidor. E no caso de você trocar algo como uma placa-mãe, provavelmente vai trocar por outro modelo, o SO pode se desentender com ele e pode exigir algum tipo de ajuste no SO.<br />
Isto leva tempo, mas não exige que se mexa com backup, certo? Errado. Se você não pode esperar até uma nova peça chegar, você vai querer subir o seu banco de dados em outro servidor o mais rápido possível, e aí sim você vai precisar do seu backup.</li>
<li><strong>Falha nos discos</strong><br />
Um problema físico num disco ou no seu storage. Bom, se você utiliza RAID (RAID 0 a princípio não é RAID e se você utiliza RAID 0 para guardar seus dados, saiba que existe um lugar especial no inferno reservado para você) e tem um Hot Spare configurado, você não precisa fazer nada naquele momento. Todo Storage descente não permite a criação de RAID sem o Hot Spare.<br />
Se você tem um storage e paga o seu caríssimo contrato de manutenção, tudo que você terá de fazer e dizer para o técnico do storage entrar e substituir o disco. Em geral quem vai lhe avisar que um disco está com problema é o técnico que chegou para trocar o disco. Os storages devem ser monitorados remotamente pelo fornecedor. Em caso de defeito eles mandam um técnico para resolver o problema ANTES de você notar que perdeu um disco.<br />
Mas, a vida não é perfeita, storages são caros e os contratos de manutenção também. Se você tem um RAID na sua controladora local e teve uma falha em um disco, provavelmente a vida vai continuar e você não vai nem perceber. É aí que mora o perígo. Alguém tem que monitorar os logs do SO para saber que um disco apresentou problema, apesar de tudo continuar funcionando. Se você não perceber isso, então a próxima falha no próximo disco (como os discos são comprados em geral do mesmo lote, eles tem esse péssimo hábito que queimar mais ou menos na mesma época&#8230;) vai gerar uma paralisação total dos banco. Aí você volta para o item 1 e com certeza vai ter de utilizar o seu backup para restaurar os dados. Isso se você não tiver aquela idéia maravilhosa de guardar os seus backups justamente naquele disco / RAID que deu problema. Assim fica a dica: monitore os logs do seu SO e nunca guarde o seu backup no mesmo disco que os seus dados.</li>
<li><strong>Ok, o hardware está ótimo, mas o SO egripou do nada</strong><br />
Pegou um vírus (sem comentários), deu uma tela azul (pode escolher outra cor, o efeito é o mesmo) da morte ou um mesmo um kernel panic. Uma atualização do SO fez com que tudo o mais travasse. O banco de dados não sobe mais. Você pode até tentar reinstalar o SO, limpar o vírus, etc e tal. Mas se isso demorar, você vai querer voltar o backup em outro servidor;</li>
<li><strong>O sistema de arquivos corrompeu</strong><br />
Após uma falta de energia, quando o luz voltou você teve uma grata surpresa: justamente a partição onde os dados estavam se corrompeu. Não vou entrar no mérito sobre qual sistema de arquivos é mais seguro agora. Ok, já vi gente que queria rodar um SGDB num Pen Drive&#8230; FAT não deveria servir para guardar nem base em .mdb! NTFS corrompe muito, mas EXT3, EXT4, ReiserFS, XFS, JFS, UFS, ZFS e outros também corrompem. Se você inventar de fazer um &#8220;ajuste de desempenho&#8221; no ser sistema de arquivos então&#8230;<br />
Bom, se a ferramenta do seu sistema de arquivos não conseguir restaurar os dados em 100%, já viu&#8230; Formate tudo e volte o backup;</li>
<li><strong>Um DBA ou sysadmin desastrado foi lá e apagou/alterou/moveu um arquivo do banco de dados</strong><br />
Vai corromper na hora. Volte o seu backup&#8230; e dê uma bronca ou PNB<strong>*</strong> no funcionário que fez esta besteira. Se foi o seu estagiário que fez isso, então peça demissão. Quem mandou deixar o estagiário chegar perto do seu banco de dados?</li>
<li><strong>O banco de dados corrompeu por uma falha do próprio banco de dados</strong><br />
É raro mas acontece. Você vai ter que verificar os logs do SO e do banco para entender o que aconteceu. Pode ser preciso aplicar um patch no servidor ou implementar um &#8220;workarround&#8221;, mais conhecido como gambiarra. Depois de entender minimamente a causa do problema e tomar providências para que isso não ocorra novamente, você vai ter de voltar o seu backup;</li>
<li><strong>Um usuário desastrado apagou uma tabela ou outro objeto do banco de dados</strong><br />
Primeiro você vai se perguntar: quem deu permissão para o usuário apagar alguma coisa no banco de dados? Se o usuário for um desenvolvedor, ídem. Se for o sysadmin, ídem. Se for o DBA&#8230; bom, sobra a bronca ou PNB<strong>*</strong>. E você vai ter que voltar o seu backup para o momento anterior ao desastre. É um detalhe importante. Tem gente que só nota a besteira dias depois de feita a besteira. Se você voltar o backup feito depois da besteira, vai continuar com o mesmo problema. Identifique quando o problema ocorreu antes de voltar o backup.</li>
</ol>
<h3>Outros usos para o backup</h3>
<p>Você pode utilizar o seu backup para outras coisas além de recuperação de desastres:</p>
<ol>
<li>Mover dados entre bases. Particularmente atualizar dados de homologação com os dados da produção. Operação bastante comum em que se utiliza o backup. Sempre que você quer fazer um teste de performance ou validar uma atualização da aplicação, alguém solicita uma atualização deste tipo.</li>
<li>Auditoria. Você pode guardar backups realizados após fechamentos cíclicos (como mensal ou anual) para efeito de auditoria. Estes backups são em geral guardados por vários anos, pelo menos 5 anos em geral.</li>
<li>Criação de novos ambientes de homologação / teste. É muito comum projetos específicos exigirem análises destrutivas dos dados e para isso utilizarem uma base/esquema separados para isso.</li>
</ol>
<h3>O tal do SLA</h3>
<p>Antes de definir a sua estratégia de backup, você deve determinar qual o seu SLA ou <a href="http://pt.wikipedia.org/wiki/Acordo_de_N%C3%ADvel_de_Servi%C3%A7o">Service Level Agreement</a>. Seja pessimista e defina o quanto você pode suportar em caso de desastre. Não adianta dizer que você quer 100% de alguma coisa. 100% não existe e os famosos &#8220;five nines&#8221; ou 99,999% custam uma verdadeira fortuna. O cofre não pode ser mais caro que o ouro que você guarda. Então pense com realismo (ou pessimismo, como você preferir) nos seguintes limites:</p>
<ul>
<li>Quanto tempo você pode ficar com o banco de dados <strong>indisponível</strong> em caso de parada <strong>não prevista</strong> em <strong>horário comercial</strong>? E se for em <strong>horário não comercial</strong>?</li>
<li>Quanto tempo você pode ficar com o banco de dados <strong>indisponível</strong> em caso de uma parada <strong>prevista</strong> (uma manutenção) em <strong>horário comercial</strong>? E se for em <strong>horário não comercial</strong>?</li>
<li>Respire fundo&#8230;. você pode <strong>perder dados</strong> relativos a quanto <strong>tempo de operação</strong>?</li>
</ul>
<p>Ok, a resposta para as 3 perguntas sempre deveria ser ZERO. Mas como eu já disse, não existe como garantir isso, e chegar perto disso custa muuuito caro. Cada uma das suas respostas vai te levar para uma estratégia de backup diferente.</p>
<h3>Tempo necessário para restaurar um backup em caso de desastre.</h3>
<p>Este é um ponto crítico que poucos sabem responder. Então vejamos como calcular isso. O tempo vai variar muito conforme alguns fatores:</p>
<ul>
<li>Você já testou uma restauração completa do backup?</li>
<li>Você tem equipe disponível no local para fazer a restauração?</li>
<li>Você tem equipe disponível para fazer a restauração fora do horário comercial?</li>
<li>As pessoas disponíveis para fazer a restauração fora do horário comercial tem acesso remoto ao servidor?</li>
<li>Você tem o procedimento de restauração documentado em papel?</li>
<li>A documentação está atualizada?</li>
<li>Você tem hardware de contingência disponível?</li>
</ul>
<div>Vamos ao cálculo:</div>
<div>
<ul>
<li>Tempo de restauração do hardware. Se você tem peças sobressalentes e equipe adequada, isso deve ser rápido, mas tem gente que sai no meio de um feriado buscando uma peça para comprar. Se for um órgão público então&#8230; O ideal é ter um servidor de Stand by para o banco de dados. Isso vai lhe poupar de toda a dor de cabeça de ir atrás de hardware;</li>
<li>Tempo para restaurar o SO. Se você tiver que reinstalar o SO num novo servidor, quanto tempo isso leva? A documentação da instalação está disponível e atualizada? As mídias de instalação na mesma versão do servidor de produção estão disponíveis? Equipe para a instalação disponível?  Novamente, um servidor de stand by vai lhe poupar este tipo de dor de cabeça e fazer você pular esta parte.</li>
<li>Tempo para restaurar o SGDB. Se você tiver que reinstalar o PostgreSQL num servidor novo, quanto tempo isso leva? E as mesmas considerações para o SO são válidas. E novamente o Stand by é uma opção que pula esta etapa.</li>
<li>Quanto tempo leva para restaurar o backup (alguns chamam isso de &#8220;restore&#8221;) para o disco do servidor. Se você utiliza fita, isso pode levar um tempo considerável. Se antes de copiar para a fita você faz uma cópia para outro servidor, pode ser mais rápido. Se o backup for grande, uma rede gigabit ou uma conexão Fibre Channel numa BAN (Backup Area Network) pode fazer toda a diferença. Sim, backup custa bem mais caro do que parece. Sim, mais uma vez o stand by permite a você pular esta etapa, para a maioria dos casos (se você precisa voltar o backup de uma versão mais antiga, o stand by não vai resolver o seu problema)</li>
<li>Quanto tempo leva para fazer a recuperação do banco de dados a partir do backup (alguns chamam isso de &#8220;recover&#8221;). Aqui a sua estratégia de backup vai fazer toda a diferença. Vamos falar mais longamente sobre este aspecto logo mais.</li>
</ul>
</div>
<p>Bom, supondo que você tenha uma base de até 1GB, sem muitas demandas de desempenho, tudo fica simples. Você pode instalar o PostgreSQL em qualquer servidor com um pouco de folga no desempenho e alguns GB de espaço em disco sobrando em subir um dump guardado em outro servidor. Pode não levar mais do que uns 30 minutos para fazer tudo. Neste caso o <em><strong>pg_dump</strong></em> parece fazer sentido.</p>
<p>Agora se você precisar subir um novo servidor dedicado para abrigar uma base com 100GB, então você terá problemas com o <strong><em>pg_dump</em></strong>. Importar um dump para criar uma base de 100GB deve levar várias horas. Se a base tiver alguma tabela muito grande, você poderá precisar fazer ajustes específicos para conseguir recriar seus índices. Se a base tiver algo em torno de 500GB por exemplo, isso pode levar dias. Mesmo com a paralelização do processo, se você souber fazer isso com cuidado.</p>
<h3>Como evitar a perda de dados?</h3>
<p>Outro problema com o <strong>pg_dump</strong>. Quanto tempo de operação em produção você está disposto a perder? Suponha que você faça o backup toda madrugada, e seu desastre ocorra no final da tarde. Se você voltar o seu backup, você vai perder todas as alterações realizadas ao longo do dia. Isso é muito grave e intolerável para a maioria dos ambientes <a href="http://pt.wikipedia.org/wiki/OLTP">OLTP</a>. É claro que você pode realizar o pg_dump mais de uma vez por dia, mas fazer isso em horário comercial costuma ter um impacto muito negativo na performance. Quais as soluções para contornar este problema?</p>
<ul>
<li>Replicação: existem N ferramentas de replicação. Algumas síncronas, outras assíncronas. Existe uma excelente documentação sobre os principais <a href="http://www.postgresql.org/docs/9.0/static/different-replication-solutions.html">tipos de replicação</a> para PostgreSQL. De qualquer forma, podemos categoriza-las em:
<ul>
<li>As ferramentas síncronas garantem a perda ZERO de dados. Cada vez que um COMMIT é realizado no servidor de produção, outro COMMIT é realizado na réplica. Somente após o COMMIT ser realizado com sucesso na base de produção e na réplica é que a operação prossegue. Resultado: ZERO em perda de dados e um gargalo de performance terrível. Para conseguir ter uma performance razoável com replicação síncrona, você vai ter que gastar muito em hardware e em ajustes de performance.</li>
<li>As ferramentas assíncronas não garantem ZERO de perda de dados, todos possuem algum atraso na sincronia entre o servidor de produção e a réplica.</li>
</ul>
</li>
<li>Point In Time Recovery: é uma técnica que consistem em fazer uma cópia do WAL (Write Ahead Log) do PostgreSQL e utilizar estas cópias para atualizar um backup até um horário específico. O PITR é uma técnica consagrada em todos os SGDBs sérios do mercado. Você não precisa instalar nenhum software extra para faze-lo funcionar. O PITR também não penaliza o desempenho do seu servidor, uma vez que o WAL já é gerado normalmente. O único overhead é a cópia deles. Você também pode ajustar o intervalo máximo entre as cópias do WAL, o que lhe permite um ajuste do período máximo de perda de dados que você terá com o PITR (ele é assíncrono então não garante perda ZERO de dados).</li>
</ul>
<p>Se você escolher logo uma estratégia de replicação, pense em primeiro lugar no Stand by. Com o lançamento da versão 9.0 o Stand by sofreu melhorias importantes e tudo indica que a próxima versão terá mais melhorias ainda. Combinar um Stand By com outras técnicas de backup é a melhor forma de se proteger contra a perda de dados e o downtime. Você estará utilizando uma solução nativa, relativamente simples, bem testada e documentada, com baixo impacto em performance e com um custo realmente baixo em comparação com outras alternativas.</p>
<h3>Backup físico, o primeiro passo.</h3>
<p>É claro que apesar de recomendar o uso do stand by, ele não é algo tão simples e barato assim. Você precisa de um servidor com capacidade semelhante ao de produção para suportar a mesma carga, lembre-se disto.  Novamente, existe excelente documentação sobre <a href="http://www.postgresql.org/docs/9.0/static/warm-standby.html">como criar um standby</a>. Você também precisa aprender com perfeição a fazer backups físicos e saber restaurá-los de forma adequada.</p>
<p>Existem dois tipos de backup físico, o frio e o quente. O frio é feito com o banco de dados desativado. Você copia todos os arquivos do banco (inclusive os de configuração) e depois reativa o banco de dados. Este método é muito simples e seguro, mas tem aquele problema básico: você precisa tirar o banco de dados do ar. Se você não tem janela para isto ou o seu sistema é 24X7, então você terá que recorrer ao backup quente. O quente é um pouco mais complicado,  pois exige que você avise o PostgreSQL quando vai começar a copiar os arquivos e quando terminou. Ele também EXIGE que você faça a cópia dos logs do WAL, utilizando o parâmetro &#8220;<a href="http://www.postgresql.org/docs/9.0/static/continuous-archiving.html#BACKUP-ARCHIVING-WAL">archive_command</a>&#8220;. Não vou me alongar sobre o assunto aqui. Leia a documentação atentamente sobre isso.</p>
<p>Depois que você se tornar um expert em fazer backups e recuperações de backups físicos quentes, já estará de quebra fazendo o PITR de forma natural e estará pronto para fazer o seu Stand By, que utiliza o backup quente como princípio para a sua criação.</p>
<h3>Então eu não preciso mais do <em>pg_dump</em>?</h3>
<p>Precisa sim. Não para a recuperação de desastres, mas para os outros casos mencionados. Suponhamos que você precisa restaurar um backup feito há 8 anos atrás. Provavelmente o servidor onde este backup foi gerado não existe mais. Talvez  o DBA que criou o procedimento  de backup não trabalhe mais na empresa. Certamente o SO e a versão do SGDB mudaram, pode ser que você não tenha mais versões compatíveis disponíveis. Então o backup físico não é indicado para estas situações. Ele é adequado para recuperação de desastres, mas não para reter backups por um longo período. Com um backup feito pelo <strong><em>pg_dump</em></strong>, você pode migrar os dados para outra versão do PostgreSQL ou até mesmo para outro SGDB.</p>
<p>E tem mais um detalhe, backups físicos são monolíticos. Você precisa restaurar o banco de dados no mesmo SO, com a mesma versão do PostgreSQL, com a mesma estrutura de diretórios, o mesmo sistema de arquivos e além de tudo precisa restaurar o banco de dados inteiro. Suponhamos que você só precise de algumas tabelas, o <strong><em>pg_dump</em></strong> oferece todo o tipo de flexibilidade para restaurar apenas uma parte dos dados.</p>
<h3>Estratégia de backup.</h3>
<p>Ok, o <strong><em>pg_dump</em></strong> não é <em><strong><span style="color: #ff0000;">O</span></strong></em> backup, ele é <span style="color: #ff0000;"><em><strong>parte</strong></em></span> de uma estratégia de backup. Você precisa do <strong><em>pg_dump</em></strong> para gerar backups esporádicos e guarda-los por um longo período. Para a recuperação de desastres você deve ter um backup físico (quente ou frio), cópia dos logs do WAL e cópia dos arquivos de configuração. Você não precisa guardar o backup físico pro muito tempo, alguns dias é razoável. Depende de quanto você deseja voltar no tempo se necessário, e de quanto você confia na sua mídia de armazenamento. Lembre-se da máxima: quem tem um backup não tem nada. Faça o backup físico uma vez por dia e não sobreescreva o backup do dia anterior. Você pode fazer o backup físico para o disco em outro servidor e gravar este backup em fita diferentes todos os dias por exemplo.  Já <strong>a cópia do WAL é feita automaticamente, mas deve ser copiada para fora do servidor também, se não imediatamente no comando do &#8220;archive_command&#8221;, faça isso em intervalos curtos para evitar a perda de dados em caso de desastres.</strong></p>
<h3>Conclusões :</h3>
<pre>(atualizado em 17/05/2010)</pre>
<ul>
<li>Backup não é simples, mesmo em bancos de dados pequenos;</li>
<li>Backup exige estudo, dedicação e disciplina;</li>
<li>Backup não deve ser responsabilidade de estagiários, deve ser criado e verificado diariamente por pessoas qualificadas e de confiança;</li>
<li>Backup é caro: os recursos de hardware são caros e os recursos humanos também;</li>
<li>Nunca diga que você está 100% seguro, você não está;</li>
<li>Você pode e deve estimar o tempo para se recuperar de desastres e qual o SLA que você pode entregar com os recursos disponíveis. Documente isso e protocole a entrega deste documento junto ao seu superior. Sim, isto pode salvar o seu emprego e de toda a sua equipe junto. Sua família agradece.</li>
</ul>
<h3>Atualização:</h3>
<p><strong><span style="font-weight: normal;">Em tempo, existe uma nova ferramenta para backup incremental chamada <a href="http://code.google.com/p/pg-rman/">pg_rman</a>. Sim, é um clone do RMAN do Oracle para o PostgreSQL. A ferramenta é relativamente nova, mas parece que o projeto está bastante ativo. Alguém aí já testou?</span></strong></p>
<p><em><strong>OBS</strong>: Gostaria de dedicar este humilde texto à todos aqueles que me contrataram para recuperar seus bancos de dados (desculpe, somente àqueles que não me deram calote depois, os que não pagaram vão para o mesmo lugar daqueles que utilizam RAID 0). Àqueles que sofreram durante madrugadas intermináveis com a pressão  de não saber se a empresa voltaria a funcionar no dia seguinte e todas as conseqüências que daí decorrem.</em></p>
<p><strong>*</strong> PNB = Pé Na Bunda, demissão mesmo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2010/05/06/dump-nao-e-backup/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>COMMIT</title>
		<link>http://www.midstorm.org/~telles/2009/10/25/commit/</link>
		<comments>http://www.midstorm.org/~telles/2009/10/25/commit/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 10:37:24 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Bruce Momjian]]></category>
		<category><![CDATA[PGCon Brasil 2009]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=608</guid>
		<description><![CDATA[O sol nascendo aqui na Unicamp é um espetáculo que vale a pena ser visto. Aqui da piscina do hotel eu acordei cedo para colocar as idéias no lugar. Ainde temos muito trabalho pela frente. Colocar as palestras no site, &#8230; <a href="http://www.midstorm.org/~telles/2009/10/25/commit/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>O sol nascendo aqui na Unicamp é um espetáculo que vale a pena ser visto. Aqui da piscina do hotel eu acordei cedo para colocar as idéias no lugar. Ainde temos muito trabalho pela frente. Colocar as palestras no site, acertar toda a parte burocrática e acertar um problema ou outro.</p>
<p>Mas ontem terminamos o evento. Como sempre, muitos problemas, muito mais do que os participantes do evento possam imaginar. Muitos erros, mas também muito aprendizado com os erros das edições anteriores.</p>
<p>Novos patrocinadores, novos palestrantes, novos temas, novos organizadores, novos participantes, novos clientes, novas idéias. Sim. Muita coisa nova. Sobre tudo, novos amigos, novas perspectivas, novos horizontes.</p>
<p>Se o primeiro PGCon Brasil, em 2007, foi um marco em termos de organização da comunidade, hoje, em 2009 temos um novo marco. As pessoas bateram à  nossa porta, entraram no evento, subiram no palco e disseram: &#8220;Hey, nós estamos utilizando o PostgreSQL em missão crítica aqui, precisamos da ajuda de vocês&#8221;. Sim, o PostgreSQL está crescendo e tomando de assalto grandes CPDs. Não é mais algo que entra pela porta dos fundos. Muita gente já testou, já sabe que funciona e também conhece suas peculiaridades. Já temos casos de implantações grandes rodando há alguns anos. Não é mais uma aventura, é uma realidade.</p>
<p>Sim, muita gente não sabe disso. Temos muito o que caminhar. Mas quem acompanha as listas de discussão (<a href="http://listas.postgresql.org.br/cgi-bin/mailman/listinfo">você AINDA não acompanha?</a>), o <a href="http://planeta.postgresql.org.br/">planeta</a> e principalmente acompanha os nossos <a href="http://www.postgresql.org.br/eventos">eventos</a> sabe que as coisas estão mudando. Pare para pensar como eram as coisas há 5 anos atrás?</p>
<p>Bom, ontem eu vi porquê valeu a pena esperar 3 anos para trazer o <a href="http://momjian.us/">Bruce Momjian</a> para o Brasil: em um dado momento ele contou um pouco da história do PostgreSQL e da sua história no PostgreSQL. De como ele começou a se dedicar ao projeto e de como aquilo inicialmente afetou a sua família e as suas finanças pessoais. Mas de repente, algo estranho começa a acontecer&#8230;. as pessoas começaram a utilizar o Postgres no Japão! Sim, em ambientes de produção. Estas pessoas criaram uma comunidade, com artigos, documentação, livros, profissionais qualificados e se tornaram o primeiro mercado a efetivamente utilizar o PostgreSQL para valer. A dedicação por anos de trabalho parece ter valido a pena.</p>
<p>Para mim isto tem um significado muito especial. Todos que me conhecem sabem que eu ainda não me sustento trabalhando com PostgreSQL. Mas já fazem alguns anos que eu tenho mantido algum tipo de contribuição para a comunidade brasileira. Sim, tem muita gente que começou muito antes e fez muito mais do que eu. Mas para mim e para muitos outros a questão é acreditar no projeto, acreditar nas pessoas. Cada vez que conheço um novo desenvolvedor do time central do Postgres eu fico mais empolgado. Pois são pessoas facinantes que estão desenvolvendo o Postgres. São pessoas que não são apenas desenvolvedores extraordinários. São pessoas com uma cultura e uma visão de mundo fantástica. É fantástico poder conversar com estas pessoas e saber que existem mais loucos pelo mundo. Que estes loucos fazem a diferença no mundo e que talvez você possa até fazer parte disso tudo, de dar a sua parte para construir um mundo mais próximo daquilo que você acredita que ele deveria ser.</p>
<p>YES, WE CAN!!!</p>
<p>IS DONE</p>
<p>IS JUST THE BEGINING&#8230;</p>
<p>Ok, devo postar mais sobre o evento, as fotos, as palestras, as pessoas, e outras coisas que rolaram no PGCon Brasil 2009, mas o dia já está claro e a água da piscina parece estar ótima&#8230; <img src='http://www.midstorm.org/~telles/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2009/10/25/commit/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Inscrições para o PGCon Brasil 2009 abrem em 16/09</title>
		<link>http://www.midstorm.org/~telles/2009/09/15/inscricoes-para-o-pgcon-brasil-2009-abrem-em-1609/</link>
		<comments>http://www.midstorm.org/~telles/2009/09/15/inscricoes-para-o-pgcon-brasil-2009-abrem-em-1609/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 22:51:07 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PGCon Brasil 2009]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=600</guid>
		<description><![CDATA[As inscrições para o PGCon Brasil 2009 estarão abertas a partir de 16/09. Garanta já sua inscrição!!! Aproveite e baixe também o cartaz do evento aqui.]]></description>
			<content:encoded><![CDATA[<p><a href="http://pgcon.postgresql.org.br"><img class="aligncenter" title="PGCon Brasil 2009" src="http://pgcon.postgresql.org.br/2009/img/pgcon2009_horizontal_small.gif" alt="" width="432" height="60" /></a></p>
<p>As inscrições para o PGCon Brasil 2009 estarão abertas a partir de 16/09.</p>
<h2><a href="http://pgcon.postgresql.org.br/2009/inscricoes.php">Garanta já sua inscrição!!!</a></h2>
<h2></h2>
<h2></h2>
<h3>Aproveite e baixe também o cartaz do evento <a href="http://pgcon.postgresql.org.br/2009/divulgue.php">aqui</a>.</h3>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2009/09/15/inscricoes-para-o-pgcon-brasil-2009-abrem-em-1609/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Concurso &#8220;O elefante está entre nós&#8221;</title>
		<link>http://www.midstorm.org/~telles/2009/08/22/concurso-o-elefante-esta-entre-nos/</link>
		<comments>http://www.midstorm.org/~telles/2009/08/22/concurso-o-elefante-esta-entre-nos/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 10:54:33 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PGCon Brasil 2009]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=595</guid>
		<description><![CDATA[Não, não é uma piada sem graça para me incentivar a perder peso. A história começou mais ou menos assim: Eu estava conversando por e-mail com o Sr. Bruce Momjian (um daqueles desenvolvedores do PostgreSQL que por algum motivo todo &#8230; <a href="http://www.midstorm.org/~telles/2009/08/22/concurso-o-elefante-esta-entre-nos/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Não, não é uma piada sem graça para me incentivar a perder peso. A história começou mais ou menos assim: Eu estava conversando por e-mail com o Sr. Bruce Momjian (um daqueles desenvolvedores do PostgreSQL que por algum motivo todo mundo já ouviu falar na comunidade&#8230;) sobre a possibilidade dele trazer alguns brindes dos EUA para o PGCon Brasil 2009.  Ele me disse que era melhor ver com o Sr. Josh Berkus, e eis que encontrei ele no mesmo dia no IRC, lá no #postgresql.</p>
<p>Eu estava interessado em conseguir uns 100 pendrives personalizados com o nome do PostgreSQL. Ano passado o David Fetter trouxe uns e eles evaporaram instantaneamente quando o pessoal ficou sabendo. Sim, eu tenho um.  Bom, o Josh disse que cada pendrive custava USD 8,00. Seria um pouco mais barato do que o preço aqui no Brasil, mas o Josh já me adiantou que só tem uns 50. Aí ele me disse algo interessante: &#8220;Me arranje algo melhor que simplesmente distribuir os pendrives para todo mundo que eu posso lhe conseguir eles de graça para você. E outra pessoa no canal deu a ideia: &#8220;Me mostre a sua melhor consulta SQL e ganhe um pendrive&#8221;.</p>
<p>O Josh parece que gostou da idéia e eu mais ainda. Aí comecei a rascunhar e pensar em como organizar isso. Pensei logo em algumas categorias para participar:</p>
<ul>
<li>Consulta ou script;</li>
<li>Artigo;</li>
<li>Artigo traduzido;</li>
<li>História em quadrinhos;</li>
<li>Estudo de caso;</li>
</ul>
<p>A ideia é mais ou menos assim: sabe aquela consulta que você criou para verificar o desempenho do banco? Aquele script de backup que ficou bacana? Ou aqueles testes que você ficou de publicar em algum lugar o resultado? Ah&#8230; tem também aquele artigo em inglês que um monte de gente adoraria ler em português. Bom, acho que deu para pegar o espírito da idéia. Você manda para nós o seu material, tem grandes chances de ganhar o seu pendrive e a comunidade ganha material novo para colocar na Internet. Todo mundo acaba ganhando.</p>
<h2>Vá na página do concurso &#8220;<a href="http://pgcon.postgresql.org.br/2009/concurso.php">O elefante está entre nós</a>&#8221; no site do <a href="http://pgcon.postgresql.org.br">PGCon Brasil 2009</a> e participe!</h2>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2009/08/22/concurso-o-elefante-esta-entre-nos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Saiu a grade do PGCon Brasil 2009!!!</title>
		<link>http://www.midstorm.org/~telles/2009/08/10/saiu-a-grade-do-pgcon-brasil-2009/</link>
		<comments>http://www.midstorm.org/~telles/2009/08/10/saiu-a-grade-do-pgcon-brasil-2009/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 19:13:18 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PGCon Brasil 2009]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=587</guid>
		<description><![CDATA[Sim, sim, é verdade! A grade oficial está no ar!!! Vá lá dar uma olhada e me diga o que você acha&#8230; Vou contar um pouco dos bastidores do evento: Foram ao todo 40 propostas na chamada de trabalhos; 2 &#8230; <a href="http://www.midstorm.org/~telles/2009/08/10/saiu-a-grade-do-pgcon-brasil-2009/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://pgcon.postgresql.org.br"> </a><a href="http://pgcon.postgresql.org.br"><img class="alignnone" title="PGCon Brasil 2009" src="http://pgcon.postgresql.org.br/2009/img/pgcon2009_horizontal_small.gif" alt="" width="432" height="60" /></a></p>
<h2>Sim, sim, é verdade! A <a href="http://pgcon.postgresql.org.br/2009/programacao.php">grade oficial</a> está no ar!!!</h2>
<p>Vá lá dar uma olhada e me diga o que você acha&#8230;</p>
<p>Vou contar um pouco dos bastidores do evento:</p>
<ul>
<li>Foram ao todo 40 propostas na chamada de trabalhos;</li>
<li>2 Palestrantes internacionais convidados;</li>
<li>65 pessoas votaram nas propostas e disseram quais eram as suas prediletas;</li>
<li>3 pessoas na banca avaliadora fizeram a seleção final das palestras;</li>
<li>4 tutoriais aprovados;</li>
<li>3 palestras avançadas;</li>
<li>4 Hacker Talks (palestras para quem deseja conhecer e  contribuir com o código do PostgreSQL);</li>
<li>11 palestras normais;</li>
<li>12 Lithning Talks  (palestras curtas de até 5 minutos cada);</li>
<li>3 salas simultâneas.</li>
</ul>
<p>Bom, outras novidades estão por vir, inscrições, concurso, patrocínios, divulgação, tudo a caminho. Até o final do mês o evento deverá estar com quase todos os detalhes fechados.  Em breve traremos mais detalhes&#8230; em breve!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2009/08/10/saiu-a-grade-do-pgcon-brasil-2009/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pesquisa sobre lembranças para o PGCon Brasil 2009</title>
		<link>http://www.midstorm.org/~telles/2009/08/05/pesquisa-sobre-lembrancas-para-o-pgcon-brasil-2009/</link>
		<comments>http://www.midstorm.org/~telles/2009/08/05/pesquisa-sobre-lembrancas-para-o-pgcon-brasil-2009/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 18:58:52 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PGCon Brasil 2009]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=584</guid>
		<description><![CDATA[Andei fazendo algumas pesquisas de lembranças que poderíamos mandar fazer para o PGCon Brasil 2009. Infelizmente isto custa dinheiro e todos os fornecedores só fecham negócio com uma quantidade mínima de cerca de 100 peças. Diante deste tipo de dificuldade, &#8230; <a href="http://www.midstorm.org/~telles/2009/08/05/pesquisa-sobre-lembrancas-para-o-pgcon-brasil-2009/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Andei fazendo algumas pesquisas de lembranças que poderíamos mandar fazer para o PGCon Brasil 2009. Infelizmente isto custa dinheiro e todos os fornecedores só fecham negócio com uma quantidade mínima de cerca de 100 peças.</p>
<p>Diante deste tipo de dificuldade, resolvi fazer esta pesquisa para ver se há algum produto que interessaria mais a comunidade e se teríamos pedidos suficientes para cobrir as despesas com isto.</p>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2009/08/05/pesquisa-sobre-lembrancas-para-o-pgcon-brasil-2009/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>A lenda da Replicação Multimaster Síncrona em bases distribuídas</title>
		<link>http://www.midstorm.org/~telles/2009/07/06/a-lenda-da-replicacao-multimaster-sincrona-em-bases-distribuidas/</link>
		<comments>http://www.midstorm.org/~telles/2009/07/06/a-lenda-da-replicacao-multimaster-sincrona-em-bases-distribuidas/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 20:15:10 +0000</pubDate>
		<dc:creator>Telles</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[replication]]></category>

		<guid isPermaLink="false">http://www.midstorm.org/~telles/?p=573</guid>
		<description><![CDATA[A história é conhecida e vira e mexe aparece alguém perguntando sobre isso. Bom, você tem uma mesma aplicação rodando em lugares geograficamente distintos. Podem ser países diferentes, podem ser estados, cidades ou até mesmo bairros diferentes, o problema é &#8230; <a href="http://www.midstorm.org/~telles/2009/07/06/a-lenda-da-replicacao-multimaster-sincrona-em-bases-distribuidas/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A história é conhecida e vira e mexe aparece alguém perguntando sobre isso. Bom, você tem uma mesma aplicação rodando em lugares geograficamente distintos. Podem ser países diferentes, podem ser estados, cidades ou até mesmo bairros diferentes, o problema é praticamente o mesmo. Imagine uma cadeia de empresas, todas elas rodando o mesmo aplicativo.</p>
<p>Você pode chegar nesta situação quando era apenas uma matriz que abriu uma filial. O banco de dados ficava só na matriz e a filial acessa o banco de dados remotamente, via Internet, conexão via rádio, linha privativa, etc. O problema é que a conexão com a filial tinha a mania de cair e quando isso acontece é como se acabasse a luz. Se pensarmos numa empresa que utiliza apenas a conexão da Telefônica aqui em SP, dá para imaginar o desespero.</p>
<p>Então a solução ideal se chama replicação multimaster síncrona: você tem alguns bancos de dados, cada um em um local diferente. Cada atualização realizada numa das bases é automaticamente replicada para as demais e vice-versa. Qualquer base pode sofrer atualizações. Uma vez realizada, ela é visível instantaneamente em todas as bases. Se você der um rollback em uma transação, o rollback será realizado de forma idêntica em todos os nós. Ou seja, tem de garantir o <a href="http://pt.wikipedia.org/wiki/ACID">ACID</a> em todos os nós, como se estivesse em apenas um banco de dados. Existe um recurso no PostgreSQL que visa garantir este comportamento, ele se chama <a href="http://www.postgresql.org/docs/8.4/static/sql-prepare-transaction.html">commit em duas fases</a> e está disponível a partir da versão 8.1 do PostgreSQL. O commit em duas fases é muito importante por realmente garantir a consistência através de todos os nós. Ele <strong>não</strong> resolve problemas como o uso intensivo de SEQUÊNCIAS ou o a equivalência de um TIMESTAMP com precisão absoluta, mas resolve o problema de ter um commit ou rollback sincronizado em todos os nós. Deve-se entender que o Commit em duas fases é implemento como comandos SQL e não como uma aplicação. Portanto a sua aplicação tem de ser desenhada específicamente para utiliza-lo.</p>
<p>Há uma solução no universo PostgreSQL conhecida como PGCluster, que<strong> não</strong> utiliza o commit em duas fases mas faz a replicação multimaster assíncrona através de um serviço de balanceamento de carga e outro serviço de replicação. E vai além disso, se a comunicação com um dos nós cair, ele sincroniza o nó quando ele volta a se comunicar com os demais. Não é ótimo?</p>
<p>Sim, o PGCluster é uma ideia muito interessante, mas não como uma solução de banco de dados distribuído. Cada alteração no banco de dados dispara uma atualização em cada nós que precisa ser confirmada em um por um e depois da confirmação, liberada em todos eles. Isto significa que o que seria feito em X tempo em um único nó, será feito em  2XNL tempo onde N é o número de nós envolvidos na replicação e L é a latência da rede. Isto significa que se os nós não estiverem dispostos lado a lado numa rede local de alta velocidade, a perda de desempenho é absolutamente intolerável.</p>
<p>Mesmo que você utilize fibras ópticas de última geração para interligar seus servidores localizados em lugares distintos, você sofrerá com uma limitação: a velocidade da luz. Até que se prove ao contrário, nada viaja a uma velocidade superior a da luz, inclusive a informação. E nas idas e vindas do commit em duas fazes, a velocidade da luz começa a ser relevante. Ou seja, o PGCluster só é funcional como solução de alta disponibilidade, para servidores que ficam todos no mesmo CPD. Ainda assim há uma perda de performance considerável em cada atualização do banco de dados (nas leituras a distribuídas da carga propcia uma melhora de desempenho). Para encerrar o assunto, vale lembrar que o PGCluster é uma solução complexa de instalar (são no mínimo 3 nós + o balanceador de carga + o replicador), sua última versão foi lançada em 02/2008 e não é uma solução realmente bem aceita pelos desenvolvedores do PostgreSQL.</p>
<p>Sim o commit em duas fases pode ser utilizado com sucesso para bancos de dados distribuídos, mas para sincronizar apenas algumas operações e não a base inteira. Se você pesquisar bastante sobre o assunto, irá esbarrar em outras soluções:</p>
<ul>
<li>Houve algum tempo, se pensou numa forma nova para implementar uma replicação multimaster síncrona num projeto batizado como Slony II que rapidamente foi abandonado por ser considerado complexo demais e inviável na prática.</li>
<li>O PGCluster II  é uma tentativa de implementar algo semelhante ao Oracle RAC, que também é uma solução de alta disponibilidade e exige que todos os nós fiquem no mesmo local (eles tem de compartilhar o mesmo storage). Pelo que consta o PGCluter II ainda não teve nenhuma versão oficial lançada e não sei se ainda tem algum desenvolvimento ativo.</li>
<li>O <a href="http://bucardo.org/">Bucardo</a> é uma solução já em produção, mas não é síncrona, ou seja, ela admite um atraso entre as atualizações em cada nó o que exige regras de resolução de conflito quando um mesmo registro é atualizados em diferentes nós. Ou seja, não garante nem tem como garantir o ACID. O Bucardo é indicado para sincronizar uma base principal com outras bases  com pouco volume de atualização, como no caso de forças de vendas que tem uma base isolada no notebook de cada vendedor.</li>
</ul>
<p>Bom, mas então como resolvemos o problema das filiais??? Duas abordagens distintas:</p>
<ul>
<li>Resolva o seu problema com o link e mantenha todos os seus dados numa única base. Pode parecer besteira, mas ainda é a solução mais utilizada por grandes empresas que podem investir na redundância de links de alta velocidade e alta disponibilidade;</li>
<li>Não integrar todos os dados em uma única base. Faça com que  cada filial tenha apenas uma fatia dos dados e ponto final. Uma variação mais eficiente é fazer com que uma chamada por informações que se encontram em outro servidor sejam desviadas  para o servidor correto. Isto se chama particionamento horizontal ou cluster shared nothing e é uma técnica bastante complexa, mas muito eficiente. Uma forma de implementar isto no PostgreSQL é utlizando o <a href="http://pgfoundry.org/projects/plproxy/">PL/Proxy</a> do Skytools.</li>
</ul>
<p>As duas abordagens podem parecer um tanto radicais para você? Bom, eu diria que 90% dos grandes bancos utilizam exatamente estas abordagens:  possuem cerca de 3 ou 4 sites (digamos que em SP, DF e PE) cada uma respondendo por todas as transações da sua região. Há um investimento pesado para conectar todos os terminais no site da sua região. Se você precisar de informações de um site em outra região, a conexão é desviada para o site correto.</p>
<p>Estas são as duas formas óbvias de encarar o problema: centralizar tudo numa única base, ou dividir logo todos os dados em bases isoladas. Isto é tudo o que você pode fazer sem ter que mexer na lógica da aplicação. No entanto, se você está disposto a mexer na sua aplicação, particularmente na modelagem desta, então existe sim um meio termo. A primeira coisa a se fazer é dividir as tabelas em partes conforme as regras de negócio para a sua atualização:</p>
<ol>
<li>Tabelas que não são atualizadas ou que são atualizadas raramente: inclua aqui tabelas de parâmetros e coisas do tipo. Se você puder realizar as atualizações em apenas um local então você pode fazer com elas caiam no segundo caso:</li>
<li>Tabelas que são atualizadas apenas em um nó como a matriz e são consultadas por todas as outras filiais;</li>
<li>Tabelas onde cada filial é responsável pela atualização de apenas um punhado de registros, sendo que cada filial não pode alterar os registros da outra filial;</li>
<li>Tabelas onde cada filial deve poder atualizar qualquer registro da tabela, independente de qual filial seja.</li>
</ol>
<ul>
<li>Tudo que estiver nos casos 1 e 2 podem sofrer uma replicação multi/master, que é um pouco menos complexa e possui algumas boas ferramentas para implementar como o <a href="http://www.slony.info/">Slony I</a> e o <a href="http://pgfoundry.org/projects/skytools/">Londiste</a>. A ideia é simples, você atualiza as informações em uma única base e as informações são replicadas para os demais nós.</li>
<li>Tudo que estiver no 3º caso deve ser modificado para cair no 2º caso através do <a href="http://www.postgresql.org/docs/8.4/static/ddl-partitioning.html">particionamento de tabelas</a>. Assim você divide uma única tabela em uma tabela pai e várias outras tabelas filhas, uma para cada filial. As atualizações só serão feitos na tabela relativa a filial onde ele está e as suas atualizações são replicadas para as demais filiais. O particionamento de tabelas no PostgreSQL é um pouco chato de ser feito (melhorou um pouco no 8.4 mas no 8.5 está prometida uma revolução), mas é bastante flexível, portanto, depois de particionar as tabelas, você cai numa situação onde a replicação master/slave pode ser aplicada novamente;</li>
<li>Se você tiver o azar de cair no 4º caso , então você não terá outra alternativa senão utilizar o commit em duas fazes. Em geral, com uma boa modelagem você consegue fugir deste tipo de situação ao máximo, mas quando não for realmente possível, a ferramenta é esta. Note que nos casos 2 e 3, não estou falando de replicação síncrona. Se você realmente precisar de transações síncronas, com ACID entre todos os nós, o commit em duas fases é a sua única opção.</li>
</ul>
<p>Como você pode perceber, não existe solução fácil. Mas, feliz são os desenvolvedores que criam suas aplicações já pensando neste tipo de solução. É claro que hoje se utiliza muito SOA, REST e outras tecnologias para trafegar informações entre aplicações. Outros se aventuram com o envio de TXT, ou XML para lá e para cá das mais diversas formas. Há ainda aqueles que criam uma teia de <a href="http://www.postgresql.org/docs/8.4/static/dblink.html">DBLink</a>s para interligar as bases. Eu como DBA não sou especialista neste tipo de solução, mas acredito que elas sirvam para resolver outro tipo de problema. Um exemplo clássico seria a disponibilização de informações ou serviços de uma aplicação para outra aplicação diferente e não para a replicação de informações dentro de uma mesma aplicação. Trocar informações entre aplicações é muito diferente de replicar informações em bases distribuidas. A chave do problema sempre estará nas diferenças entre <strong>síncrono</strong> e <strong>assíncrono</strong>, e <strong>master/slave</strong> e<strong> multimaster</strong>.</p>
<p>Bom, eu acho que é só por enquanto. Se alguém conhecer outro tipo de solução que não seja baseada em nenhum dos casos aqui ou se tiver uma experiência que refute os argumentos que apresentei aqui, por favor deixe um comentário abaixo para trocarmos umas figurinhas, ok?</p>
<ul>
<li>Para saber mais sobre os diferentes tipos de Cluster e Replicação, veja neste blog o texto: <a href="http://www.midstorm.org/~telles/2007/08/24/cluster-replicacao/">Cluster != Replicação</a>.</li>
<li>Para saber mais sobre soluções de alta disponibilidade e balanceamento de carva, veja o texto da documentação oficial: <a href="http://www.postgresql.org/docs/8.4/static/high-availability.html">High Availability, Load Balancing, and Replication</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.midstorm.org/~telles/2009/07/06/a-lenda-da-replicacao-multimaster-sincrona-em-bases-distribuidas/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

