<?xml version="1.0"?>
<rdf:RDF
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="http://planeta.postgresql.org.br">
	<title>Planeta PostgreSQL-BR</title>
	<link>http://planeta.postgresql.org.br</link>
	<description>Planeta PostgreSQL-BR - http://planeta.postgresql.org.br</description>

	<items>
		<rdf:Seq>
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-2384026433716182907" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-5542192495743984939" />
			<rdf:li rdf:resource="http://www.midstorm.org/~telles/?p=665" />
			<rdf:li rdf:resource="http://www.midstorm.org/~fike/weblog/?p=813" />
			<rdf:li rdf:resource="http://www.midstorm.org/~fike/weblog/?p=811" />
			<rdf:li rdf:resource="http://www.midstorm.org/~fike/weblog/?p=799" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-8487777706035356523" />
			<rdf:li rdf:resource="http://jotacomm.wordpress.com/?p=132" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-6432437458249996705" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-3854620452805847879" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-9054633505063867483" />
			<rdf:li rdf:resource="http://www.midstorm.org/~telles/?p=627" />
			<rdf:li rdf:resource="http://www.midstorm.org/~telles/?p=618" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-4517630244732002940" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-2060078548179400823" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-7565748323186331194" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-747592200994127647" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-4149995007218900666" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-711107884524485564" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-7256794289707503902" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-6518681864817607221" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-578610887231886448.post-4024197949835529667" />
			<rdf:li rdf:resource="http://www.postgresql.org.br/81 at http://www.postgresql.org.br" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-4126903476543280188" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-578610887231886448.post-3585110683176028852" />
			<rdf:li rdf:resource="http://www.postgresql.org.br/79 at http://www.postgresql.org.br" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-6838506.post-2934289907567286120" />
			<rdf:li rdf:resource="http://www.postgresql.org.br/73 at http://www.postgresql.org.br" />
			<rdf:li rdf:resource="http://joaocosme.wordpress.com/?p=155" />
			<rdf:li rdf:resource="http://www.postgresql.org.br/80 at http://www.postgresql.org.br" />
			<rdf:li rdf:resource="http://www.midstorm.org/~telles/?p=608" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-578610887231886448.post-2797364738069918375" />
			<rdf:li rdf:resource="http://www.postgresql.org.br/77 at http://www.postgresql.org.br" />
			<rdf:li rdf:resource="http://ribafs.wordpress.com/2006/12/22/podutividade-no-desenvolvimento-web/" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-578610887231886448.post-110337242098772183" />
			<rdf:li rdf:resource="http://www.midstorm.org/~fike/weblog/?p=667" />
			<rdf:li rdf:resource="http://jotacomm.wordpress.com/?p=117" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-8981227237054252370" />
			<rdf:li rdf:resource="http://www.midstorm.org/~telles/?p=600" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-578610887231886448.post-6697240777811043597" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-578610887231886448.post-6263505748124237059" />
			<rdf:li rdf:resource="http://www.postgresql.org.br/71 at http://www.postgresql.org.br" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-3735880111929007415" />
			<rdf:li rdf:resource="http://www.midstorm.org/~telles/?p=595" />
			<rdf:li rdf:resource="http://jotacomm.wordpress.com/?p=100" />
			<rdf:li rdf:resource="http://jotacomm.wordpress.com/?p=94" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-7627735809955316245" />
			<rdf:li rdf:resource="http://jotacomm.wordpress.com/?p=86" />
			<rdf:li rdf:resource="http://www.midstorm.org/~telles/?p=587" />
			<rdf:li rdf:resource="http://www.midstorm.org/~telles/?p=584" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-8179270431637399242" />
			<rdf:li rdf:resource="http://www.postgresql.org.br/67 at http://www.postgresql.org.br" />
			<rdf:li rdf:resource="http://www.postgresql.org.br/65 at http://www.postgresql.org.br" />
			<rdf:li rdf:resource="http://www.midstorm.org/~telles/?p=573" />
			<rdf:li rdf:resource="http://www.midstorm.org/~fike/weblog/?p=632" />
			<rdf:li rdf:resource="http://www.midstorm.org/~fike/weblog/?p=626" />
			<rdf:li rdf:resource="http://www.midstorm.org/~telles/?p=570" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3371915898459901668.post-836973641950793156" />
			<rdf:li rdf:resource="http://www.midstorm.org/~telles/?p=564" />
			<rdf:li rdf:resource="http://www.midstorm.org/~telles/?p=552" />
		</rdf:Seq>
	</items>
</channel>

<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-2384026433716182907">
	<title>Claudio Bezerra Leopoldino: Coloque o PostgreSQL no seu Navegador!</title>
	<link>http://postgresqlbr.blogspot.com/2010/08/coloque-o-portgresql-no-seu-navegador.html</link>
	<content:encoded>&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_r2Eq58DmzTc/THuk50if9EI/AAAAAAAAAMM/mY-nMI_NRbU/s1600/postgresql+personas&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/_r2Eq58DmzTc/THuk50if9EI/AAAAAAAAAMM/mY-nMI_NRbU/s320/postgresql+personas&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Esse é uma dica para quem gosta de personalizar o seu computador com temas e papéis de parede.&lt;br /&gt;&lt;br /&gt;O &lt;a href=&quot;http://www.getpersonas.com/en-US/&quot;&gt;Personas&lt;/a&gt; é um complemento do navegador Firefox que permite a fácil instalação de temas. Também é possível criar a sua própria &lt;i&gt;skin&lt;/i&gt; para o firefox, de uma forma relativamente fácil, embora demore alguns dias para a mesma passar pelo processo de aprovação. É uma oportunidade para exercer toda a sua criatividade e personalizar sua máquina!&lt;br /&gt;&lt;br /&gt;Existem temas sobre filmes, personagens de anime, artistas e sobre softwares e é muito fácil escolher e aplicar novas opções sem afetar o desempenho do navegador. O linux, por exemplo, tem dezenas de opções!&lt;br /&gt;&lt;br /&gt;Até a semana passada, não havia nenhum sobre o Postgres e criei o primeiro, penando muito no uso do Gimp: &quot;PostgreSQL Simple&quot;, que aparece na imagem que ilustra este post. Espero que apareçam em breve outras opções mais criativas :)&lt;br /&gt;&lt;br /&gt;Problemas:&lt;br /&gt;&lt;b&gt;- Preferível para o Firefor 3.6.*&lt;/b&gt; em diante, não estando disponível para outros navegadores como IE.&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-2384026433716182907?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-30T10:16:28+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-5542192495743984939">
	<title>Claudio Bezerra Leopoldino: PostgreSQL Beta 4 Lançado!</title>
	<link>http://postgresqlbr.blogspot.com/2010/08/postgresql-beta-4-lancado.html</link>
	<content:encoded>Liberada nova versão de teste do Postgresql, a &lt;a href=&quot;http://www.postgresql.org/&quot;&gt;beta 4&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Vamos continuar testando e reportando problemas!&lt;br /&gt;&lt;br /&gt;Notas de lançamento da versão &lt;a href=&quot;http://www.postgresql.org/about/news.1223&quot;&gt;aqui&lt;/a&gt;! Download &lt;a href=&quot;http://www.postgresql.org/download&quot;&gt;aqui&lt;/a&gt;!&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-5542192495743984939?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-30T10:07:16+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="http://www.midstorm.org/~telles/?p=665">
	<title>Fabio Telles: Projeto PGXN</title>
	<link>http://www.midstorm.org/~telles/2010/08/13/projeto-pgxn/</link>
	<content:encoded>&lt;p&gt;Todo usuário do PostgreSQL deveria conhecer o &lt;a href=&quot;http://pgfoundry.org/&quot;&gt;PgFoundry&lt;/a&gt;, 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 &lt;a href=&quot;http://www.cpan.org/&quot;&gt;CPAN&lt;/a&gt;, um repositório com mais de 20 mil  módulos para o &lt;a href=&quot;http://www.perl.org/&quot;&gt;PERL&lt;/a&gt;. Pois bem, o pessoal da PGExperts teve a ideia de criar um repositório no mesmo estilo para o Postgres.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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&amp;#8230; chegou a sua vez de retribuir um pouco e fazer a sua doação.&lt;/p&gt;
&lt;p&gt;Um dia nós brasileiros precisamos perder aquela fama de sanguessugas do Software Livre. Eu já fiz, &lt;a href=&quot;http://pgxn.org/contributors.html&quot;&gt;minha doação&lt;/a&gt;, agora é a sua vez. Conheça o projeto e faça a sua parte:&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://pgxn.org/&quot;&gt;PostgreSQL Extension network&lt;/a&gt;&lt;/h3&gt;</content:encoded>
	<dc:date>2010-08-13T22:29:57+00:00</dc:date>
</item>
<item rdf:about="http://www.midstorm.org/~fike/weblog/?p=813">
	<title>Fernando Ike: FISL11: O Fim</title>
	<link>http://www.midstorm.org/~fike/weblog/2010/07/27/fisl11-o-fim/</link>
	<content:encoded>&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.estounanet.com/blog/wp-content/uploads/2009/06/penguin_island.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; O &lt;a href=&quot;http://www.fisl.org.br&quot; target=&quot;_blank&quot;&gt;F&amp;oacute;rum Internacional de Software Livre&lt;/a&gt; chegou na d&amp;eacute;cima primeira edi&amp;ccedil;&amp;atilde;o. Com a mudan&amp;ccedil;a para o m&amp;ecirc;s de julho e o ano 2010, digamos que literalmente (passamos) frio. Esse &amp;eacute; um resumo de ideias que ruminaram.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Essa edi&amp;ccedil;&amp;atilde;o ficou n&amp;iacute;tida algumas mudan&amp;ccedil;as:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
	Rede sem fio (wirelles/wifi) funcionou&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Incr&amp;iacute;vel, n&amp;atilde;o? Mas aparentemente funcionou para quem precisou usar. Os &lt;strong&gt;hotspots&lt;/strong&gt; da &lt;a href=&quot;http://www.procempa.com.br/&quot; target=&quot;_blank&quot;&gt;Procempa&lt;/a&gt; atenderam bem quem usou, tamb&amp;eacute;m acrescenta que muita gente j&amp;aacute; tem um modem &lt;strong&gt;3g&lt;/strong&gt; para usar com laptop ou celular com acesso a internet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Estandes&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Esse ano n&amp;atilde;o teve estande do &lt;strong&gt;Google&lt;/strong&gt; e nem da &lt;strong&gt;Globo.com&lt;/strong&gt;, esse ano foi a vez do &lt;a href=&quot;http://www.ig.com.br&quot;&gt;Portal IG&lt;/a&gt;. Tinham algumas modelos com roupas inspiradas em &lt;a href=&quot;http://pt.wikipedia.org/wiki/Matrix&quot; target=&quot;_blank&quot;&gt;Matrix&lt;/a&gt;, l&amp;oacute;gico que viraram a atra&amp;ccedil;&amp;atilde;o de todo evento.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Palestras&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Foi a edi&amp;ccedil;&amp;atilde;o com o maior n&amp;uacute;mero de palestras, muita gente que nunca foi palestrante tiveram a oportunidade para falar. Isso &amp;eacute; um dos pontos positivos da nova forma de avaliar palestras.&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; O problema desse novo m&amp;eacute;todo &amp;eacute; que um palestrante pode ter mais de uma palestra aprovada. Teve muita palestra fraca (n&amp;atilde;o no sentido de palestra b&amp;aacute;sica mas mal preparada), poderia adotar um dos crit&amp;eacute;rios de avalia&amp;ccedil;&amp;atilde;o dos anos anteriores que era: &amp;quot;um palestrante, uma palestra&amp;quot;. Assim teria maior diversidade que j&amp;aacute; teve esse ano.&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Se tiver o v&amp;iacute;deo no &lt;a href=&quot;http://tv.softwarelivre.org/&quot; target=&quot;_blank&quot;&gt;TV Software Livre&lt;/a&gt;, os cinco primeiro minutos de algumas palestras j&amp;aacute; mostram o quanto ruim eram. Em compensa&amp;ccedil;&amp;atilde;o, palestra muito boa do Igor Sysoev (&lt;a href=&quot;http://nginx.org/&quot; target=&quot;_blank&quot;&gt;NGINX&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Grupo de usu&amp;aacute;rios&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; O espa&amp;ccedil;o deles no evento foi menor esse ano que dos anos anteriores. A maioria dos grupos tem organizado eventos espec&amp;iacute;ficos que podem deixados os Grupos de Usu&amp;aacute;rios com pouco f&amp;ocirc;lego para estarem no FISL. Os eventos comunit&amp;aacute;rios aconteceram mas em pouco n&amp;uacute;mero.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A PUC&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;Eacute; um excelente espa&amp;ccedil;o, principalmente para espantar o frio que estava em Porto Alegre.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Os palestrantes &amp;iacute;dolos&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://pt.wikipedia.org/wiki/Jon_Hall&quot; target=&quot;_blank&quot;&gt;Jon Maddog Hall&lt;/a&gt; tem muitos f&amp;atilde;s, eu sou um deles. Mas ele circulou tranquilamente por todo evento sem que houvesse grande ass&amp;eacute;dio. N&amp;atilde;o s&amp;oacute; ele mas muitos outros palestrantes.&lt;strong&gt;&lt;br /&gt;
	&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Participantes&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; O perfil dos participantes est&amp;aacute; mudando. Tem diversas raz&amp;otilde;es&lt;/p&gt;
&lt;p&gt;- O Software Livre/C&amp;oacute;digo Aberto de modo geral est&amp;aacute; bem mais aceito do que 10 ou 5 anos atr&amp;aacute;s. Hoje tem muitos que trabalham somente com tecnologias baseadas em SL/CA. Muitos dos profissionais do passado deixaram de ser t&amp;eacute;cnicos e tornaram gerentes ou mudaram de profiss&amp;atilde;o.&lt;/p&gt;
&lt;p&gt;- Os novos participantes do FISL (generalizando) s&amp;atilde;o fanboys de uma tecnologia que &amp;eacute; SL/CA. Tanto que o carater ideol&amp;oacute;gico dos anos anteriores n&amp;atilde;o foi t&amp;atilde;o n&amp;iacute;tido nesta &amp;uacute;ltima edi&amp;ccedil;&amp;atilde;o. Isso tamb&amp;eacute;m &amp;eacute; refletido em outras formas, quantidade de computadores da Apple era bem destacado, sendo que as pessoas n&amp;atilde;o se importam de usarem o Sistema Operacional propriet&amp;aacute;rio da Apple.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ao question&amp;aacute;-los, em muitos casos o argumento &amp;eacute; que o Hardware &amp;eacute; melhor (al&amp;eacute;m de te olharem atravessado durante todo evento), Por&amp;eacute;m se o crit&amp;eacute;rio &amp;eacute; melhor por que n&amp;atilde;o usam a M&amp;aacute;quina Virtual do .&lt;strong&gt;NET&lt;/strong&gt; que &amp;eacute; melhor que as outras m&amp;aacute;quinas virtuais? Ou por que n&amp;atilde;o usam uma linguagem propriet&amp;aacute;ria que &amp;eacute; melhor que alguma SL/CA.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Creio que isso seja relfexo do debate sobre C&amp;oacute;digo-Aberto (&lt;a href=&quot;http://catb.org/esr/&quot; target=&quot;_blank&quot;&gt;Eric Raymond&lt;/a&gt;) e Software Livre (&lt;a href=&quot;http://stallman.org/&quot; target=&quot;_blank&quot;&gt;Richard Stallman&lt;/a&gt;). A&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclus&amp;atilde;o&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; O FISL mudou, dif&amp;iacute;cil dizer para melhor ou pior, reflexo da mudan&amp;ccedil;a das diversas &amp;aacute;reas das sociedades que tiveram penetrado as ideias de SL/CA. O FISL est&amp;aacute; mais diversificado, essa diversifica&amp;ccedil;&amp;atilde;o ir&amp;aacute; refletir no futuro na pr&amp;oacute;pria extin&amp;ccedil;&amp;atilde;o do FISL. A pulveriza&amp;ccedil;&amp;atilde;o de eventos relacionados a SL/CA s&amp;oacute; ir&amp;aacute; aumentar.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; O FISL como eu conheci ou como voc&amp;ecirc; conhece, daqui 5 anos ser&amp;aacute; completamente diferente. Nem t&amp;atilde;o corporativo, nem t&amp;atilde;o t&amp;eacute;cnico, nem t&amp;atilde;o ideol&amp;oacute;gico, s&amp;oacute; diferente.&lt;/p&gt;
&lt;p&gt;
	PS. N&amp;atilde;o comentei mas &amp;eacute; sempre bom encontrar as pessoas envolvidas no &lt;a href=&quot;http://www.postgresql.org&quot; target=&quot;_blank&quot;&gt;PostgreSQL&lt;/a&gt; e no &lt;a href=&quot;http://www.debian.org&quot; target=&quot;_blank&quot;&gt;Debian&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-02T20:12:50+00:00</dc:date>
	<dc:creator>Fernando Ike</dc:creator>
</item>
<item rdf:about="http://www.midstorm.org/~fike/weblog/?p=811">
	<title>Fernando Ike: Beta 3 do PostgreSQL 9.0</title>
	<link>http://www.midstorm.org/~fike/weblog/2010/07/27/beta-3-do-postgresql-9-0/</link>
	<content:encoded>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter&quot; height=&quot;460&quot; src=&quot;http://www.puppetcentre.org.uk/Images/17elephant2.jpg&quot; width=&quot;320&quot; /&gt; &lt;br /&gt;
	&lt;span&gt;&lt;em&gt;Original da imagem &lt;a href=&quot;http://www.puppetcentre.org.uk/animationsonline/aoseventeen/feat_watchout.html&quot; target=&quot;_blank&quot;&gt;aqui&lt;/a&gt;.&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; J&amp;aacute; tem alguns dias mas vale o recado. Saiu o &lt;a href=&quot;http://www.postgresql.org/about/news.1220&quot; target=&quot;_blank&quot;&gt;Beta 3 da nova vers&amp;atilde;o do PostgreSQL (9.0&lt;/a&gt;), muitas corre&amp;ccedil;&amp;otilde;es no &lt;a href=&quot;http://wiki.postgresql.org/wiki/Hot_Standby&quot; target=&quot;_blank&quot;&gt;hot stanby&lt;/a&gt; que &amp;eacute; uma novas funcionalidades mais aguardadas no &lt;a href=&quot;http://www.postgresql.org&quot; target=&quot;_blank&quot;&gt;PostgreSQL&lt;/a&gt;.&lt;br /&gt;
	&amp;nbsp;&lt;/p&gt;</content:encoded>
	<dc:date>2010-07-28T00:13:47+00:00</dc:date>
	<dc:creator>Fernando Ike</dc:creator>
</item>
<item rdf:about="http://www.midstorm.org/~fike/weblog/?p=799">
	<title>Fernando Ike: Dica: Artigo sobre replicação nativa do Postgres 9.0</title>
	<link>http://www.midstorm.org/~fike/weblog/2010/07/26/dica-artigo-sobre-replicacao-nativa-do-postgres-9-0/</link>
	<content:encoded>&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; O pessoal da &lt;a href=&quot;http://www.softa.com.br&quot; target=&quot;_blank&quot;&gt;Softa&lt;/a&gt; &lt;a href=&quot;http://blog.softa.com.br/configurando-a-replicacao-nativa-do-postgresq&quot; target=&quot;_blank&quot;&gt;escreveu&lt;/a&gt; sobre o teste que eles fizeram com uma funcionalidade adicionada na vers&amp;atilde;o 9.0 do &lt;a href=&quot;http://www.postgresql.org.br&quot; target=&quot;_blank&quot;&gt;PostgreSQL&lt;/a&gt; 9.0 que &amp;eacute; a replica&amp;ccedil;&amp;atilde;o por Hot Standby.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Vale &amp;agrave; pena conferir, link &lt;a href=&quot;http://blog.softa.com.br/configurando-a-replicacao-nativa-do-postgresq&quot; target=&quot;_blank&quot;&gt;aqui&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2010-07-26T17:36:31+00:00</dc:date>
	<dc:creator>Fernando Ike</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-8487777706035356523">
	<title>Claudio Bezerra Leopoldino: PostgreSQL Feature Matrix!</title>
	<link>http://postgresqlbr.blogspot.com/2010/07/postgresql-feature-matrix.html</link>
	<content:encoded>Você sabe a partir de que versão o Postgres implementa a cláusula RETURNING ou cursores atualizáveis? Essas informações são importantes para a compatibilidade entre as várias versões do SGBD, assim como para acompanhar a evolução da ferramenta a cada ciclo de desenvolvimento, e estão disponíveis na &lt;a href=&quot;http://www.postgresql.org/about/featurematrix&quot;&gt;PostgreSQL Feature Matrix&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Atualmente a matriz de funcionalidades oficial do postgres apresenta as mudanças originadas nas versões 7.48 até 9.0, beta 2.&lt;table class=&quot;tblBasicGrey&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th class=&quot;colMid&quot; align=&quot;center&quot;&gt;&lt;br /&gt;&lt;/th&gt;&lt;th class=&quot;colMid&quot; align=&quot;center&quot;&gt;&lt;br /&gt;&lt;/th&gt;&lt;th class=&quot;colMid&quot; align=&quot;center&quot;&gt;&lt;br /&gt;&lt;/th&gt;&lt;th class=&quot;colMid&quot; align=&quot;center&quot;&gt;&lt;br /&gt;&lt;/th&gt;&lt;th class=&quot;colMid&quot; align=&quot;center&quot;&gt;&lt;br /&gt;&lt;/th&gt;&lt;th class=&quot;colMid&quot; align=&quot;center&quot;&gt;&lt;br /&gt;&lt;/th&gt;&lt;th class=&quot;colLast&quot; align=&quot;center&quot;&gt;&lt;br /&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-8487777706035356523?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-07-07T12:42:01+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="http://jotacomm.wordpress.com/?p=132">
	<title>João Paulo (Jota): Im back</title>
	<link>http://jotacomm.wordpress.com/2010/06/04/im-back/</link>
	<content:encoded>&lt;p&gt;Olá, pessoal&lt;/p&gt;
&lt;p&gt;Estou de volta após um longo período de inatividade. Em breve novos posts sobre PostgreSQL.&lt;/p&gt;
&lt;p&gt;Abraços&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/jotacomm.wordpress.com/132/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/jotacomm.wordpress.com/132/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/jotacomm.wordpress.com/132/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/jotacomm.wordpress.com/132/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/jotacomm.wordpress.com/132/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/jotacomm.wordpress.com/132/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/jotacomm.wordpress.com/132/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/jotacomm.wordpress.com/132/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/jotacomm.wordpress.com/132/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/jotacomm.wordpress.com/132/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&amp;amp;blog=5266308&amp;amp;post=132&amp;amp;subd=jotacomm&amp;amp;ref=&amp;amp;feed=1&quot; /&gt;</content:encoded>
	<dc:date>2010-06-04T22:28:07+00:00</dc:date>
	<dc:creator>jotacomm</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-6432437458249996705">
	<title>Claudio Bezerra Leopoldino: PostgreSQL 9.0: Quais são as novidades? A visão das &quot;funcionalidades da semana&quot; - Parte 2!</title>
	<link>http://postgresqlbr.blogspot.com/2010/05/postgresql-90-quais-sao-as-novidades.html</link>
	<content:encoded>&lt;div class=&quot;post-header&quot;&gt;  &lt;/div&gt;  &lt;div class=&quot;post-body entry-content&quot;&gt;  &lt;!--   @page { margin: 2cm }   P { margin-bottom: 0.21cm }  --&gt;    &lt;p class=&quot;western&quot;&gt;O PostgreSQL está em sua quarta versão alfa, e começam a aparecer indicações das novas funcionalidades e alterações que foram introduzidas. O informe semanal &quot;PostgreSQL Weekly News&quot;, organizado por David Fetter apresenta uma seção chamada &quot;Feature of the Week&quot;, ou funcionalidade da semana, descrevendo uma alteração em desenvolvimento. Os informes originais podem ser consultados &lt;a href=&quot;http://www.postgresql.org/community/weeklynews/&quot;&gt;aqui&lt;/a&gt;. &lt;/p&gt; &lt;p class=&quot;western&quot;&gt;Abaixo listo as últimas funcionalidades citadas, agregando algum comentário quando pertinente:&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;&lt;span&gt;31/05/2010&lt;/span&gt; - Esta semana não teve &quot;funcionalidade da semana&quot;. Nas colunas anteriores a coluna era escrita por David Fetter e Devrim GUNDUZ, mas o segundo não participou da coluna desta semana. Pode ser que a feature of the week volte, ou não...&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;&lt;span&gt;23/05/2010&lt;/span&gt; - &lt;span id=&quot;result_box&quot; class=&quot;medium_text&quot;&gt;&lt;span title=&quot;&quot;&gt;Objetos grandes (lo_ *) agora possuem controles de acesso, como os demais objetos do banco de dados. É mais um fator positivo para a utilização de LOBs em geral.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;&lt;span&gt;16/05/2010&lt;/span&gt; - O utilitário pg_ctl agora tem uma opçao initdb. Esta opção inicializa um servidor postgres. Mais informações &lt;a href=&quot;http://pgdocptbr.sourceforge.net/pg82/app-initdb.html&quot;&gt;aqui&lt;/a&gt;.  &lt;/p&gt;&lt;p class=&quot;western&quot;&gt;&lt;span&gt;09/05/2010&lt;/span&gt; - &lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span title=&quot;&quot;&gt;Você pode criar &lt;/span&gt;&lt;/span&gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span title=&quot;&quot;&gt;triggers &lt;/span&gt;&lt;/span&gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span title=&quot;&quot;&gt;por coluna, ou seja, que são disparads  somente na modificação das colunas especificadas. Recurso utilíssimo!!!&lt;/span&gt;&lt;span title=&quot;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;&lt;span id=&quot;result_box&quot; class=&quot;long_text&quot;&gt;&lt;span title=&quot;&quot;&gt;A sintaxe, como descrita no SQL: 2008, é: CREATE TRIGGER trigger_name (BEFORE | AFTER) UPDATE OF col1 [,] ... ON col2 coln tablename FOR EACH ROW trigger_function PROCESSO EXECUTE ();&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;&lt;span&gt;02/05/2010&lt;/span&gt; - &lt;span id=&quot;result_box&quot; class=&quot;medium_text&quot;&gt;&lt;span title=&quot;&quot;&gt;Agora você pode chamar funções com parâmetros nomeados, por exemplo, &lt;/span&gt;&lt;span title=&quot;&quot;&gt;parameter_bar foo ('valor' AS parameter_foo, o valor 'outro' AS).&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;&lt;span id=&quot;result_box&quot; class=&quot;medium_text&quot;&gt;&lt;span title=&quot;&quot;&gt;Recurso muito prático se você lembra o nome dos os parâmetros, mas não a ordem em que estão na declaração da função.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;&lt;span&gt;25/04/2010&lt;/span&gt; - &lt;span id=&quot;result_box&quot; class=&quot;short_text&quot;&gt;&lt;span title=&quot;&quot;&gt;Funções podem agora ter valores padrão para parâmetros. Ótima e simples idéia!!!&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;&lt;span&gt;18/04/2010&lt;/span&gt; - &lt;span id=&quot;result_box&quot; class=&quot;short_text&quot;&gt;&lt;span title=&quot;&quot;&gt;GUCs agora são reguláveis por função e por banco de dados.  &lt;/span&gt;&lt;span title=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;&lt;span id=&quot;result_box&quot; class=&quot;short_text&quot;&gt;&lt;span title=&quot;&quot;&gt;Você sabe o que é GUC? &lt;/span&gt;&lt;/span&gt;&lt;span id=&quot;main&quot;&gt;&lt;span id=&quot;search&quot;&gt;&lt;span&gt;Global User Configuration&lt;/span&gt; (&lt;em&gt;GUC&lt;/em&gt;) são configurações de servidor do arquivo postgresql.conf. &lt;/span&gt;&lt;/span&gt;Poder definir parâmetros de servidor para cada função é ter mais flexibilidade. Mas a forma como isso será implementado não parece clara ainda.&lt;span id=&quot;main&quot;&gt;&lt;span id=&quot;search&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;&lt;span&gt;11/04/2010&lt;/span&gt; - &quot;You can now GRANT and REVOKE on objects schema-wide in a single command&quot;.&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;Mais recursos para configurar permissões de acesso, desta vez afetando todo o esquema do banco com apenas um comando. Faltam mais detalhes.&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;&lt;span&gt;04/04/2010&lt;/span&gt; - Existe agora um comando chamado ALTER DEFAULT PRIVILEGES, o qual permite o ajuste de privilégios que serão aplicados a objetos a serem criados no futuro.&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;É uma opção boa para préconfigurar os objetos do banco de dados utilzando grant e revoke para tabelas, sequências e funções.&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;h2&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;01/04/2010&lt;/span&gt; - &quot;Distributed map-reduce functions in Erlang&quot;. Desconsiderem todo anúncio da equipe do Postgres feito no primeiro de abril!!! &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/h2&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-6432437458249996705?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-05-31T08:35:44+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-3854620452805847879">
	<title>Claudio Bezerra Leopoldino: PostgreSQL 9.0: Quais são as novidades? A visão das &quot;funcionalidades da semana&quot; - Parte 1!!!</title>
	<link>http://postgresqlbr.blogspot.com/2010/03/postgresql-90-quais-sao-as-novidades.html</link>
	<content:encoded>&lt;!--   @page { margin: 2cm }   P { margin-bottom: 0.21cm }  --&gt;    &lt;p class=&quot;western&quot;&gt;O PostgreSQL está em sua quarta versão alfa, e começam a aparecer indicações das novas funcionalidades e alterações que foram introduzidas. O informe semanal &quot;PostgreSQL Weekly News&quot;, organizado por David Fetter apresenta uma seção chamada &quot;Feature of the Week&quot;, ou funcionalidade da semana, descrevendo uma alteração em desenvolvimento. Os informes originais podem ser consultados &lt;a href=&quot;http://www.postgresql.org/community/weeklynews/&quot;&gt;aqui&lt;/a&gt;. &lt;/p&gt; &lt;p class=&quot;western&quot;&gt;Abaixo listo as últimas funcionalidades citadas, agregando algum comentário quando pertinente:&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;&lt;span&gt;28/03/2010&lt;/span&gt; - Implementação do conceito de blocos anônimos de código (&lt;span&gt;anonymous code blocks&lt;/span&gt;) através do comando DO nas linguagens PL/pgsql, PL/Perl, e PL/LOLCODE.&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;Estes blocos compreendem comandos que podem ser executados em um bloco de código sem um nome, utilizando as poderosas linguagens procedurais do PostgreSQL. Desta forma podem ser executados blocos de código sem que se precise criar funções dentro do banco. Parece uma ótima forma de se criar scripts.&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;O exemplo abaixo eu peguei &lt;a href=&quot;http://developer.postgresql.org/pgdocs/postgres/sql-do.html&quot;&gt;aqui&lt;/a&gt;:&lt;/p&gt;&lt;pre class=&quot;PROGRAMLISTING&quot;&gt;DO $$DECLARE r record;&lt;br /&gt;BEGIN&lt;br /&gt;  FOR r IN SELECT table_schema, table_name FROM information_schema.tables&lt;br /&gt;           WHERE table_type = 'VIEW' AND table_schema = 'public'&lt;br /&gt;  LOOP&lt;br /&gt;      EXECUTE 'GRANT ALL ON ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ' TO webuser';&lt;br /&gt;  END LOOP;&lt;br /&gt;END$$;&lt;/pre&gt;&lt;p class=&quot;western&quot;&gt;&lt;span&gt;21/03/2010&lt;/span&gt; - Campos do tipo Hstore não tem mais o limite de 64kB para o limite de chaves e suportam árvore B e classes de operadores hash, permitindo GROUP BY, DISTINCT, etc.&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;Obs: Você sabe por acaso o que é HSTORE? Eu também não sabia, mas é um módulo que implementa um tipo de dados chamado HSTORE que agrega ao mesmo tempo uma chave e um valor, ambos strings. Este novo tipo de dado é útil para uma série de cenários. Mais informações podem ser obtidas &lt;a href=&quot;http://developer.postgresql.org/pgdocs/postgres/hstore.html&quot;&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;&lt;span&gt;14/03/2010&lt;/span&gt; - Em PL/pgsql, o &lt;a href=&quot;http://www.postgresql.org/docs/8.4/static/plpgsql-cursors.html&quot;&gt;comando MOVE&lt;/a&gt; agora funciona de forma compreensível com  Cursores.&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;Obs: Não deu para entender o problema que havia antes, mas este comando reposiciona o cursor sem recuperar dados (&lt;span class=&quot;LITERAL&quot;&gt;NEXT&lt;/span&gt;&lt;span&gt;,      &lt;/span&gt;&lt;span class=&quot;LITERAL&quot;&gt;PRIOR&lt;/span&gt;&lt;span&gt;,      &lt;/span&gt;&lt;span class=&quot;LITERAL&quot;&gt;FIRST&lt;/span&gt;&lt;span&gt;,      &lt;/span&gt;&lt;span class=&quot;LITERAL&quot;&gt;LAST&lt;/span&gt;&lt;span&gt;,      &lt;/span&gt;&lt;span class=&quot;LITERAL&quot;&gt;ABSOLUTE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span class=&quot;REPLACEABLE&quot;&gt;count&lt;/span&gt;&lt;span&gt;,      &lt;/span&gt;&lt;span class=&quot;LITERAL&quot;&gt;RELATIVE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span class=&quot;REPLACEABLE&quot;&gt;count&lt;/span&gt;&lt;span&gt;,      &lt;/span&gt;&lt;span class=&quot;LITERAL&quot;&gt;FORWARD&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;ou      &lt;span class=&quot;LITERAL&quot;&gt;BACKWARD&lt;/span&gt;).&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;&lt;span&gt;07/03/2010&lt;/span&gt; - A saída do EXPLAIN pode ser formatada como XML, JSON, YAML e o mecanismo de análise está muito mais simples. O formato tradicional de texto ainda é o formato padrão.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;Obs: Os novos formatos permitem a definição de relatórios e ferramentas de análise dos resultados do comando Explain, facilitando a otimização de consultas.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;28/02/2010&lt;/span&gt; - A suíte pgbench agora é multi-threaded, o que lhe permite tirar partido de múltiplos núcleos de CPU.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;Obs: O pgbench é um utilitário que faz o benchmark de desempenho do servidor. Pode ser utilizada para testes de estresse, carga e performance. O uso de múltiplas threads faz com que os resultados sejam mais confiáveis e obtidos em menor tempo.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;21/02/2010&lt;/span&gt; - Agora você pode controlar o comportamento de valores distintos para cada coluna com ALTER TABLE ALTER COLUMN ... ... SET (parâmetro = valor ,...) onde parâmetro pode ser uma das n_distinct e n_distinct_inherited. Valores positivos são assumidos como sendo o número de valores distintos aceitos, 0 diz que o planejador da consulta deve utilizar os resultados do comando ANALYZE, e os números negativos (que devem estar entre -1 e 0) fazem com que o planejador estime o número de valores distintos como o número de linhas multiplicado pelo valor absoluto do número.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;Obs: Funcionalidade de performance, para consultas específicas.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;14/02/2010&lt;/span&gt; - Violações de restrição de unicidade de valor agora geram mensagens de erro mais detalhadas.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;Obs: Agora fica mais fácil encontrar a causa de exceções de valores repetidos e como resolvê-las.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;31/01/2010 &lt;/span&gt;- A checagem de constraints de não repetição de valores pode agora ser adiada até a hora do commit.  &lt;/p&gt; &lt;p class=&quot;western&quot;&gt;Obs: Funcionalidade de performance, para consultas específicas.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;24/01/2010&lt;/span&gt; - A sintaxe DROP IF EXISTS agora trabalha em colunas e restrições.  &lt;/p&gt; &lt;p class=&quot;western&quot;&gt;Obs: Sintaxe interessante para os desenvolvedores de ferramentas de banco de dados.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;17/01/2010 &lt;/span&gt;- O Vacuum full foi alterado para gerar novos arquivos para tabelas e índices por padrão. Esta implementação é baseada no antigo comando CLUSTER e mais eficiente e efetiva. A funcionalidade antiga do VACUUM FULL ainda pode ser acessada através do comando VACUUM FULL INPLACE, mas será incompatível com o Hot Standby.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;Obs: O Vacuum Full Implace só parece ser vantajoso para sistemas com pouco espaço em disco. A nova Implementação promete ganho de tempo nas manutenções de banco.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;10/01/2010&lt;/span&gt; - Agora você pode armazenar em log o estado de consultas SQL, erros, etc, usando &quot;%e&quot; na sua log_line_prefix.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;03/01/2010 &lt;/span&gt;- No psql o uso de &quot;\d&quot; agora mostra quantas tabelas herdadas uma tabela-mãe tem, e &quot;\d+&quot; lista os nomes das tabelas herdadas.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;Obs: Alteração de pouco impacto para quem não utiliza recursos objeto-relacionais.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;27/12/2009&lt;/span&gt; - Hot Standby. Após 1,5 anos de desenvolvimento, você pode finalmente executar consultas somente leitura PITR contra os escravos. Graças ao Simon Riggs, Heikki Linnakangas, qualquer muitos outros esforços incessantes. &lt;/p&gt; &lt;p class=&quot;western&quot;&gt;Obs: O melhor uso de hardware promete ganho de desempenho e redução de custos para grandes sistemas escaláveis e resistentes a falhas. Esta é uma das funcionalidaes que merecerá bastante atenção dos DBAs.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;20/12/2009 &lt;/span&gt;- Cláusulas WHEN sobre Triggers. Na versão 8.5 Alpha3 você será capaz de criar triggers com uma cláusula WHEN para que as mesmas executem apenas se os valores ou condições específicas ocorrerem. Graças Itagaki Takahiro e a equipe da NTT. &lt;/p&gt; &lt;p class=&quot;western&quot;&gt;Obs: Esta alteração permite triggers mais específicas com menos validações internas, possivelmente impactando positivamente seu desempenho.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;13/12/2009 &lt;/span&gt;- Constraints de exclusão (por Jeff Davis) permitem que você especifique como únicos &quot;dados&quot; que abranjam um intervalo, como uma área geométrica, um período de tempo, ou um array.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;Obs: Função importante para quem trabalha com lógicas de negócios no banco de dados.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;Abaixo, a redação oficial da coluna:&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;07/03/2010 &lt;/span&gt;- EXPLAIN output can be formatted as XML, JSON, and YAML, making machine parsing much simpler. The traditional text format is still the default format.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;28/02/2010 &lt;/span&gt;- The pgbench suite is now multi-threaded, allowing you to take advantage of multiple CPU cores.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;21/02/2010&lt;/span&gt; - You can now control the behavior of distinct values per column using ALTER TABLE...ALTER COLUMN...SET (parameter=value,...) where parameter can be one of n_distinct and n_distinct_inherited. Positive numbers are assumed to be the number of distinct values, 0 tells the planner to use the results from ANALYZE, and negative numbers (which should be between -1 and 0, cause the planner to estimate the number of distinct values as the estimated number of rows multiplied by the absolute value of the number.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;14/02/2010 &lt;/span&gt;- Uniqueness violations now raise more detailed error messages.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;31/01/2010&lt;/span&gt; - Uniqueness constraints can now be deferred until commit time.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;24/01/2010 &lt;/span&gt;- The DROP IF EXISTS syntax now works on columns and constraints.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;17/01/2010&lt;/span&gt; - VACUUM FULL has been changed to now generate all-new files for the vacuumed table and indexes. This is based on the old CLUSTER command, and is both more efficient and more effective. The old functionality of VACUUM FULL can still be accessed via VACUUM FULL INPLACE, but will be incompatible with Hot Standby.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;10/01/2010 &lt;/span&gt;- You can now log SQL state for queries, errors, etc., using %e in your log_line_prefix.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;03/01/2010 &lt;/span&gt;- In psql, \d now shows how many inherited tables a parent has, and \d+ lists them.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;27/12/2009 &lt;/span&gt;- Hot Standby. After 1.5 years of development, you can at last run read-only queries against PITR slaves. Thanks to Simon Riggs, Heikki Linnakangas, any many others for unceasing efforts.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;20/12/2009 &lt;/span&gt;- WHEN clauses on Triggers. In 8.5Alpha3, you will be able to create triggers with a WHEN clause so that they will only execute if specific values or conditions occur. Thanks Itagaki Takahiro and the NTT team.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;13/12/2009&lt;/span&gt; - Exclusion Constraints (by Jeff Davis) allow you to specify as &quot;unique&quot; data which covers a range, such as a geometric area, a period of time, or an array.&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;O que acharam destas novas funcionalidades?&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;Elas impactarão o seu trabalho atual?&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-3854620452805847879?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-05-31T08:32:49+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-9054633505063867483">
	<title>Claudio Bezerra Leopoldino: Participe do PgDay de Brasília 2010!</title>
	<link>http://postgresqlbr.blogspot.com/2010/05/participe-do-pgday-de-brasilia-2010.html</link>
	<content:encoded>&lt;a href=&quot;http://1.bp.blogspot.com/_r2Eq58DmzTc/S__T48dgwmI/AAAAAAAAAME/QZy3GhEuo40/s1600/imgem+pgday.jpg&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_r2Eq58DmzTc/S__T48dgwmI/AAAAAAAAAME/QZy3GhEuo40/s320/imgem+pgday.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5476328647161856610&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Faltam poucos dias para o PgDay em Brasília! Informe-se e se inscreva &lt;a href=&quot;http://www.postgresql.org.br/eventos/pgday/df/2010&quot;&gt;aqui&lt;/a&gt;.&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-9054633505063867483?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-05-28T11:34:03+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="http://www.midstorm.org/~telles/?p=627">
	<title>Fabio Telles: PGDay Brasília em 31/05</title>
	<link>http://www.midstorm.org/~telles/2010/05/11/pgday-brasilia-em-3105/</link>
	<content:encoded>&lt;h2&gt;Atualização&lt;/h2&gt;
&lt;h3&gt;Se inscreva no &lt;a href=&quot;http://www.postgresql.org.br/eventos/pgday/df/2010&quot;&gt;site do evento&lt;/a&gt;, vagas limitadas.&lt;/h3&gt;
&lt;p&gt;Sim,  este ano tem Copa do mundo, eleição, e claro PGCon e PGDay.&lt;/p&gt;
&lt;p&gt;O blog podia estar parado, mas a comunidade brasileira de PostgreSQL continua a todo o vapor. Já tivemos o &lt;a href=&quot;http://www.postgresql.org.br/eventos/2010/pgday/ba&quot;&gt;PGDay BA&lt;/a&gt;, 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.&lt;/p&gt;
&lt;h2&gt;Palestrantes confirmados:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.timbira.com/&quot;&gt;Euler Taveira&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fábio Telles&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.midstorm.org/~fike/weblog/&quot;&gt;Fernando Ike&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://postgreslogia.wordpress.com/&quot;&gt;Leonardo César&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://joaocosme.wordpress.com/&quot;&gt;João Cosme&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Nesse eu vou!&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;Me ajude a escolher o tema para a palestra no PGDay DF!&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;http://www.slideshare.net/telles&quot;&gt;palestra minha no Slide Share&lt;/a&gt;, 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!&lt;/p&gt;
&lt;div id=&quot;_mcePaste&quot;&gt;http://postgreslogia.wordpress.com/&lt;/div&gt;</content:encoded>
	<dc:date>2010-05-11T15:11:36+00:00</dc:date>
</item>
<item rdf:about="http://www.midstorm.org/~telles/?p=618">
	<title>Fabio Telles: Dump não é backup!</title>
	<link>http://www.midstorm.org/~telles/2010/05/06/dump-nao-e-backup/</link>
	<content:encoded>&lt;h2&gt;Não, não é. Pode chorar, pode xingar mas não é.&lt;/h2&gt;
&lt;p&gt;No ano passado fiz uma pesquisa aqui no blog sobre as &lt;a href=&quot;http://www.midstorm.org/~telles/2009/06/25/pesquisa-sobre-backup-em-postgresql/&quot;&gt;rotinas de backup utilizados no PostgreSQL&lt;/a&gt;. O resultado foi que a maioria esmagadora só utiliza o &lt;em&gt;&lt;strong&gt;&lt;a href=&quot;http://www.postgresql.org/docs/9.0/static/app-pgdump.html&quot;&gt;pg_dump&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;. Veja, eu não tenho absolutamente nada contra o &lt;span&gt;&lt;em&gt;pg_dump&lt;/em&gt;&lt;/span&gt;&lt;span&gt;. Mas antes de me explicar, vamos pensar&amp;#8230; &lt;strong&gt;PARA QUE SERVEM OS BACKUPS MESMO?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Simples não?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NÃO.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Não tem nada de simples nisso. Vamos avaliar melhor o caso. Primeiro temos que entender o que é &amp;#8220;tudo dê errado&amp;#8221;. Podem acontecer várias coisas diferentes&amp;#8230;&lt;/p&gt;
&lt;h3&gt;Quanto tudo dá errado!&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Desastre natural&lt;/strong&gt;&lt;br /&gt;
O CPD pegou fogo, inundou (eu já vi acontecer), teve um terremoto, jogaram um avião no prédio&amp;#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?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Falha de hardware (exceto os discos)&lt;/strong&gt;&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Falha nos discos&lt;/strong&gt;&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
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&amp;#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.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ok, o hardware está ótimo, mas o SO egripou do nada&lt;/strong&gt;&lt;br /&gt;
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;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;O sistema de arquivos corrompeu&lt;/strong&gt;&lt;br /&gt;
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&amp;#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 &amp;#8220;ajuste de desempenho&amp;#8221; no ser sistema de arquivos então&amp;#8230;&lt;br /&gt;
Bom, se a ferramenta do seu sistema de arquivos não conseguir restaurar os dados em 100%, já viu&amp;#8230; Formate tudo e volte o backup;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Um DBA ou sysadmin desastrado foi lá e apagou/alterou/moveu um arquivo do banco de dados&lt;/strong&gt;&lt;br /&gt;
Vai corromper na hora. Volte o seu backup&amp;#8230; e dê uma bronca ou PNB&lt;strong&gt;*&lt;/strong&gt; 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?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;O banco de dados corrompeu por uma falha do próprio banco de dados&lt;/strong&gt;&lt;br /&gt;
É 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 &amp;#8220;workarround&amp;#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;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Um usuário desastrado apagou uma tabela ou outro objeto do banco de dados&lt;/strong&gt;&lt;br /&gt;
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&amp;#8230; bom, sobra a bronca ou PNB&lt;strong&gt;*&lt;/strong&gt;. 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.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Outros usos para o backup&lt;/h3&gt;
&lt;p&gt;Você pode utilizar o seu backup para outras coisas além de recuperação de desastres:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;O tal do SLA&lt;/h3&gt;
&lt;p&gt;Antes de definir a sua estratégia de backup, você deve determinar qual o seu SLA ou &lt;a href=&quot;http://pt.wikipedia.org/wiki/Acordo_de_N%C3%ADvel_de_Servi%C3%A7o&quot;&gt;Service Level Agreement&lt;/a&gt;. 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 &amp;#8220;five nines&amp;#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:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quanto tempo você pode ficar com o banco de dados &lt;strong&gt;indisponível&lt;/strong&gt; em caso de parada &lt;strong&gt;não prevista&lt;/strong&gt; em &lt;strong&gt;horário comercial&lt;/strong&gt;? E se for em &lt;strong&gt;horário não comercial&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;Quanto tempo você pode ficar com o banco de dados &lt;strong&gt;indisponível&lt;/strong&gt; em caso de uma parada &lt;strong&gt;prevista&lt;/strong&gt; (uma manutenção) em &lt;strong&gt;horário comercial&lt;/strong&gt;? E se for em &lt;strong&gt;horário não comercial&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;Respire fundo&amp;#8230;. você pode &lt;strong&gt;perder dados&lt;/strong&gt; relativos a quanto &lt;strong&gt;tempo de operação&lt;/strong&gt;?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h3&gt;Tempo necessário para restaurar um backup em caso de desastre.&lt;/h3&gt;
&lt;p&gt;Este é um ponto crítico que poucos sabem responder. Então vejamos como calcular isso. O tempo vai variar muito conforme alguns fatores:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Você já testou uma restauração completa do backup?&lt;/li&gt;
&lt;li&gt;Você tem equipe disponível no local para fazer a restauração?&lt;/li&gt;
&lt;li&gt;Você tem equipe disponível para fazer a restauração fora do horário comercial?&lt;/li&gt;
&lt;li&gt;As pessoas disponíveis para fazer a restauração fora do horário comercial tem acesso remoto ao servidor?&lt;/li&gt;
&lt;li&gt;Você tem o procedimento de restauração documentado em papel?&lt;/li&gt;
&lt;li&gt;A documentação está atualizada?&lt;/li&gt;
&lt;li&gt;Você tem hardware de contingência disponível?&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;Vamos ao cálculo:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;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&amp;#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;&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;Quanto tempo leva para restaurar o backup (alguns chamam isso de &amp;#8220;restore&amp;#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)&lt;/li&gt;
&lt;li&gt;Quanto tempo leva para fazer a recuperação do banco de dados a partir do backup (alguns chamam isso de &amp;#8220;recover&amp;#8221;). Aqui a sua estratégia de backup vai fazer toda a diferença. Vamos falar mais longamente sobre este aspecto logo mais.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;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 &lt;em&gt;&lt;strong&gt;pg_dump&lt;/strong&gt;&lt;/em&gt; parece fazer sentido.&lt;/p&gt;
&lt;p&gt;Agora se você precisar subir um novo servidor dedicado para abrigar uma base com 100GB, então você terá problemas com o &lt;strong&gt;&lt;em&gt;pg_dump&lt;/em&gt;&lt;/strong&gt;. 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.&lt;/p&gt;
&lt;h3&gt;Como evitar a perda de dados?&lt;/h3&gt;
&lt;p&gt;Outro problema com o &lt;strong&gt;pg_dump&lt;/strong&gt;. 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 &lt;a href=&quot;http://pt.wikipedia.org/wiki/OLTP&quot;&gt;OLTP&lt;/a&gt;. É 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?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Replicação: existem N ferramentas de replicação. Algumas síncronas, outras assíncronas. Existe uma excelente documentação sobre os principais &lt;a href=&quot;http://www.postgresql.org/docs/9.0/static/different-replication-solutions.html&quot;&gt;tipos de replicação&lt;/a&gt; para PostgreSQL. De qualquer forma, podemos categoriza-las em:
&lt;ul&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;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).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h3&gt;Backup físico, o primeiro passo.&lt;/h3&gt;
&lt;p&gt;É 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 &lt;a href=&quot;http://www.postgresql.org/docs/9.0/static/warm-standby.html&quot;&gt;como criar um standby&lt;/a&gt;. Você também precisa aprender com perfeição a fazer backups físicos e saber restaurá-los de forma adequada.&lt;/p&gt;
&lt;p&gt;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 &amp;#8220;&lt;a href=&quot;http://www.postgresql.org/docs/9.0/static/continuous-archiving.html#BACKUP-ARCHIVING-WAL&quot;&gt;archive_command&lt;/a&gt;&amp;#8220;. Não vou me alongar sobre o assunto aqui. Leia a documentação atentamente sobre isso.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h3&gt;Então eu não preciso mais do &lt;em&gt;pg_dump&lt;/em&gt;?&lt;/h3&gt;
&lt;p&gt;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 &lt;strong&gt;&lt;em&gt;pg_dump&lt;/em&gt;&lt;/strong&gt;, você pode migrar os dados para outra versão do PostgreSQL ou até mesmo para outro SGDB.&lt;/p&gt;
&lt;p&gt;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 &lt;strong&gt;&lt;em&gt;pg_dump&lt;/em&gt;&lt;/strong&gt; oferece todo o tipo de flexibilidade para restaurar apenas uma parte dos dados.&lt;/p&gt;
&lt;h3&gt;Estratégia de backup.&lt;/h3&gt;
&lt;p&gt;Ok, o &lt;strong&gt;&lt;em&gt;pg_dump&lt;/em&gt;&lt;/strong&gt; não é &lt;em&gt;&lt;strong&gt;&lt;span&gt;O&lt;/span&gt;&lt;/strong&gt;&lt;/em&gt; backup, ele é &lt;span&gt;&lt;em&gt;&lt;strong&gt;parte&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt; de uma estratégia de backup. Você precisa do &lt;strong&gt;&lt;em&gt;pg_dump&lt;/em&gt;&lt;/strong&gt; 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á &lt;strong&gt;a cópia do WAL é feita automaticamente, mas deve ser copiada para fora do servidor também, se não imediatamente no comando do &amp;#8220;archive_command&amp;#8221;, faça isso em intervalos curtos para evitar a perda de dados em caso de desastres.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Conclusões :&lt;/h3&gt;
&lt;pre&gt;(atualizado em 17/05/2010)&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Backup não é simples, mesmo em bancos de dados pequenos;&lt;/li&gt;
&lt;li&gt;Backup exige estudo, dedicação e disciplina;&lt;/li&gt;
&lt;li&gt;Backup não deve ser responsabilidade de estagiários, deve ser criado e verificado diariamente por pessoas qualificadas e de confiança;&lt;/li&gt;
&lt;li&gt;Backup é caro: os recursos de hardware são caros e os recursos humanos também;&lt;/li&gt;
&lt;li&gt;Nunca diga que você está 100% seguro, você não está;&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Atualização:&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;Em tempo, existe uma nova ferramenta para backup incremental chamada &lt;a href=&quot;http://code.google.com/p/pg-rman/&quot;&gt;pg_rman&lt;/a&gt;. 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?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;OBS&lt;/strong&gt;: 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.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;*&lt;/strong&gt; PNB = Pé Na Bunda, demissão mesmo.&lt;/p&gt;</content:encoded>
	<dc:date>2010-05-06T17:01:21+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-4517630244732002940">
	<title>Claudio Bezerra Leopoldino: Erros de &quot;Permission Denied na Criação de Tablespaces&quot;</title>
	<link>http://postgresqlbr.blogspot.com/2010/04/erros-de-permission-denied-na-criacao.html</link>
	<content:encoded>Em muitos casos os problemas que mais incomodam são os mais simples. No caso do Postgresql, um problema bem comum mas que causa estresse é a falta de permissão para a criação de tablespaces.&lt;br /&gt;&lt;br /&gt;Tablespaces permitem um maior controle sobre a localização física dos dados, metadados, índices e estatísticas do banco. Informações sobre criação de tables paces podem ser obtidas aqui. O postgresql utiliza o sistema de arquivos fornecido pelo sistema operacional, o que muitas vezes gera problemas de autorização de acesso que impedem a sua criação, o clássico erro &quot;permission denied&quot;.&lt;br /&gt;&lt;br /&gt;Neste post vamos mostrar como definir corretamente as permissões para criação de tablespaces em ambiente windows.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Passo 1: &lt;/span&gt;Criar pasta do tablespace.&lt;br /&gt;Crie uma pasta sem arquivos dentro para a definição do novo tablespace.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Passo 2: &lt;/span&gt;Abrir tela de configuração&lt;br /&gt;Entre no Windows Explorer e acione o menu &quot;Ferramentas/ Opções de Pasta...&quot;.&lt;br /&gt;O sistema apresentará uma tela com as opções de pasta.&lt;br /&gt;Desmarque a opção &quot;Usar Compartilhamento Simples de Arquivo (Recomendado)&quot; e confirme a operação. Isso habilitará a aba de segurança das pastas, que serrá utilizada para definir as permissões para a criação do tablespace.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Passo 3: &lt;/span&gt;Configuração da segurança da pasta&lt;br /&gt;Na pasta criada para o tablespace, clique com o botão direito e acione o menu “Propriedades”. &lt;p class=&quot;western&quot;&gt;Em seguida, clique na aba segurança.  &lt;/p&gt; &lt;p class=&quot;western&quot;&gt;Na tela apresentada, clique em “Adicionar”. Aparecerá uma tela como a que aparece abaixo. Defina o local (no botão &quot;Locais&quot;) e, no nome do objeto, coloque o usuário do banco que vai ter acesso ao tablespace. Confirme com o botão “OK”.&lt;/p&gt;  &lt;p class=&quot;western&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_r2Eq58DmzTc/S7M7I-Y6Y3I/AAAAAAAAAL0/df-Xdoi_OUE/s1600/tablespace+4.PNG&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_r2Eq58DmzTc/S7M7I-Y6Y3I/AAAAAAAAAL0/df-Xdoi_OUE/s320/tablespace+4.PNG&quot; name=&quot;figura1&quot; vspace=&quot;5&quot; width=&quot;320&quot; border=&quot;0&quot; height=&quot;175&quot; /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;Na aba de segurança aparecerá o novo usuário. Marque a opção de “Controle Total”, o que fará com que o banco de dados possa efetivamente acessar o tablespace.&lt;/p&gt;  &lt;p class=&quot;western&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_r2Eq58DmzTc/S7M7BwzUUJI/AAAAAAAAALs/Z_2Lu4ILEZk/s1600/tablespace+3.PNG&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_r2Eq58DmzTc/S7M7BwzUUJI/AAAAAAAAALs/Z_2Lu4ILEZk/s320/tablespace+3.PNG&quot; name=&quot;figura2&quot; vspace=&quot;5&quot; width=&quot;244&quot; border=&quot;0&quot; height=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;br /&gt;&lt;/p&gt; &lt;p class=&quot;western&quot;&gt;&lt;span&gt;Passo 4&lt;/span&gt;: Criação do tablespace.  &lt;/p&gt; &lt;p class=&quot;western&quot;&gt;Utilize para isso o comando &lt;a href=&quot;http://postgresqlbr.blogspot.com/2007/06/o-comando-create-tablespace.html&quot;&gt;CREATE TABLESPACE&lt;/a&gt;.&lt;/p&gt;  &lt;p class=&quot;western&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;western&quot;&gt;Este post teve contribuição de Jeferson Gallina.&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-4517630244732002940?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-04-20T08:39:12+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-2060078548179400823">
	<title>Claudio Bezerra Leopoldino: Versão Alfa do PostgreSQL 9.0 Lançada!</title>
	<link>http://postgresqlbr.blogspot.com/2010/03/versao-alfa-do-postgresql-lancada.html</link>
	<content:encoded>A versão de desenvolvimento ALFA do PostgreSQL 9.0 está disponível para downloads e testes.&lt;br /&gt;&lt;br /&gt;Na verdade, é a quarta versão alfa, uma vez que três versões anteriores haviam sido lançadas como sendo para o PostgreSQL 8.5.&lt;br /&gt;&lt;br /&gt;Faça o download &lt;a href=&quot;http://www.postgresql.org/developer/alpha&quot;&gt;aqui&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Veja as notas de lançamento com os avanços desta versão &lt;a href=&quot;http://developer.postgresql.org/pgdocs/postgres/release-9-0.html&quot;&gt;aqui&lt;/a&gt;!&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-2060078548179400823?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-03-01T13:57:17+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-7565748323186331194">
	<title>Claudio Bezerra Leopoldino: Select - Cláusulas FOR UPDATE, FOR SHARE e NOWAIT</title>
	<link>http://postgresqlbr.blogspot.com/2010/02/select-clausulas-for-update-for-share-e.html</link>
	<content:encoded>Influenciar nos mecanismos de lock do banco de dados nem sempre é um processo intuitivo. No entanto pode ser bastante útil para garantia da confiabilidade de resultados e para ajustes de desempenho.&lt;br /&gt;&lt;br /&gt;O PostgreSQL oferece algumas cláusulas relativamente simples que permitem este tipo de controle no caso de consultas no banco de dados: FOR UPDATE, FOR SHARE e NOWAIT.&lt;br /&gt;&lt;br /&gt;O uso de consultas com a cláusula FOR UPDATE obriga o servidor a bloquear os registros consultados para leitura e escrita durante otranscorrer da transação. Desta forma se garante que o que está sendo visualizado corresponde ao que está armazenado no banco de dados. A cláusula FOR SHARE efetua bloqueio de escrita, mas permite que leituras sejam feitas aos dados consultados.&lt;br /&gt;&lt;br /&gt;Ambas as cláusulas bloqueiam apenas os dados que são recuperados na consulta.&lt;br /&gt;&lt;br /&gt;A cláusula NOWAIT pode ser utilizada tanto com FOR UPDATE quanto com FOR SHARE, e força a ocorrência de erro caso o servidor tenha de esperar par a a obtenção de bloqueios nos dados consultados. Desta forma, sacrifica-se a transação para que não se perca tempo na fila de espera por bloqueios.&lt;br /&gt;&lt;br /&gt;As cláusulas UNION, INTERSECT e EXCEPT até o momento não são compatíveis com FOR UPDATE e FOR SHARE.&lt;br /&gt;&lt;br /&gt;Para os próximos exemplo, serão utilizadas as seguintes tabelas:&lt;br /&gt;&lt;br /&gt;CREATE TABLE pai (codpai integer,nomepai varchar(50));&lt;br /&gt;CREATE TABLE filho (codpai integer,codfilho integer,nomefilho varchar(50));&lt;br /&gt;&lt;br /&gt;Exemplos:&lt;br /&gt;&lt;br /&gt;1 - Sintaxe simples com FOR UPDATE.&lt;br /&gt;&lt;br /&gt;SELECT * FROM pai FOR UPDATE;&lt;br /&gt;&lt;br /&gt;2 - Sintaxe simples com FOR SHARE.&lt;br /&gt;&lt;br /&gt;EXPLAIN SELECT * FROM pai FOR SHARE;&lt;br /&gt;&lt;br /&gt;3 - Uso de FOR SHARE em consulta com junção.&lt;br /&gt;&lt;br /&gt;SELECT *&lt;br /&gt;FROM pai p, filho f&lt;br /&gt;WHERE p.codpai = f.codpai&lt;br /&gt;FOR SHARE;&lt;br /&gt;&lt;br /&gt;4 - Uso de NOWAIT.&lt;br /&gt;&lt;br /&gt;SELECT * FROM pai FOR UPDATE NOWAIT;&lt;br /&gt;&lt;br /&gt;5 - Uso de FOR UPDATE em transação de atualização.&lt;br /&gt;&lt;br /&gt;BEGIN;&lt;br /&gt;SELECT * FROM pai FOR UPDATE;&lt;br /&gt;UPDATE pai SET nomepai = nomepai  ' Father';&lt;br /&gt;COMMIT;&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-7565748323186331194?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-02-19T10:10:44+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-747592200994127647">
	<title>Claudio Bezerra Leopoldino: Algoritmos: Caixa de Banco Simulado no PostgreSQL</title>
	<link>http://postgresqlbr.blogspot.com/2010/01/algoritmos-caixa-de-banco-simulado-no.html</link>
	<content:encoded>Ao retirar dinheiro de um caixa eletrônico, solicitamos uma quantia e o caixa decide quantas notas de cada tipo disponível nós receberemos. O algoritmo que faz esta decisão é relativamente simples.&lt;br /&gt;&lt;br /&gt;Abaixo coloco uma função que recebe uma solicitação de dinheiro e calcula quantas notas de 100, 50, 10, 5 e 1 serão retornadas ao solicitante:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;--Retornando notas do caixa eletrônico&lt;/span&gt;&lt;br /&gt;&lt;span&gt;--Notas de 1, 5, 10, 50 e 100&lt;/span&gt;&lt;br /&gt;&lt;span&gt;CREATE OR REPLACE FUNCTION caixa_elet (pvalor integer) RETURNS text AS $$&lt;/span&gt;&lt;br /&gt;&lt;span&gt;DECLARE&lt;/span&gt;&lt;br /&gt;&lt;span&gt;sretorno text;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;qnota1 integer;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;qnota5 integer;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;qnota10 integer;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;qnota50 integer;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;qnota100 integer;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;span&gt;sretorno := '';&lt;/span&gt;&lt;br /&gt;&lt;span&gt;qnota100 := (pvalor - (pvalor % 100))/100;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;qnota50 := ((pvalor % 100) - (pvalor % 50)) /50;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;qnota10 := ((pvalor % 50) - (pvalor % 10)) /10;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;qnota5 := ((pvalor % 10) - (pvalor % 5)) /5;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;qnota1 := ((pvalor % 5) - (pvalor % 1)) /1;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;sretorno := 'Total: ' || pvalor || chr(10) || 'Notas de 100:' || qnota100 || chr(10) || 'Notas de 50:' || qnota50 || chr(10) || 'Notas de 10:' || qnota10 || chr(10) || 'Notas de 5:' || qnota5 || chr(10) ||  'Notas de 1:' || qnota1;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;RETURN sretorno; -- Retorna as linhas&lt;/span&gt;&lt;br /&gt;&lt;span&gt;END;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;$$ LANGUAGE plpgsql;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Chamada da função e resultado apresentado:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;SELECT caixa_elet(1078);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&quot;Total: 1078&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Notas de 100:10&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Notas de 50:1&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Notas de 10:2&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Notas de 5:1&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Notas de 1:3&quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;SELECT caixa_elet(2189);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&quot;Total: 2189&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Notas de 100:21&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Notas de 50:1&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Notas de 10:3&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Notas de 5:1&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Notas de 1:4&quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Agora, gostaria de fazer algumas perguntas para os programadores de plantão:&lt;br /&gt;- O código da função caixa_elet está correto?&lt;br /&gt;- O código da função caixa_elet pode ser melhorado de que formas?&lt;br /&gt;- Que alterações seriam necessárias para acrescentar notas de 20?&lt;br /&gt;&lt;br /&gt;Aguardo suas contribuições nos comentários!&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-747592200994127647?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-01-27T16:51:44+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-4149995007218900666">
	<title>Claudio Bezerra Leopoldino: 8.5 sai de cena antes de ser lançado: nova versão do Postgres será a 9.0!</title>
	<link>http://postgresqlbr.blogspot.com/2010/01/85-sai-de-cena-antes-de-ser-lancado.html</link>
	<content:encoded>O anúncio não é oficial, mas a versão 8.5 terá sua numeração alterada para 9.0. Os testes e o desenvolvimento continuam normalmente.&lt;br /&gt;&lt;br /&gt;As razões envolvendo a mudança compreendem o aumento das funcionalidades da nova versão e da abrangência das alterações no código, o grande tempo desde a primeira versão 8.* e um benefício em termos de marketing, pela insinuação de uma mudança mais substancial refletida na alteração de 8.4 para 9.0.&lt;br /&gt;&lt;br /&gt;Você concorda com essa atitude?&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-4149995007218900666?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-01-21T14:43:43+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-711107884524485564">
	<title>Claudio Bezerra Leopoldino: Onde esse elefante está? O que nos diz o google insights sobre o ano de 2009?</title>
	<link>http://postgresqlbr.blogspot.com/2009/12/onde-esse-elefante-esta-o-que-nos-diz-o.html</link>
	<content:encoded>As pesquisas na internet dizem muito sobre a aceitação de produtos, serviços, candidatos a cargos eletivos e sobre o uso de programas e sistemas. Com o PostgreSQL não é diferente. Fiz uma breve pesquisa sobre o ano de 2009 no &lt;a href=&quot;http://www.google.com/insights/search/#q=postgresql&amp;amp;date=today%2012-m&amp;amp;cmpt=q&quot;&gt;google insights&lt;/a&gt; e os resultados compartilho neste post. O levantamento do ano passado está &lt;a href=&quot;http://postgresqlbr.blogspot.com/2008/11/postgresql-tendncias-pelo-mundo-e-no.html&quot;&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As imagens capturadas e os dados foram todos coletados dia 18/12/2009.&lt;br /&gt;&lt;br /&gt;- O ano de 2009 foi relativamente estável. Houve uma queda nas buscas com a festas de fim de ano e um aumento nas pesquisas durante o lançamento da nova versão 8.4, em meados de abril. A figura 1 mostra a evolução destas buscas no ano.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_r2Eq58DmzTc/SyvSPBW7ZNI/AAAAAAAAAKs/41jt0LQLDHo/s1600-h/postgresql+2009+buscas.png&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_r2Eq58DmzTc/SyvSPBW7ZNI/AAAAAAAAAKs/41jt0LQLDHo/s320/postgresql+2009+buscas.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5416654132347626706&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Considerando os últimos 4 anos, houve uma diminuição nas buscas. No entanto isto não significa necessariamente perda de espaço, podendo indicar também uma maior disseminação do conhecimento sobre o banco, que reduz a necessidade de pesquisas na rede.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_r2Eq58DmzTc/SyvSOrLC0vI/AAAAAAAAAKc/TJ6rAiHfmMA/s1600-h/postgres+busca+4+anos+2009.png&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_r2Eq58DmzTc/SyvSOrLC0vI/AAAAAAAAAKc/TJ6rAiHfmMA/s320/postgres+busca+4+anos+2009.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5416654126392201970&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;- No mundo, Japão e Rússia crescem no ranking relativo de buscas e recuperam as primeiras posições perdidas em 2008 para Cuba e China.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_r2Eq58DmzTc/SyvXTJ0pa5I/AAAAAAAAAK8/fVN1nrbuH58/s1600-h/postgresql+busca+mundo+2009.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_r2Eq58DmzTc/SyvXTJ0pa5I/AAAAAAAAAK8/fVN1nrbuH58/s320/postgresql+busca+mundo+2009.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5416659700897377170&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;- No mundo ganha destaque a busca &quot;PostgreSQL MySQL&quot;, indício de que o PostgreSQL não é considerado uma alternativa tão natural ao Oracle ou ao Sql Server, mas uma boa opção em relação ao MySQL (Esta é apenas uma suposição que carece de mais comprovação!).&lt;br /&gt;&lt;br /&gt;- No Brasil destaco as buscas &quot;PostgreSQL Windows&quot; e  &quot;PostgreSQL Linux&quot;. A pontuação destas buscas mostra que a compatibilidae com vários sistemas operacionais é um importante fator para os projetos de software nacionais.&lt;br /&gt;&lt;br /&gt;- O Brasil continua em uma posição intermediária. Na América do Sul o destaque fica para a Bolívia, que ocupa a quarta posição entre os 10 maiores índices de busca pelo PostgreSQL no Google.&lt;br /&gt;&lt;br /&gt;- Dentre os estados brasileiros, Distrito Federal e Ceará ocupam as duas primeiras posições. Santa Catarina, Paraná e Rio Grande do Sul estão nas três posições subsequentes, o que mostra a força do PostgreSQL na Região Sul.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_r2Eq58DmzTc/SyvSPbPD91I/AAAAAAAAAK0/C37MfF2zwqk/s1600-h/2009+buscas+Brasil+postgres.png&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_r2Eq58DmzTc/SyvSPbPD91I/AAAAAAAAAK0/C37MfF2zwqk/s320/2009+buscas+Brasil+postgres.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5416654139293955922&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Não recomendo que estes dados sejam utilizados para a tomada de decisões. São informações retrospectivas sujeitas a erros estatísticos! 2009 está consumado. Agora é trabalhar pelo 2010!&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-711107884524485564?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-12-18T17:27:27+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-7256794289707503902">
	<title>Claudio Bezerra Leopoldino: GreenSQL: O Rinoceronte Amigo do Elefante!</title>
	<link>http://postgresqlbr.blogspot.com/2009/12/greensql-o-rinoceronte-amigo-do.html</link>
	<content:encoded>Segurança nunca é demais e cautela e caldo de galinha não fazem mal a ninguém! No caso do PostgreSQL não é diferente, e qualquer atualização de segurança é sempre recomendada.&lt;br /&gt;&lt;br /&gt;O &lt;a href=&quot;http://www.greensql.net/&quot;&gt;GreenSQL&lt;/a&gt; é um firewall de código aberto que visa proteger bases de dados de ataques tipo &quot;SQL Injection&quot;, verificando os comandos submetidos ao banco, restringindo comandos de administrador para criação e destruição de tabelas e outros objetos e impedindo a submissão de códigos maliciosos. Seu símbolo é o do Rinoceronte.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_r2Eq58DmzTc/SypvsjrL7pI/AAAAAAAAAKM/Ox1lkJXUDmw/s1600-h/logogreensql.gif&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_r2Eq58DmzTc/SypvsjrL7pI/AAAAAAAAAKM/Ox1lkJXUDmw/s320/logogreensql.gif&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5416264313147747986&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A versão mais recente agregou o suporte ao PostgreSQL ao do MySQL já existente. Espera-se que o Rinoceronte possa agir como guarda costas do elefante a partir deste lançamento! Abaixo, uma imagem da arquitetura do GreenSQL.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_r2Eq58DmzTc/SypvsuP7S6I/AAAAAAAAAKU/zJlOjKGvKBs/s1600-h/greensql-architecture.jpg&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_r2Eq58DmzTc/SypvsuP7S6I/AAAAAAAAAKU/zJlOjKGvKBs/s320/greensql-architecture.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5416264315986201506&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;A licença é GPL. Teste e me diga o que achou!&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-7256794289707503902?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-12-17T16:11:36+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-6518681864817607221">
	<title>Claudio Bezerra Leopoldino: Enquete aponta que PostgreSQL Crescerá com a Compra do MySQL</title>
	<link>http://postgresqlbr.blogspot.com/2009/12/enquete-aponta-que-postgresql-crescera.html</link>
	<content:encoded>A &lt;a href=&quot;http://postgresqlbr.blogspot.com/2009/04/oracle-comprou-sun-e-consequentemente-o.html&quot;&gt;compra recente da Sun pela Oracle&lt;/a&gt;, incluindo o banco MySQL começa a trazer mudanças no mercado. Segundo enquete realizada pelo &quot;The 451 Group&quot;, há uma tendência de redução do market share do MySQL em detrimento do PostgreSQL e do novo banco de dados &lt;a href=&quot;http://planetmariadb.org/&quot;&gt;MariaDB&lt;/a&gt;, que seria um fork livre do MySQL com um processamento de consultas novo e bastante promissor.&lt;br /&gt;&lt;br /&gt;Este autor acha que há espaço para todos, e acredita no crescimento do PostgreSQL independentemente do apresentado pelas demais alternativas. Aproveita para lembrar que enquetes revelam apenas intenções, e que o mercado pode tomar outra direção.&lt;br /&gt;&lt;br /&gt;O que você acha? O que tem acontecido na sua empresa?&lt;br /&gt;&lt;br /&gt;O artigo original pode ser obtido &lt;a href=&quot;http://blogs.the451group.com/opensource/2009/12/04/451-group-survey-highlights-user-concerns-over-oracles-proposed-ownership-of-mysql/&quot;&gt;aqui&lt;/a&gt;.&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-6518681864817607221?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-12-10T10:50:55+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-578610887231886448.post-4024197949835529667">
	<title>Rodrigo Hjort: PostgreSQL monitoring on ZABBIX</title>
	<link>http://agajorte.blogspot.com/2009/12/postgresql-monitoring-on-zabbix.html</link>
	<content:encoded>&lt;br /&gt;&lt;br /&gt;I've recently started to get to know &lt;b&gt;ZABBIX&lt;/b&gt; [1] a little deeper, especially regarding &lt;b&gt;PostgreSQL&lt;/b&gt; database servers monitoring. At first sight I thought it an incredible monitoring and notification system as it fulfills most of the requirements I wondered to have in &lt;b&gt;Cedrus&lt;/b&gt; [2].&lt;br /&gt;&lt;br /&gt;After setting up some basic OS-related items to be monitored, I was searching for PostgreSQL specific configurations and then I found a wiki [3] on &lt;b&gt;ZABBIX UserParameters&lt;/b&gt;. It is indeed very simple! You just need to create SQL statements and then invoke them with psql. If successful, you could append the corresponding lines into ZABBIX agent configuration file and restart it. Then, in the front-end application, what is left to do is to properly set these PostgreSQL parameters to a given host.&lt;br /&gt;&lt;br /&gt;I've created some additional parameters I always use in PostgreSQL instances in order to monitor the server health. In this case, I previously created a user called &quot;zabbix&quot; and a database with same name on PostgreSQL.&lt;br /&gt;&lt;br /&gt;Here are the included lines on &lt;b&gt;/etc/zabbix/zabbix_agentd.conf&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush:bash&quot;&gt;&lt;br /&gt;# PostgreSQL custom parameters&lt;br /&gt;&lt;br /&gt;# instance version&lt;br /&gt;UserParameter=pgsql.version,psql -U zabbix zabbix -Atc 'select version()'&lt;br /&gt;&lt;br /&gt;# instance databases summary&lt;br /&gt;UserParameter=pgsql.db.summary,psql -c &quot;select a.datname, pg_size_pretty(pg_database_size(a.datid)) as size, cast(blks_hit/(blks_read+blks_hit+0.000001)*100.0 as numeric(5,2)) as cache, cast(xact_commit/(xact_rollback+xact_commit+0.000001)*100.0 as numeric(5,2)) as success from pg_stat_database a order by a.datname&quot;&lt;br /&gt;&lt;br /&gt;# total databases size&lt;br /&gt;UserParameter=pgsql.db.totalsize,psql -Atc &quot;select sum(pg_database_size(datid)) as total_size from pg_stat_database&quot;&lt;br /&gt;&lt;br /&gt;# specific database size (in bytes)&lt;br /&gt;UserParameter=pgsql.db.size[*],psql -Atc &quot;select pg_database_size('$1') as size&quot;&lt;br /&gt;&lt;br /&gt;# database cache hit ratio (percentage)&lt;br /&gt;UserParameter=pgsql.db.cache[*],psql -Atc &quot;select cast(blks_hit/(blks_read+blks_hit+0.000001)*100.0 as numeric(5,2)) as cache from pg_stat_database where datname = '$1'&quot;&lt;br /&gt;&lt;br /&gt;# database success rate (percentage)&lt;br /&gt;UserParameter=pgsql.db.success[*],psql -Atc &quot;select cast(xact_commit/(xact_rollback+xact_commit+0.000001)*100.0 as numeric(5,2)) as success from pg_stat_database where datname = '$1'&quot;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;After restarting &lt;b&gt;ZABBIX Agent&lt;/b&gt;, you can check whether the added parameters are valid by issuing &lt;b&gt;zabbix_get&lt;/b&gt; command in a shell. For instance, to &lt;b&gt;query PostgreSQL instance version&lt;/b&gt;, type this:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush:bash&quot;&gt;&lt;br /&gt;$ zabbix_get -s localhost -k pgsql.version&lt;br /&gt;PostgreSQL 8.3.3 on i486-pc-linux-gnu, compiled by GCC cc (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This other script returns an &lt;b&gt;overview of existing databases in the instance&lt;/b&gt;, highlighting their names, size in disk, cache hit ratio and percentage of successful transactions:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush:bash&quot;&gt;&lt;br /&gt;$ zabbix_get -s localhost -k pgsql.db.summary&lt;br /&gt;   datname   |  size   | cache | success &lt;br /&gt;-------------+---------+-------+---------&lt;br /&gt; auction5    | 4400 kB |  0.00 |    0.00&lt;br /&gt; auditing    | 4512 kB |  0.00 |    0.00&lt;br /&gt; escola      | 4656 kB |  0.00 |    0.00&lt;br /&gt; postgres    | 4223 kB | 99.81 |  100.00&lt;br /&gt; rodrigo     | 4144 kB |  0.00 |    0.00&lt;br /&gt; template0   | 4144 kB |  0.00 |    0.00&lt;br /&gt; template1   | 4144 kB |  0.00 |    0.00&lt;br /&gt; zabbix      | 10 MB   | 99.99 |  100.00&lt;br /&gt; zahle       | 86 MB   |  0.00 |    0.00&lt;br /&gt;(9 registros)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In order to measure &lt;b&gt;total space in disk occupied by the entire instance&lt;/b&gt;, this script should be used:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush:bash&quot;&gt;&lt;br /&gt;$ zabbix_get -s localhost -k pgsql.db.totalsize&lt;br /&gt;1507326452&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;On the other hand, to retrieve the &lt;b&gt;space (in bytes) occupied by a single database&lt;/b&gt;, you just need to specify its name in the parameter key, as exemplified below:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush:bash&quot;&gt;&lt;br /&gt;$ zabbix_get -s localhost -k pgsql.db.size[auction5] &lt;br /&gt;4505604&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Likewise, to recover &lt;b&gt;cache hit ratio (in percentage) of a single database&lt;/b&gt;, use this key:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush:bash&quot;&gt;&lt;br /&gt;$ zabbix_get -s localhost -k pgsql.db.cache[zabbix]&lt;br /&gt;99.99&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The &lt;b&gt;percentage of successful transactions&lt;/b&gt; in relation to all attempts is given by this parameter:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush:bash&quot;&gt;&lt;br /&gt;$ zabbix_get -s localhost -k pgsql.db.success[postgres]&lt;br /&gt;100.00&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;After testing these parameters, it is time to set them up onto &lt;b&gt;ZABBIX Frontend&lt;/b&gt; as illustrated below:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_YGilJHLjrrI/Sx5Mqmi5CZI/AAAAAAAAAKo/6YJZPgImYpE/s1600-h/zabbix-pgsql.png&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_YGilJHLjrrI/Sx5Mqmi5CZI/AAAAAAAAAKo/6YJZPgImYpE/s320/zabbix-pgsql.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5412848096931023250&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It is very interesting to further add some &lt;b&gt;traps&lt;/b&gt; and &lt;b&gt;actions&lt;/b&gt; based on the configured items. For example, to send an email to the DBA every time a given database grows up faster than expected or whether its cache ratio starts to lower significantly.&lt;br /&gt;&lt;br /&gt;At Joe Uhl's blog there is a post [4] concerning using ZABBIX to monitor PostgreSQL TPS (Transactions per Second). It is an interesting source as it explains how to configure deltas and graphs in ZABBIX.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;References:&lt;/h2&gt;&lt;br /&gt;[1] &lt;a href=&quot;http://www.zabbix.com/&quot; target=&quot;nova&quot;&gt;ZABBIX Monitoring Solution&lt;/a&gt;&lt;br /&gt;[2] &lt;a href=&quot;http://sourceforge.net/projects/cedrus/&quot; target=&quot;nova&quot;&gt;Cedrus: PostgreSQL Manager&lt;/a&gt;&lt;br /&gt;[3] &lt;a href=&quot;http://www.zabbix.com/wiki/howto/monitor/db/postgresql&quot; target=&quot;nova&quot;&gt;ZABBIX Wiki - PostgreSQL UserParameters&lt;/a&gt;&lt;br /&gt;[4] &lt;a href=&quot;http://blog.gtuhl.com/2009/02/21/monitoring-postgresql-tps-with-zabbix/&quot; target=&quot;nova&quot;&gt;Monitoring PostgreSQL TPS with Zabbix&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/578610887231886448-4024197949835529667?l=agajorte.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-12-08T06:12:39+00:00</dc:date>
	<dc:creator>Rodrigo HJORT</dc:creator>
</item>
<item rdf:about="http://www.postgresql.org.br/81 at http://www.postgresql.org.br">
	<title>PostgreSQL Brasil: Agenda Livre</title>
	<link>http://www.postgresql.org.br/node/81</link>
	<content:encoded>A agenda livre é um lugar para compartilhar com todos os eventos de tecnologia e software livre que acontecem no país. 

Se você quiser participar ou compartilhar esta agenda, basta colocar o código abaixo no seu portal. 
&lt;table width=&quot;100%&quot; border=&quot;1&quot;&gt;
&lt;tr&gt;&lt;td&gt;
&lt;code&gt;&lt;font size=&quot;3&quot;&gt;&amp;lt;iframe src='//www.google.com/calendar/embed?height=600&amp;amp;wkst=1&amp;amp;bgcolor=%23ffffff&amp;amp;src=c1lp1q1iv9s2p6of0pi5g38gqg%40group.calendar.google.com&amp;amp;color=%2328754E&amp;amp;ctz=America%2FSao_Paulo' style=' border-width:0 ' width='100%' height='600' frameborder='0' scrolling='no'&amp;gt;&amp;lt;/iframe&amp;gt;
&lt;/font&gt;&lt;/code&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;p&gt;&lt;a href=&quot;http://www.postgresql.org.br/node/81&quot; target=&quot;_blank&quot;&gt;leia mais&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2009-12-07T11:19:58+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-4126903476543280188">
	<title>Claudio Bezerra Leopoldino: O Comando Table</title>
	<link>http://postgresqlbr.blogspot.com/2009/11/o-comando-table.html</link>
	<content:encoded>O comando TABLE é muito pouco conhecido entre os usuário do Postgres, no entanto isto não chega a ser um problema. É um comando que funciona mais como uma curiosidade do que como uma funcionalidade real. Sua função principal é economizar digitação de consultas relativas a todos os dados de uma tabela.&lt;br /&gt;&lt;br /&gt;Consultas com a sintaxe abaixo, por  exemplo:&lt;br /&gt;&lt;br /&gt;SELECT * FROM tabela;&lt;br /&gt;&lt;br /&gt;Poderiam ser simplificadas para:&lt;br /&gt;&lt;br /&gt;TABLE tabela;&lt;br /&gt;&lt;br /&gt;O ganho é apenas de tempo de digitação ou de simplificação. O plano de execução é o mesmo.&lt;br /&gt;&lt;br /&gt;O comando TABLE pode ser utilizado no lugar de &quot;SELECT * FROM&quot; de diversas maneiras diferentes:&lt;br /&gt;&lt;br /&gt;Exemplo 1:&lt;br /&gt;&lt;br /&gt;TABLE ADDRESS; --Recupera todas as colunas e linhas da tabela ADDRESS&lt;br /&gt;&lt;br /&gt;Exemplo 2:&lt;br /&gt;&lt;br /&gt;TABLE ADDRESS ORDER BY postal_code; --Classifica e recupera todas as colunas e linhas da tabela ADDRESS&lt;br /&gt;&lt;br /&gt;Exemplo 3:&lt;br /&gt;&lt;br /&gt;TABLE ADDRESS ORDER BY postal_code DESC; --Classifica de modo decrescente e recupera todas as colunas e linhas da tabela ADDRESS&lt;br /&gt;&lt;br /&gt;Exemplo 4:&lt;br /&gt;&lt;br /&gt;SELECT * FROM ADDRESS&lt;br /&gt;UNION ALL&lt;br /&gt;TABLE ADDRESS; --Uso de TABLE com UNION&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-4126903476543280188?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-11-27T09:52:51+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-578610887231886448.post-3585110683176028852">
	<title>Rodrigo Hjort: Auction5 sample web application released</title>
	<link>http://agajorte.blogspot.com/2009/11/auction5-sample-web-application.html</link>
	<content:encoded>&lt;br /&gt;&lt;br /&gt;I'm very proud to announce that &lt;b&gt;Auction5&lt;/b&gt;, a sample web application built under &lt;b&gt;Demoiselle Framework&lt;/b&gt; [1] has just been released to the public. Its complete documentation including source codes retrieval and deployment instructions can be found here: [2].&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Auction5&lt;/b&gt; is a MVC-structured application that exemplifies an &lt;i&gt;online auction system&lt;/i&gt; using Demoiselle Framework and related technologies. Its main goal is to provide a complete transactional application based on &lt;b&gt;JavaServer Faces&lt;/b&gt; (&lt;b&gt;JSF 1.2&lt;/b&gt; [3]) and &lt;b&gt;Java Persistence API&lt;/b&gt; (&lt;b&gt;JPA 1.0&lt;/b&gt; [4]) specifications.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_YGilJHLjrrI/SvYjFzBZ-NI/AAAAAAAAAJg/DEQNZj7jBDg/s1600-h/auction5-home-r.png&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_YGilJHLjrrI/SvYjFzBZ-NI/AAAAAAAAAJg/DEQNZj7jBDg/s400/auction5-home-r.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5401543385579911378&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Moreover, the sample assembles several top computing technologies such as Java EE, Maven, JBoss Application Server, Apache Tomcat, and PostgreSQL DBMS.&lt;br /&gt;&lt;br /&gt;Please send me your comments and or suggestions.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;References:&lt;/b&gt;&lt;br /&gt;[1] &lt;a title=&quot;Demoiselle Framework&quot; href=&quot;http://sourceforge.net/projects/demoiselle/&quot; target=&quot;_blank&quot;&gt;Demoiselle Framework&lt;/a&gt;&lt;br /&gt;[2] &lt;a title=&quot;Auction5 Application Sample&quot; href=&quot;http://demoiselle-samp.sourceforge.net/auction5/&quot; target=&quot;_blank&quot;&gt;Auction5 Application Sample&lt;/a&gt;&lt;br /&gt;[3] &lt;a title=&quot;JavaServer Faces&quot; href=&quot;http://jcp.org/en/jsr/detail?id=127&quot; target=&quot;_blank&quot;&gt;JavaServer Faces 1.2&lt;/a&gt;&lt;br /&gt;[4] &lt;a title=&quot;Java Persistence API&quot; href=&quot;http://jcp.org/en/jsr/detail?id=220&quot; target=&quot;_blank&quot;&gt;Java Persistence API 1.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/578610887231886448-3585110683176028852?l=agajorte.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-11-07T18:52:02+00:00</dc:date>
	<dc:creator>Rodrigo HJORT</dc:creator>
</item>
<item rdf:about="http://www.postgresql.org.br/79 at http://www.postgresql.org.br">
	<title>PostgreSQL Brasil: Replicação de dados com java</title>
	<link>http://www.postgresql.org.br/node/79</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;mailto:sandro.ci02@gmail.com?subject=Contato%20Pagina%20Postgresql%20BR&quot;&gt;Alessandro Silva&lt;/a&gt; nos enviou um link interessante que pode ser &amp;uacute;til para quem quer ter exemplos de replica&amp;ccedil;&amp;atilde;o de dados.&lt;/p&gt;
&lt;p&gt;O link aponta para um v&amp;iacute;deo demonstrando como realizar uma replica&amp;ccedil;&amp;atilde;o bem simples de dados entre duas bases:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=Z7_WCDLVh_o&quot;&gt;http://www.youtube.com/watch?v=Z7_WCDLVh_o&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Outros links sobre replica&amp;ccedil;&amp;atilde;o:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.postgresql.org.br/node/79&quot; target=&quot;_blank&quot;&gt;leia mais&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2009-11-04T00:06:55+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-6838506.post-2934289907567286120">
	<title>Leandro Guimarães Faria Corcete DUTRA: Convite Google Wave</title>
	<link>http://dutras.blogspot.com/2009/10/convite-google-wave.html</link>
	<content:encoded>&lt;p&gt;&lt;span class=&quot;post-body-first-line&quot;&gt;&lt;span class=&quot;post-body-first-letter&quot;&gt;T&lt;/span&gt;enho doze convites&lt;/span&gt; do &lt;a href=&quot;https://wave.google.com/&quot;&gt;Google Wave&lt;/a&gt; para diſtribuir — o que é engraçado, porque até hoje não o uſei de fato.&lt;/p&gt;

&lt;p&gt;Prioridade para comunidades de que participo, como &lt;a href=&quot;http://postgresql.org.br./&quot;&gt;PoſtgreSQL&lt;/a&gt;, &lt;a href=&quot;http://debian.org./&quot;&gt;Debian&lt;/a&gt;, &lt;a href=&quot;http://gnu.org./&quot;&gt;Projeto GNU&lt;/a&gt;, &lt;a href=&quot;http://gutenberg.org./&quot;&gt;Gutenberg&lt;/a&gt;, &lt;a href=&quot;http://crosswire.org./&quot;&gt;Sociedade Bíblica Croßwire&lt;/a&gt;, &lt;a href=&quot;http://four-thirds.org./en/&quot;&gt;fotografia Quatro Terços&lt;/a&gt; e &lt;a href=&quot;http://biofos.com./&quot;&gt;Olympus Zuiko&lt;/a&gt;, &lt;a href=&quot;http://openraw.org./&quot;&gt;OpenRAW&lt;/a&gt; &amp;amp;c.&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6838506-2934289907567286120?l=dutras.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-10-31T22:50:09+00:00</dc:date>
	<dc:creator>DUTRA, Leandro Guimarães Faria Corcete</dc:creator>
</item>
<item rdf:about="http://www.postgresql.org.br/73 at http://www.postgresql.org.br">
	<title>PostgreSQL Brasil: PGCon Brasil 2009</title>
	<link>http://www.postgresql.org.br/node/73</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://pgcon.postgresql.org.br&quot;&gt; &lt;img width=&quot;432&quot; height=&quot;60&quot; border=&quot;0&quot; src=&quot;http://pgcon.postgresql.org.br/2009/img/pgcon2009_horizontal_small.gif&quot; alt=&quot;PGCon Brasil 2008&quot; /&gt; &lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2009-10-31T00:11:54+00:00</dc:date>
</item>
<item rdf:about="http://joaocosme.wordpress.com/?p=155">
	<title>João Cosme: HA em Postgresql = Warm Stand By + HeartBeat + HAPM</title>
	<link>http://joaocosme.wordpress.com/2009/10/30/ha-em-postgresql-warm-stand-by-heartbeat-hapm/</link>
	<content:encoded>&lt;h1&gt;Prefácio hehehe&lt;/h1&gt;
&lt;p&gt;Ja faz um bom tempo que eu gostaria de postar novamente, ando muito ocupado não sei se vocês sabem, mas estou no SERPRO em Porto Alegre agora envolvido não mais com o desenvolvimento em si do EXPRESSO  mas com a  a PRODUÇÃO!! Maravilha tudo o que eu queria&amp;#8230;.&lt;/p&gt;
&lt;p&gt;AAAAA como é bom o cheiro dos servidores, aquele lindo terminal e finalmente Postgresql novamente &amp;#8230;. O bom filho a casa retorna! Finalmente retornei com postgresql , não com a mesma exclusividade mas já é uma ótima!!&lt;/p&gt;
&lt;h1&gt;Mandando o SALVE!!&lt;/h1&gt;
&lt;p&gt;Galera gostaria de mandar um salve pros amigos que reencontrei no PGCON2009 e para os novas amizades que foram conquistadas , depois posto sobre o PGCON!!&lt;/p&gt;
&lt;p&gt;Um salve pro meu brother Euler&amp;#8230; esse já é irmão!!!&lt;/p&gt;
&lt;p&gt;Um salve pro Minerin &amp;#8220;Cara de coveiro&amp;#8221;&amp;#8230;&lt;/p&gt;
&lt;p&gt;Um salve pro Léo Lindo e para a Cris&amp;#8230;.&lt;/p&gt;
&lt;p&gt;Um salve pro Jovem &amp;#8220;J&amp;#8221;&lt;/p&gt;
&lt;p&gt;Um salve pro Telles&lt;/p&gt;
&lt;p&gt;Um salve pro Zé do Cleyssom de BSB (Agora convertido em Postgresql &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif&quot; alt=&quot;:P&quot; class=&quot;wp-smiley&quot; /&gt;  )&lt;/p&gt;
&lt;p&gt;Um salve pro Diogo Biazus&lt;/p&gt;
&lt;p&gt;Um salve pro pequeno inseto (Ele sabe quem é)&lt;/p&gt;
&lt;p&gt;Um salve pro Roberto Mello (Cara 10 &amp;#8230;.. PRAZER do Ca!@#$$# conhecer esse cabra)&lt;/p&gt;
&lt;p&gt;Um salve pro Francisco , (Outro cara 10 &amp;#8230;. que conheci tb em mais um evento)&lt;/p&gt;
&lt;p&gt;Um salve pro GUTO de BSB&amp;#8230;.&lt;/p&gt;
&lt;p&gt;Um salve pro &amp;#8220;Rolon Boy&amp;#8221; (Esse tb sabe quem é hehhe)&lt;/p&gt;
&lt;p&gt;Um salve pro DUTRA.&lt;/p&gt;
&lt;p&gt;Um salve pra Marisa (Valeu Marisaaaaaaaa&amp;#8230;&amp;#8230;&amp;#8230;.. )&lt;/p&gt;
&lt;p&gt;Um salve pro &amp;#8230;. pra&amp;#8230;&amp;#8230;&lt;/p&gt;
&lt;p&gt;Um salve pro  Galera do MEC ( O Rodrigão e o Marcelo)&lt;/p&gt;
&lt;p&gt;Um salve pros brothers da CELEPAR( esqueci o nome foi mal)&lt;/p&gt;
&lt;p&gt;Um salve pro Emanuel &amp;#8220;EL Aprendiz&amp;#8221; da Argentina !&lt;/p&gt;
&lt;p&gt;Um salve pra geral que prestigiou o evento e a minha palestra!!&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img class=&quot;aligncenter size-medium wp-image-184&quot; title=&quot;2009-09-14-153739&quot; src=&quot;http://joaocosme.files.wordpress.com/2009/10/2009-09-14-153739.jpg?w=300&amp;#038;h=225&quot; alt=&quot;2009-09-14-153739&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;Voltando ao Post&amp;#8230;.&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;Vejo muita gente comentando sobre Replicação , alta disponibilidade, balanceamento de carga. Em vários eventos de SL são debatidos esses temas e como está na semana do PGCON 3 edição , acho que seria uma boa soltar um post de interesse de muita gente, pois é galera ai vai &amp;#8230;. Vamos ganhar um dinheirinho com consultoria ai&amp;#8230;.&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;Cenário&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;Não irei entrar em conceitos como&lt;strong&gt; PITR, WAL&lt;/strong&gt; , pá e bola&amp;#8230;. Então são pré-requisitos para um bom entendimento!! Não que não consiga implementar sem esses conceitos mas véio de boa&amp;#8230;. Estuda!! &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif&quot; alt=&quot;:P&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;h1&gt;Um servidor primário e um servidor secundário.&lt;/h1&gt;
&lt;p&gt;O  servidor  primário recebe as requisições  feliz da vida  e tranquilo , o servidor secundário fica em Stand-By em modo seca pimenteiro = on hehehe , pois ele não pode ser não pode ser acessado. Em um determinado momento meu servidor primário deixa de prover o serviço e&amp;#8230;..&lt;/p&gt;
&lt;p&gt;Meu servidor em Stand-by cheio de moral e doido para mostrar serviço, assume a posição  do servidor primário de maneira  &amp;#8220;transparente&amp;#8221; ao usuário&amp;#8230; pois é &amp;#8230; nem tudo é perfeito e o afobado jovem em stand by pode deixar um dado ou outro de lado &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif&quot; alt=&quot;:P&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;Nessa brincadeira ai  já traçamos alguns conceitos importantes : &lt;strong&gt;Alta-disponibilidade , Replicação Síncrona e uma característica importante na implementação do stand-by (Não pode ser acessado nem para consulta)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-medium wp-image-156&quot; title=&quot;HA-PG&quot; src=&quot;http://joaocosme.files.wordpress.com/2009/10/ha-pg.jpg?w=312&amp;#038;h=171&quot; alt=&quot;HA-PG&quot; width=&quot;312&quot; height=&quot;171&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Para alcançar o objetivo iremos utilizar  como coadjuvantes os softwares&lt;strong&gt; HAPM&lt;/strong&gt; e o&lt;strong&gt; HeartBeat&lt;/strong&gt; que nos possibilitaram a Alta-disponibilidade do serviço.&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;Configurando o Ambiente!&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;Anota ai jovem&amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Postgresql-8.3&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;postgresql-contrib-8.3 &lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;heartbeat-2&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;nfs-kernel-server&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;hapm&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Vamos utilizar o&lt;strong&gt; Debian Lenny&lt;/strong&gt; como exemplo e instalar os pacotes acima nas duas máquinas:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;apt-get install postgresql-8.3 heartbeat-2 nfs-kernel-server hapm  postgresql-8.3-contrib&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --&gt;&lt;/p&gt;
&lt;p&gt;Uma vez instalados os pacotes nos dois servidores&lt;span&gt; criaremos um local para arquivar os segmentos &lt;strong&gt;&lt;em&gt;WAL&lt;/em&gt;&lt;/strong&gt;. É altamente recomentados gravar os segmentos&lt;strong&gt; &lt;/strong&gt;&lt;em&gt;&lt;strong&gt;WAL&lt;/strong&gt; &lt;/em&gt;remotamente do servidor primário, pois se o servidor primário cair , não teremos  acesso aos segmentos &lt;strong&gt;WAL&lt;/strong&gt;, o que comprometeria a replicação e consequentemente a disponibilidade do sistema.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt; Os arquivos  devem ter permissões de escrita e leitura para ambos os servidores. No exemplo que estamos demonstrando a técnica, criaremos um compartilhamento&lt;strong&gt; &lt;em&gt;NFS&lt;/em&gt;&lt;/strong&gt; no servidor Stand By e o servidor primário exportará os arquivos&lt;strong&gt; WAL(cansei de colocar o Wal em negrito)&lt;/strong&gt; para este determinado local. Tenha a certeza que o diretório pertença ao usuário postgres. Entendeu??&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --&gt;&lt;/p&gt;
&lt;p&gt;Criação do diretório na máquina slave  para arquivamento  no qual o usuário PostgreSQL pode escrever e ler:&lt;/p&gt;
&lt;p&gt;&lt;!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --&gt;&lt;/p&gt;
&lt;p&gt;Como usuário root:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;mkdir /psql-archive &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt; &lt;em&gt;chown postgres.postgres /pgsql-archive &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt; &lt;em&gt; echo &amp;#8220;/psql-archive IP_MASTER (rw,sync,no_subtree_check)&amp;#8221; &amp;gt;&amp;gt; /etc/exports &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt; &lt;em&gt;exportfs -a &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt; su postgres -c &amp;#8220;touch /psql-archive/mounted&amp;#8221; &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;&lt;br /&gt;
&lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;&lt;span&gt;O que os comandos acima fazem??&lt;/span&gt;&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;Criamos um diretório chamado &lt;strong&gt;/psql-archive&lt;/strong&gt; cujo o dono é o safadinho do usuário postgres e permitimos que a máquina &lt;/span&gt;&lt;span&gt;PRIMÁRIA&lt;/span&gt;&lt;strong&gt;&lt;span&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span&gt;possa montar o diretório&lt;/span&gt;&lt;strong&gt;&lt;span&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span&gt;remotamente podendo escrever e ler nele&amp;#8230; já ia esquecer ,também criamos de ante-mão um arquivo lá no diretório chamado &lt;strong&gt;mounted&lt;/strong&gt;&amp;#8230; (aí está a mágica!!)&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;Agora na máquina primária&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;&lt;!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;mkdir /psql-archive &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt; chown postgres.postgres /psql-archive &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt; mount IP_SLAVE:/psql-archive /psql-archive &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;&lt;br /&gt;
&lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;&lt;strong&gt;&lt;span&gt;O que os comandos acima fazem??&lt;/span&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Agora na máquina primária criamos um diretório chamado&lt;strong&gt; /psql-archive&lt;/strong&gt; cujo o dono  é o postgres montamos remotamente o diretório da máquina slave psql-archive no &lt;strong&gt;/psql-archive&lt;/strong&gt; do primário.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;&lt;span&gt;Ainda na máquina primária iremos ativar o recurso de WALs :&lt;/span&gt;&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;&lt;!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;no arquivo&lt;/em&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;strong&gt;/etc/postgresql/8.3/main/postgresql.conf &lt;/strong&gt;&lt;/span&gt;&lt;em&gt;alterar as seguintes linhas: &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt; &lt;span&gt;archive_mode = on &lt;/span&gt;&lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt; archive_command = &amp;#8220;test -f /psql_archive/mounted &amp;amp;&amp;amp; test ! -f /psql_archive/%f 		&amp;amp;&amp;amp; rsync -a %p /psql_archive/%f&amp;#8221;&lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Que lindo o archive_command!!! Fandásdigo como diria tiririca, confesso esse eu copiei  hehehhe mas eu sei o que ele faz &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Vamos por partes!!!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;arvhice command = (condicao 1) &amp;amp;&amp;amp; (condicao 2)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Condição 1 = teste -f /psql/mounted &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt; Lembra do comando&lt;strong&gt; touch /psql/mounted&lt;/strong&gt; no servidor seca pimenteiro, ops .. escravo?? O que ele faz é verificar se o arquivo &lt;strong&gt;mounted&lt;/strong&gt; existe, se ele existir significa que a partição remota está montada  &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;em&gt; &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Condição 2 = &lt;em&gt;test ! -f /psql_archive/%f 		&amp;amp;&amp;amp; rsync -a %p /psql_archive/%f &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Verifica se já existe o arquivo Wall no secundário , se não existir ele copia o Wal file para lá &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;o &amp;#8220;&amp;amp;&amp;amp;&amp;#8221;,  elementar meu caro as duas condições tem que serem válidas ou seja &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;(particao tem que estar montada ) e (nao deve existir o arquivo no diretorio la no escravo)&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;Reiniciar o serviço do PostgreSQL&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;strong&gt;&lt;em&gt;/etc/init.d/Postgresql-8.3 restart&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;A Partir deste momento meu caro parabéns, já está gerando arquivos Wals e o mais legal, lá no diretório do escravo&amp;#8230; nossa imagina o cabra ter que suportar ter que ser secundário e neguin escrevendo no diretório dele hehehh.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;Prova dos 9!&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;Vamos lá&amp;#8230; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Agora devemos fazer o backup básico do diretório &lt;strong&gt;$PGDATA&lt;/strong&gt;, sem a necessidade de parar o banco de dados , isso no servidor primário logicamente.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;psql  -U postgres &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;Bem vindo ao psql 8.3.3, o terminal iterativo do PostgreSQL. &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;Digite:  \copyright para mostrar termos de distribuição &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;\h para ajuda com comandos SQL &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;\? para ajuda com comandos do psql &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;\g ou terminar com ponto-e-vírgula para executar a consulta &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;\q para sair &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;postgres=# select pg_start_backup(&amp;#8216;meu_backup&amp;#8217;); &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;pg_start_backup &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;2/CE005F40 &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;(1 registro) &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;postgres=# \q &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;# su &amp;#8211; postgres &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;# cd /var/lib/Postgresql/8.3/ &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;$ tar -czf /psql-archive/base_backup.tar.gz * &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;tar: Removendo `/&amp;#8217; inicial dos nomes dos membros &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;tar: main/pg_xlog/0000000100000002000000CF: arquivo alterado enquanto estava sendo lido &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;&amp;#8230;.. &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;&amp;#8230;.. &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;&amp;#8230;.. &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Estamos gerando um backup a fisico do diretório de dados e colocando no diretório compartilhado &lt;strong&gt;/psql-archive&lt;/strong&gt; . Uma vez terminado o backup, conectar no banco de dados e efetuar o seguinte comando: &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;psql  -U postgres -h localhost &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;Bem vindo ao psql 8.3.3, o terminal iterativo do Postgresql. &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;Digite:  \copyright para mostrar termos de distribuição &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;\h para ajuda com comandos SQL &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;\? para ajuda com comandos do psql &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;\g ou terminar com ponto-e-vírgula para executar a consulta &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;\q para sair &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;conexão SSL (cifra: DHE-RSA-AES256-SHA, bits: 256) &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;postgres=# select pg_stop_backup(); &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;pg_stop_backup &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;- &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;2/D000BC0C &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;(1 registro) &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;postgres=# \q&lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;&lt;br /&gt;
&lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h1&gt;
&lt;p&gt;&lt;strong&gt;Na máquina 			secundária novamente &lt;/strong&gt;&lt;/p&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt; &lt;strong&gt;mv /var/lib/Postgresql/8.3/main /var/lib/Postgresql/8.3/main.old &lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Estamos renomeando o $PGDATA da máquina secundária para $PGDATA.old&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt; mv /psql-archive/base_backup.tar.gz  /var/lib/Postgresql/8.3 &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Copiando o backup do servidor primário para o diretório /&lt;strong&gt;var/lib/Postgresql;8.3&lt;/strong&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt; &lt;strong&gt;tar -xzvf /var/lib/Postgresql/8.3 &lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Mandando bala descompactando o danado&amp;#8230;&lt;em&gt;&lt;br /&gt;
&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt; &lt;strong&gt;cd /var/lib/Postgresql/8.3/main/ &lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Entrando no diretório $PGDATA novo do secundário&amp;#8230;&lt;em&gt;&lt;br /&gt;
&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt; &lt;strong&gt;rm -Rf ./pg_xlog/* &lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Removendo os arquivos do pg_xlog do primário&amp;#8230;. &lt;strong&gt;Cansei&amp;#8230;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Vamos vamos&amp;#8230;. Vamos !!!!!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt; &lt;/em&gt;&lt;span&gt;Criação do arquivo &lt;/span&gt;&lt;span&gt;&lt;strong&gt;recovery.conf&lt;/strong&gt;&lt;/span&gt;&lt;span&gt; na máquina para o modo contínuo de 				recovery dentro do $PGDATA ( /var/lib/Postgresql/8.3/main/) com a seguinte linha: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt; &lt;strong&gt;restore_command = &amp;#8216;&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;strong&gt;/usr/lib/postgresql/8.3/bin/&lt;span&gt;&lt;em&gt;pg_standby -d -l -r 3 -s 60 -t /psql_archive/trigger.done  /psql_archive 	%f %p %r 2&amp;gt;&amp;gt;/tmp/pg_standby.log&amp;#8217; &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Essa linha basicamente indica o Postgresql para continuar o &lt;em&gt;recovery&lt;/em&gt; até encontrar um arquivo chamado &lt;strong&gt;/psql-archive/trigger.done&lt;/strong&gt;, ou seja , quando o servidor primário cair, um arquivo trigger.done será criado e o procedimento da subida do servidor slave é iniciado.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;&lt;span&gt;Iniciando o servidor Stand by&lt;/span&gt;&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;&lt;!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;&lt;strong&gt;#  /etc/init.d/Postgresql-8.3 start &lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;* Starting Postgresql 8.3 database server &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;[ OK ] &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt; &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;# &lt;strong&gt;tail -f /tmp/pg_standby.log &lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;Keep archive history    : 000000000000000000000000 and later &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;running restore         : OK &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;Trigger file            : /psql-archive/trigger.done &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;Waiting for WAL file    : 000000020000000200000088 &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;WAL file path           : /psql-archive/000000020000000200000088 &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;Restoring to&amp;#8230;         : pg_xlog/RECOVERYXLOG &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;Sleep interval          : 60 seconds &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;Max wait interval       : 0 forever &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;Command for restore     : ln -s -f &amp;#8220;/psql-archive/000000020000000200000088&amp;#8243; &amp;#8220;pg_xlog/RECOVERYXLOG&amp;#8221; &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;Keep archive history    : 000000000000000000000000 and later &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Que lindo Que lindo &amp;#8230;. Vamos Vamos&amp;#8230;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt; &lt;/em&gt;&lt;span&gt;Criação do arquivo &lt;/span&gt;&lt;span&gt;&lt;strong&gt;recovery.conf&lt;/strong&gt;&lt;/span&gt;&lt;span&gt; na máquina para o modo contínuo de 				recovery dentro do $PGDATA ( /var/lib/Postgresql/8.3/main/) com a seguinte linha: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt; &lt;strong&gt;restore_command = &amp;#8216;pg_standby -d -l -r 3 -s 60 -t /psql_archive/trigger.done  /psql_archive 	%f %p %r 2&amp;gt;&amp;gt;/tmp/pg_standby.log&amp;#8217; &lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;span&gt;Essa linha basicamente indica o Postgresql para continuar o &lt;em&gt;recovery&lt;/em&gt; até encontrar um arquivo chamado &lt;strong&gt;/psql-archive/trigger.done&lt;/strong&gt;, ou seja , quando o servidor primário cair, um arquivo trigger.done será criado e o procedimento da subida do servidor slave é iniciado.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;#psql  -U postgres -h localhost &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;psql: FATAL:  o sistema de banco de dados está iniciando ou seja esta em restore continuo.&lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;????? Num intindi nada!!!???&lt;/p&gt;
&lt;p&gt;&lt;span&gt;O servidor está em &lt;em&gt;restore &lt;/em&gt;constante!!!! Não temos como acessar o servidor (WARM Stand by Falei isso lá em cimaaa nocomeço do Post)&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;
&lt;p&gt;&lt;strong&gt;Gerando arquivos 			Wals para serem replicados a partir do host primário&lt;/strong&gt;&lt;/p&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;Começaremos a gerar alguns arquivos Wals .&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;#&lt;strong&gt; psql  -U postgres &lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;Bem vindo ao psql 8.3.3, o terminal iterativo do Postgresql. &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;Digite:  \copyright para mostrar termos de distribuição &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;\h para ajuda com comandos SQL &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;\? para ajuda com comandos do psql &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;\g ou terminar com ponto-e-vírgula para executar a consulta &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;\q para sair &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;postgres=# create table teste as select * from pg_class, pg_attribute; &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;SELECT &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;postgres=# create table teste1 as select * from pg_class, pg_attribute; &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;SELECT &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;postgres=#\q &lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;span&gt;Vários arquivos Wals foram gerados e gravados no diretório especificado no &lt;em&gt;&lt;strong&gt;archive_command&lt;/strong&gt;, &lt;/em&gt;configuração do servidor que no caso, mais uma vez pra não se perder  o tal &lt;strong&gt;/psql-archive&lt;/strong&gt; que está montado na máquina primária .&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;# &lt;strong&gt;ls -l /psql-archive&lt;br /&gt;
&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;total 738184 &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:31 0000000100000002000000CE &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres      246 2009-10-06 16:35 0000000100000002000000CE.00005F40.backup &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:33 0000000100000002000000CF &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:35 0000000100000002000000D0 &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:37 0000000100000002000000D1 &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:39 0000000100000002000000D2 &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:41 0000000100000002000000D3 &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:43 0000000100000002000000D4 &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:45 0000000100000002000000D5 &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:47 0000000100000002000000D6 &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:49 0000000100000002000000D7 &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:51 0000000100000002000000D8 &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:51 0000000100000002000000D9 &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:51 0000000100000002000000DA &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:51 0000000100000002000000DB &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:51 0000000100000002000000DC &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:51 0000000100000002000000DD &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:51 0000000100000002000000DE &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:51 0000000100000002000000DF &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:51 0000000100000002000000E0 &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;-rw&amp;#8212;&amp;#8212;- 1 postgres postgres 16777216 2009-10-06 16:51 0000000100000002000000E1&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;&lt;br /&gt;
&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;h1&gt;
&lt;p&gt;&lt;strong&gt;Testando a 	replicação para a máquina em Stand By&lt;/strong&gt;&lt;/p&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;Agora criaremos o arquivo &lt;em&gt;/tmp/trigger.done. &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;&lt;strong&gt;touch /psql-archive/trigger.done &lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Neste momento, o servidor&lt;em&gt; Stand By &lt;/em&gt;detectará que deve sair do modo&lt;em&gt; recovery&lt;/em&gt; e levantar o serviço.&lt;strong&gt; &lt;/strong&gt;Ou seja, quando o arquivo &lt;strong&gt;/psql-archive/trigger.done&lt;/strong&gt; existir, o servidor em  Stand By sai do modo &lt;em&gt;recovery &lt;/em&gt;e passa a operar normalmente.&lt;strong&gt; &lt;/strong&gt; Você pode logar no servidor Stand By e verificar as tabelas criadas. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;h1&gt;&lt;span&gt;To be continued&amp;#8230;&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;Até agora implementamos o Warm Stand by&amp;#8230; Sem alta disponibilidade&amp;#8230;..  o próximo post mostro como garantir a disponibilidade de forma que o servidor escravo assuma o ip do outro servidor mantendo a disponibilidade do serviço&amp;#8230;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;&lt;br /&gt;
&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/joaocosme.wordpress.com/155/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/joaocosme.wordpress.com/155/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/joaocosme.wordpress.com/155/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/joaocosme.wordpress.com/155/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/joaocosme.wordpress.com/155/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/joaocosme.wordpress.com/155/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/joaocosme.wordpress.com/155/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/joaocosme.wordpress.com/155/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/joaocosme.wordpress.com/155/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/joaocosme.wordpress.com/155/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=joaocosme.wordpress.com&amp;amp;blog=3961779&amp;amp;post=155&amp;amp;subd=joaocosme&amp;amp;ref=&amp;amp;feed=1&quot; /&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2009-10-30T17:49:57+00:00</dc:date>
	<dc:creator>joaocosme</dc:creator>
</item>
<item rdf:about="http://www.postgresql.org.br/80 at http://www.postgresql.org.br">
	<title>PostgreSQL Brasil: Dica: ZEOS Lib - Componente para acesso nativo ao PostgreSQL.</title>
	<link>http://www.postgresql.org.br/node/80</link>
	<content:encoded>&lt;p&gt;Bruno da Silva Reis nos enviou uma dica de uso da ZEOS Lib, que &amp;eacute; um componente muito utilizado por desenvolvedores Delphi para acesso nativo ao PostgreSQL, sem que seja necess&amp;aacute;rio o uso de drivers externos como ODBC, JDBC, BDE e outros artif&amp;iacute;cios.&lt;/p&gt;
&lt;p&gt;Voc&amp;ecirc; pode fazer o &lt;a href=&quot;http://sourceforge.net/projects/zeoslib/ &quot;&gt;download do componente aqui&lt;/a&gt; ou &lt;a href=&quot;http://zeos.firmos.at/portal.php&quot;&gt;participar dos f&amp;oacute;runs aqui&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2009-10-26T18:26:43+00:00</dc:date>
</item>
<item rdf:about="http://www.midstorm.org/~telles/?p=608">
	<title>Fabio Telles: COMMIT</title>
	<link>http://www.midstorm.org/~telles/2009/10/25/commit/</link>
	<content:encoded>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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: &amp;#8220;Hey, nós estamos utilizando o PostgreSQL em missão crítica aqui, precisamos da ajuda de vocês&amp;#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.&lt;/p&gt;
&lt;p&gt;Sim, muita gente não sabe disso. Temos muito o que caminhar. Mas quem acompanha as listas de discussão (&lt;a href=&quot;http://listas.postgresql.org.br/cgi-bin/mailman/listinfo&quot;&gt;você AINDA não acompanha?&lt;/a&gt;), o &lt;a href=&quot;http://planeta.postgresql.org.br/&quot;&gt;planeta&lt;/a&gt; e principalmente acompanha os nossos &lt;a href=&quot;http://www.postgresql.org.br/eventos&quot;&gt;eventos&lt;/a&gt; sabe que as coisas estão mudando. Pare para pensar como eram as coisas há 5 anos atrás?&lt;/p&gt;
&lt;p&gt;Bom, ontem eu vi porquê valeu a pena esperar 3 anos para trazer o &lt;a href=&quot;http://momjian.us/&quot;&gt;Bruce Momjian&lt;/a&gt; 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&amp;#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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;YES, WE CAN!!!&lt;/p&gt;
&lt;p&gt;IS DONE&lt;/p&gt;
&lt;p&gt;IS JUST THE BEGINING&amp;#8230;&lt;/p&gt;
&lt;p&gt;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&amp;#8230; &lt;img src=&quot;http://www.midstorm.org/~telles/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;</content:encoded>
	<dc:date>2009-10-25T10:37:24+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-578610887231886448.post-2797364738069918375">
	<title>Rodrigo Hjort: Echoing hidden psql statements</title>
	<link>http://agajorte.blogspot.com/2009/05/echoing-hidden-psql-statements.html</link>
	<content:encoded>&lt;br /&gt;&lt;br /&gt;One of the greatest advantages of a Database Management System is its embedded &lt;b&gt;data dictionary&lt;/b&gt;, also called &lt;b&gt;metadata&lt;/b&gt; or &lt;b&gt;system catalog&lt;/b&gt; [1]. On PostgreSQL DBMS it is not different, and its metadata are widely used by database handling tools.&lt;br /&gt;&lt;br /&gt;A great and yet simple tool available to this relational database is &lt;b&gt;psql&lt;/b&gt; [2], a command-line, bash-enabled application that permits issuing SQL instructions to PostgreSQL server instances.&lt;br /&gt;&lt;br /&gt;Even when sending a simple command such as &quot;\d&quot; on psql, there might be one or several SQL instructions sent internally to that given instance. Knowing exactly what is being sent could help a database administrator or even a simple developer on common and ordinary daily tasks.&lt;br /&gt;&lt;br /&gt;So, how could we know those SQL instructions? Simpler than expected!&lt;br /&gt;&lt;br /&gt;There is an environment variable on psql called &lt;b&gt;ECHO_HIDDEN&lt;/b&gt;, which once set echoes all hidden instructions, as its own name says. In order to enable that, simply execute the following command:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush:bash&quot;&gt;&lt;br /&gt;# \set ECHO_HIDDEN&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Then, try to issue some internal commands like &quot;\l&quot; (typing &quot;\?&quot; shows the entire list of options). Here is the output after enabling ECHO_HIDDEN:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush:bash&quot;&gt;&lt;br /&gt;# \l&lt;br /&gt;********* QUERY **********&lt;br /&gt;SELECT d.datname as &quot;Name&quot;,&lt;br /&gt;       r.rolname as &quot;Owner&quot;,&lt;br /&gt;       pg_catalog.pg_encoding_to_char(d.encoding) as &quot;Encoding&quot;&lt;br /&gt;FROM pg_catalog.pg_database d&lt;br /&gt;  JOIN pg_catalog.pg_roles r ON d.datdba = r.oid&lt;br /&gt;ORDER BY 1;&lt;br /&gt;**************************&lt;br /&gt;&lt;br /&gt;            List of databases&lt;br /&gt;    Name     |     Owner      | Encoding &lt;br /&gt;-------------+----------------+----------&lt;br /&gt; auction5    | sa_auction5    | UTF8&lt;br /&gt; postgres    | postgres       | UTF8&lt;br /&gt; rodrigo     | rodrigo        | UTF8&lt;br /&gt; template0   | postgres       | UTF8&lt;br /&gt; template1   | postgres       | UTF8&lt;br /&gt;(5 rows)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note the contents enclosed by &quot;QUERY&quot; and &quot;***&quot;. Here are the internal SQL instructions respectively performed.&lt;br /&gt;&lt;br /&gt;When you're done, you could deactivate this variable by executing the command below:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush:bash&quot;&gt;&lt;br /&gt;# \unset ECHO_HIDDEN&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;That's it! :D&lt;br /&gt;&lt;br /&gt;&lt;b&gt;References:&lt;/b&gt;&lt;br /&gt;[1] &lt;a href=&quot;http://www.postgresql.org/docs/8.3/static/catalogs.html&quot; target=&quot;nova&quot;&gt;PostgreSQL 8.3.8 Documentation - System Catalogs&lt;/a&gt;&lt;br /&gt;[2] &lt;a href=&quot;http://www.postgresql.org/docs/8.3/static/app-psql.html&quot; target=&quot;nova&quot;&gt;psql - PostgreSQL interactive terminal&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/578610887231886448-2797364738069918375?l=agajorte.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-10-18T20:40:39+00:00</dc:date>
	<dc:creator>Rodrigo HJORT</dc:creator>
</item>
<item rdf:about="http://www.postgresql.org.br/77 at http://www.postgresql.org.br">
	<title>PostgreSQL Brasil: Inscrições on-line para o PGCon Brasil 2009 terminam em 19/10</title>
	<link>http://www.postgresql.org.br/node/77</link>
	<content:encoded>&lt;p&gt;As inscri&amp;ccedil;&amp;otilde;es on-line para o PGCon Brasil 2009 terminam neste dia 19/10. Todos que efetivarem sua inscri&amp;ccedil;&amp;atilde;o ter&amp;atilde;o desconto especial.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;a href=&quot;http://pgcon.postgresql.org.br/2009/inscricoes.php&quot;&gt;Fa&amp;ccedil;a j&amp;aacute; sua inscri&amp;ccedil;&amp;atilde;o!&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Acompanhe tamb&amp;eacute;m os destaques do evento no &lt;a href=&quot;http://pgcon.postgresql.org.br&quot;&gt;site oficial do PGCon Brasil 2009&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2009-10-14T09:16:37+00:00</dc:date>
</item>
<item rdf:about="http://ribafs.wordpress.com/2006/12/22/podutividade-no-desenvolvimento-web/">
	<title>Ribamar FS: Dicas e Truque do SQL no PostgreSQL</title>
	<link>http://ribafs.wordpress.com/2006/12/22/podutividade-no-desenvolvimento-web/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;h2&gt;Trabalhando com SQL&lt;/h2&gt;
&lt;p&gt;Quase todas estas dicas abaixo recebi na lista de PostgreSQL do http://postgresql.org.br. Sempre que lembrei concedi os devidos créditos.&lt;br /&gt;
&lt;strong&gt;1) Criar Tabela tendo outra outra como base e já importando todos os registros dessa outra:&lt;/strong&gt;&lt;br /&gt;
CREATE TABLE tabelanova AS SELECT * FROM tabealexistente;&lt;br /&gt;
&lt;strong&gt;2) Inserindo com SELECT&lt;/strong&gt;&lt;br /&gt;
Inserir todos os registros de uma tabela em outra:&lt;br /&gt;
INSERT INTO tabelaqueimporta SELECT * from tabelaqueexporta;&lt;/p&gt;
&lt;p&gt;insert into engenharia.insumos (grupo,insumo,descricao,unidade) select grupo,insumo,descricao, CAST(unidade AS int2) AS &amp;#8220;unidade&amp;#8221; from engenharia.apagar&lt;/p&gt;
&lt;p&gt;insert into engenharia.insumos (grupo,insumo,descricao,unidade) select grupo,insumo,descricao, cast(unidade AS INT2) AS unidade from engenharia.apagar&lt;/p&gt;
&lt;p&gt;$conn = pg_connect(&amp;#8221;host=10.40.100.186 dbname=apoena user=_postgresql&amp;#8221;);&lt;br /&gt;
for($x=10;$x&amp;lt;=87;$x++){&lt;br /&gt;
$sql=&amp;#8221;update engenharia.precos set custo_produtivo = (select custo_produtivo from engenharia.apagar where insumo=&amp;#8217;$x&amp;#8217;) where insumo=&amp;#8217;00&amp;#8242; || &amp;#8216;$x&amp;#8217;&amp;#8221;;&lt;br /&gt;
$ret=pg_query($conn,$sql);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
3) Atualizar um campo em todos os registros de uma tabela recebendo de outra tabela:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;UPDATE servicos s SET custo = total FROM composicoes c&lt;br /&gt;
WHERE s.tabela = c.tabela AND s.servico = c.servico&lt;/p&gt;
&lt;p&gt;Uso do Like e de Expressões Regulares&lt;/p&gt;
&lt;p&gt;Registros:&lt;br /&gt;
Ribamar Ferreira de Sousa&lt;br /&gt;
João Pereira Brito&lt;/p&gt;
&lt;p&gt;Usando LIKE e ILIKE&lt;/p&gt;
&lt;p&gt;SELECT * FROM clientes WHERE nome LIKE &amp;#8216;Riba%&amp;#8217;; // Retorna Ribamar Ferreira de Sousa&lt;br /&gt;
SELECT * FROM clientes WHERE nome LIKE &amp;#8216;riba%&amp;#8217;; // Nada retorna&lt;br /&gt;
SELECT * FROM clientes WHERE nome ILIKE &amp;#8216;riba%&amp;#8217;; // Retorna Ribamar Ferreira de Sousa&lt;br /&gt;
SELECT * FROM clientes WHERE nome NOT LIKE &amp;#8216;pedro&amp;#8217;; // Retorna ambos os registros&lt;/p&gt;
&lt;p&gt;Usando Expressões Regulares&lt;/p&gt;
&lt;p&gt;SELECT * FROM clientes WHERE nome ~~ &amp;#8216;Riba%&amp;#8217;; // Retorna Ribamar Ferreira de Sousa&lt;br /&gt;
SELECT * FROM clientes WHERE nome ~~ &amp;#8216;riba%&amp;#8217;; // Nada retorna&lt;br /&gt;
SELECT * FROM clientes WHERE nome ~~* &amp;#8216;riba%&amp;#8217;; // Retorna Ribamar Ferreira de Sousa&lt;br /&gt;
SELECT * FROM clientes WHERE nome !~~ &amp;#8216;pedro&amp;#8217;; // Retorna ambos os registros&lt;br /&gt;
SELECT nome FROM clientes WHERE nome ~ &amp;#8216;Ribamar Ferreira de Sousa&amp;#8217;; // Retorna Ribamar Ferreira de Sousa&lt;br /&gt;
SELECT * FROM clientes WHERE nome !~ &amp;#8216;jorge&amp;#8217;; // Retorna ambos&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4) Buscar nas tabelas de sistema do postgresql, todos as tabelas de um determinado schema, os campos que sejam do tipo boolean.. &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SELECT n.nspname AS Schema, c.relname AS Tabela, t.typname AS Tipo&lt;br /&gt;
FROM pg_class c&lt;br /&gt;
LEFT JOIN pg_namespace n ON n.oid = c.relnamespace&lt;br /&gt;
LEFT JOIN pg_type t ON t.oid = c.reltype&lt;br /&gt;
WHERE c.relkind = &amp;#8216;r&amp;#8217;::&amp;#8221;char&amp;#8221;&lt;br /&gt;
AND t.typname = &amp;#8216;boolean&amp;#8217;;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
5) Exemplos de Joins&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Join com 4 tabelas&lt;/p&gt;
&lt;p&gt;$w_sql = &amp;#8221; TRUE &amp;#8220;;&lt;/p&gt;
&lt;p&gt;if ( $p_tabela != &amp;#8220;&amp;#8221;) { $w_sql = $w_sql . &amp;#8221; AND tabela ~~*&amp;#8217;&amp;#8221; . $p_tabela . &amp;#8220;&amp;#8216;&amp;#8221;; }&lt;br /&gt;
if ( $p_insumo_grupo != &amp;#8220;&amp;#8221;) { $w_sql = $w_sql . &amp;#8221; AND insumo_grupo ~~*&amp;#8217;&amp;#8221; .$p_insumo_grupo.&amp;#8221;&amp;#8216;&amp;#8221;; }&lt;br /&gt;
if ( $p_insumo != &amp;#8220;&amp;#8221;) { $w_sql = $w_sql . &amp;#8221; AND insumo ~~*&amp;#8217;&amp;#8221; . $p_insumo . &amp;#8220;&amp;#8216;&amp;#8221;; }&lt;br /&gt;
if ( $p_fornecedor != &amp;#8220;&amp;#8221;) { $w_sql = $w_sql . &amp;#8221; AND fornecedor ~~*&amp;#8217;&amp;#8221; .$p_fornecedor.&amp;#8221;&amp;#8216;&amp;#8221;; }&lt;/p&gt;
&lt;p&gt;$w_sql=&amp;#8221;SELECT distinct on (p.tabela, p.insumo_grupo, p.insumo, p.fornecedor) p.custo_produtivo, p.data_inclusao,&lt;br /&gt;
t.tabela, t.descricao as tabelad,&lt;br /&gt;
ig.grupo, ig.descricao as insumogd,&lt;br /&gt;
i.grupo, i.insumo, i.descricao as insumod,&lt;br /&gt;
f.codigo_fornecedor, f.razao_social as fornecedord&lt;br /&gt;
FROM $m_table as p, $m_table_tab as t, $m_table_ing as ig, $m_table_ins as i, $m_table_for as f&lt;br /&gt;
WHERE p.tabela=t.tabela AND p.insumo_grupo=ig.grupo AND p.insumo=i.insumo AND p.fornecedor=f.codigo_fornecedor&lt;br /&gt;
AND p.insumo_grupo = i.grupo ORDER BY p.tabela DESC, p.insumo_grupo;&amp;#8221;;&lt;/p&gt;
&lt;p&gt;/*&lt;br /&gt;
p &amp;#8211; $m_table (engenharia.precos)&lt;br /&gt;
i &amp;#8211; $m_table_ins (engenharia.insumos)&lt;br /&gt;
ig &amp;#8211; $m_table_ing (engenharia.insumos_grupos)&lt;br /&gt;
t &amp;#8211; $m_table_tab (engenharia.tabela)&lt;br /&gt;
*/&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
6) Mudar Tipo de Dados de Campo &amp;#8211; CAST (Só &amp;gt;=8.0):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ALTER TABLE tabela ALTER COLUMN campo TYPE tipo;&lt;br /&gt;
ALTER TABLE produtos ALTER COLUMN preco TYPE numeric(10,2);&lt;br /&gt;
ALTER TABLE produtos ALTER COLUMN data TYPE DATE USING CAST (data AS DATE);&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
7) Renomear Tabela&lt;/strong&gt;&lt;br /&gt;
ALTER TABLE tabela RENAME TO nomenovo;&lt;br /&gt;
ALTER TABLE produtos RENAME TO equipamentos;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
 &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;wp-smiley&quot; /&gt; Tamanho de Tabela, Banco ou Todos os Bancos do SGBD:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tamanho de Banco de Dados (postgresql 8.1 ou superior):&lt;br /&gt;
select pg_database_size(&amp;#8217;nomebanco&amp;#8217;);&lt;/p&gt;
&lt;p&gt;Tamanho de Tabela&lt;br /&gt;
select pg_tablespace_size(&amp;#8217;nometabela&amp;#8217;);&lt;/p&gt;
&lt;p&gt;Tamanho de todos os bancos de dados do SGBD:&lt;br /&gt;
select (sum(relpages) * &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;wp-smiley&quot; /&gt; / 1024 || &amp;#8216; MB&amp;#8217; as tamanho from pg_class where relowner &amp;gt; 1;&lt;/p&gt;
&lt;p&gt;Ou&lt;/p&gt;
&lt;p&gt;select (sum(relpages) / 2^7) :: int || &amp;#8216; MB&amp;#8217; as tamanho from pg_class where relowner &amp;gt; 1;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
9) Validação de e-mails&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1 &amp;#8211; select distinct(campo_email),campo_nome, campos_n from tabela where campo_email like &amp;#8216;%@%.%&amp;#8217;&lt;br /&gt;
2 &amp;#8211; SELECT POSITION(&amp;#8217;@', &amp;#8216;ribafs@gmail.com&amp;#8217;) &amp;gt; 0&lt;br /&gt;
3 &amp;#8211; select &amp;#8216;coutinho.php@gmail.com&amp;#8217; ~ &amp;#8216;@&amp;#8217;&lt;br /&gt;
4 &amp;#8211; select &amp;#8216;coutinho.php@gmail.com&amp;#8217; like &amp;#8216;%@%&amp;#8217;&lt;br /&gt;
5 &amp;#8211; select if (&amp;#8217;campo_email&amp;#8217; like &amp;#8220;%@%.%&amp;#8221;,&amp;#8221;TRUE&amp;#8221;,&amp;#8221;FALSE&amp;#8221;) as flag, campo_adcional from tabela&lt;br /&gt;
6 &amp;#8211; select &amp;#8216;coutinho@gmail.com&amp;#8217; similar to &amp;#8216;%@%.%&amp;#8217;;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
10) Temos um campo (insumo) com valores = 1, 2, 3, &amp;#8230; 87&lt;/strong&gt;&lt;br /&gt;
Queremos atualizar para 0001, 0002, 0003, &amp;#8230; 0087&lt;/p&gt;
&lt;p&gt;UPDATE equipamentos SET insumo = &amp;#8216;000&amp;#8242; || insumo WHERE LENGTH(insumo) = 1;&lt;br /&gt;
UPDATE equipamentos SET insumo = &amp;#8216;00&amp;#8242; || insumo WHERE LENGTH(insumo) = 2;&lt;/p&gt;
&lt;p&gt;Outra saída mais elegante ainda:&lt;/p&gt;
&lt;p&gt;UPDATE equipamentos SET insumo = REPEAT(&amp;#8217;0&amp;#8242;, 4-LENGTH(insumo)) || insumo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
11) Retornar o número de usuários conectados&lt;/strong&gt;&lt;br /&gt;
select count(*) from pg_stat_activity&lt;/p&gt;
&lt;p&gt;pg_stat_database que apresenta para cada banco de dados o número de conexões.&lt;br /&gt;
Eu particularmente acho que fica mais fácil de visualizar do que o pg_stat_activity quando se tem muitas conexões.&lt;/p&gt;
&lt;p&gt;Mostrar uso dos índices dos bancos de dados:&lt;br /&gt;
select * from pg_statio_user_indexes;&lt;/p&gt;
&lt;p&gt;select * from pg_stat_user_indexes;&lt;/p&gt;
&lt;p&gt;Mostra estatística de uso das tabelas e manutenção:&lt;br /&gt;
select * from pg_stat_all_tables;&lt;/p&gt;
&lt;p&gt;Mostra todas as tabelas do atual esquema do atual banco:&lt;br /&gt;
select * from pg_stat_user_tables;&lt;/p&gt;
&lt;p&gt;pg_stat_get_tuples_returned(oid) bigint Number of rows read by sequential scans when argument is a table, or number of index entries returned when argument is an index&lt;br /&gt;
pg_stat_get_tuples_fetched(oid) bigint Number of table rows fetched by bitmap scans when argument is a table, or table rows fetched by simple index scans using the index when argument is an index&lt;br /&gt;
pg_stat_get_tuples_inserted(oid) bigint Number of rows inserted into table&lt;br /&gt;
pg_stat_get_tuples_updated(oid) bigint Number of rows updated in table&lt;br /&gt;
pg_stat_get_tuples_deleted(oid) bigint Number of rows deleted from table&lt;br /&gt;
pg_stat_get_blocks_fetched(oid) bigint Number of disk block fetch requests for table or index&lt;br /&gt;
pg_stat_get_blocks_hit(oid) bigint Number of disk block requests found in cache for table or index&lt;br /&gt;
pg_stat_get_last_vacuum_time(oid) timestamptz Time of the last vacuum initiated by the user on this table&lt;br /&gt;
pg_stat_get_last_autovacuum_time(oid) timestamptz Time of the last vacuum initiated by the autovacuum daemon on this table&lt;br /&gt;
pg_stat_get_last_analyze_time(oid) timestamptz Time of the last analyze initiated by the user on this table&lt;br /&gt;
pg_stat_get_last_autoanalyze_time(oid) timestamptz Time of the last analyze initiated by the autovacuum daemon on this table&lt;/p&gt;
&lt;p&gt;This is controlled by configuration parameters that are normally set in postgresql.conf&lt;/p&gt;
&lt;p&gt;The function pg_stat_get_backend_idset provides a convenient way to generate one row for each active server process. For example, to show the PIDs and current queries of all server processes:&lt;/p&gt;
&lt;p&gt;SELECT pg_stat_get_backend_pid(s.backendid) AS procpid,&lt;br /&gt;
pg_stat_get_backend_activity(s.backendid) AS current_query&lt;br /&gt;
FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;&lt;/p&gt;
&lt;p&gt;Visualizar os processos do portgresql num UNIX:&lt;/p&gt;
&lt;p&gt;ps auxww | grep ^postgres&lt;/p&gt;
&lt;p&gt;Formato de retorno:&lt;br /&gt;
postgres: user database host activity&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;12) Corrigindo Estouro do Máximo de transações (2 bilhões)&lt;/strong&gt;&lt;br /&gt;
Constatando:&lt;/p&gt;
&lt;p&gt;SELECT datname, age(datfrozenxid) FROM pg_database;&lt;/p&gt;
&lt;p&gt;age acusa mais de 2 bilhões&lt;/p&gt;
&lt;p&gt;Tarcizio Meurer&lt;/p&gt;
&lt;p&gt;- Execute um dumpall na base&lt;br /&gt;
- drop a base e o agrupamento de dados&lt;br /&gt;
- recrie o agrupamento&lt;br /&gt;
- recrie a base&lt;br /&gt;
- carrege os dados novemente.&lt;br /&gt;
&lt;strong&gt;13) Total de Registros de Todos os Bancos do SGBD (PHP):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;?php&lt;/p&gt;
&lt;p&gt;$conexao=pg_connect(&amp;#8221;host=127.0.0.1 user=postgres password=postabir&amp;#8221;);&lt;/p&gt;
&lt;p&gt;$sql=&amp;#8221;SELECT datname AS banco FROM pg_database ORDER BY datname&amp;#8221;;&lt;br /&gt;
$consulta=pg_query($conexao,$sql);&lt;/p&gt;
&lt;p&gt;$banco = array();&lt;br /&gt;
$c=0;&lt;br /&gt;
while ($data = @pg_fetch_object($consulta,$c)) {&lt;br /&gt;
$cons=$data-&amp;gt;banco;&lt;/p&gt;
&lt;p&gt;$banco[] .= $cons;&lt;br /&gt;
$c++;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;$sql2=&amp;#8221;SELECT n.nspname as esquema,c.relname as tabela FROM pg_namespace n, pg_class c&lt;br /&gt;
WHERE n.oid = c.relnamespace&lt;br /&gt;
and c.relkind = &amp;#8216;r&amp;#8217; &amp;#8212; no indices&lt;br /&gt;
and n.nspname not like &amp;#8216;pg\\_%&amp;#8217; &amp;#8212; no catalogs&lt;br /&gt;
and n.nspname != &amp;#8216;information_schema&amp;#8217; &amp;#8212; no information_schema&lt;br /&gt;
ORDER BY nspname, relname&amp;#8221;;&lt;/p&gt;
&lt;p&gt;for ($x=0; $x &amp;lt; count($banco);$x++){&lt;br /&gt;
if ($banco[$x] !=&amp;#8221;template0&amp;#8243; &amp;amp;&amp;amp; $banco[$x] != &amp;#8220;template1&amp;#8243; &amp;amp;&amp;amp; $banco[$x] !=&amp;#8221;postgres&amp;#8221;){&lt;br /&gt;
$conexao2=pg_connect(&amp;#8221;host=127.0.0.1 dbname=$banco[$x] user=postgres password=postabir&amp;#8221;);&lt;br /&gt;
$consulta2=pg_query( $conexao2, $sql2 );&lt;/p&gt;
&lt;p&gt;while ($data = pg_fetch_object($consulta2)) {&lt;br /&gt;
$esquematab=$data-&amp;gt;esquema.&amp;#8217;.&amp;#8217;.$data-&amp;gt;tabela;&lt;br /&gt;
$sql3=&amp;#8221;SELECT count(*) FROM $esquematab&amp;#8221;;&lt;br /&gt;
$consulta3=pg_query($conexao2,$sql3);&lt;br /&gt;
$res=@pg_fetch_array($consulta3);&lt;/p&gt;
&lt;p&gt;print &amp;#8216;Banco.Esquema.Tabela -&amp;gt; &amp;#8216;.$banco[$x].&amp;#8217;.&amp;#8217;.$data-&amp;gt;esquema.&amp;#8217;.&amp;#8217;.$data-&amp;gt;tabela.&amp;#8217; &amp;#8211; Registro(s) &amp;#8211; &amp;#8216;.$res[0].&amp;#8221;;&lt;br /&gt;
$total += $res[0];&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;}&lt;br /&gt;
}&lt;br /&gt;
print &amp;#8220;Total de Registro de todas as tabelas de todos os bancos &amp;#8220;. $total;&lt;/p&gt;
&lt;p&gt;?&amp;gt;&lt;br /&gt;
&lt;strong&gt;14) Uso da Constraint check&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CREATE TABLE testes(&lt;br /&gt;
codigo serial primary key,&lt;br /&gt;
idade integer,&lt;br /&gt;
check (idade &amp;gt; 18 AND idade &amp;lt; 70)&lt;br /&gt;
)&lt;/p&gt;
&lt;p&gt;Alternativas:&lt;/p&gt;
&lt;p&gt;check (preco &amp;gt; desconto)&lt;/p&gt;
&lt;p&gt;check (desconto &amp;gt; 0 AND preco &amp;gt; desconto)&lt;/p&gt;
&lt;p&gt;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-&lt;br /&gt;
Somente aceitar c ou e (simulando campo tipo enum do MySQL):&lt;br /&gt;
tipo char(1) check (tipo =&amp;#8217;c&amp;#8217; OR tipo=&amp;#8217;e')&lt;/p&gt;
&lt;p&gt;Para este cria-se uma combo com values &amp;#8216;c&amp;#8217; e &amp;#8216;e&amp;#8217;.&lt;br /&gt;
&lt;strong&gt;15) Manutenção do PostgreSQL:&lt;/strong&gt;&lt;br /&gt;
No CRON:&lt;/p&gt;
&lt;p&gt;/home/pgsql/bin/psql -c &amp;#8220;vacuum full analyse&amp;#8221; -d dadosadv -U postgres&lt;/p&gt;
&lt;p&gt;Consultas no Pronpt do SO:&lt;br /&gt;
psql -U postgres -d banco -c &amp;#8220;SELECT * FROM clientes&amp;#8221;&lt;/p&gt;
&lt;p&gt;Manutenção em Tabela&lt;br /&gt;
vacuum analize tabela;&lt;/p&gt;
&lt;p&gt;Reindexar Banco, tabela ou índice&lt;br /&gt;
reindex database banco;&lt;/p&gt;
&lt;p&gt;Exibir plano de consulta&lt;br /&gt;
explain select * from tabela;&lt;/p&gt;
&lt;p&gt;Exibir todos os parâmetros de runtime&lt;br /&gt;
show all;&lt;br /&gt;
&lt;strong&gt;16) Consulta com Dias Úteis&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Só para constar aqui vai uma expressão SQL que fornece os&lt;br /&gt;
dias úteis de um período. Considerei que existe uma tabela&lt;br /&gt;
com o registro dos feriados e outros dias que não devem ser&lt;br /&gt;
considerados (emendas, pontos facultativos, etc):&lt;/p&gt;
&lt;p&gt;SELECT dia FROM&lt;br /&gt;
(SELECT (&amp;#8217;2007-10-01&amp;#8242;::date+s.a*&amp;#8217;1 day&amp;#8217;::interval) AS dia&lt;br /&gt;
FROM generate_series(0, &amp;#8216;2007-10-31&amp;#8242;::date -&lt;br /&gt;
&amp;#8216;2007-10-01&amp;#8242;::date, 1) AS s(a)) foo&lt;br /&gt;
WHERE EXTRACT(DOW FROM dia) BETWEEN 1 AND 5&lt;br /&gt;
EXCEPT&lt;br /&gt;
SELECT dia FROM tab_feriado;&lt;/p&gt;
&lt;p&gt;Osvaldo (na lista postgresql-br)&lt;br /&gt;
&lt;strong&gt;17) Update em uma chave primária sem causar duplicação de chave&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;UPDATE teste SET coluna1 = t_aux.coluna1+1&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT coluna1&lt;br /&gt;
FROM teste&lt;br /&gt;
ORDER BY coluna1 DESC&lt;br /&gt;
) t_aux&lt;br /&gt;
WHERE teste.coluna1 = t_aux.coluna1;&lt;/p&gt;
&lt;p&gt;Osvaldo (na lista postgresql-br)&lt;br /&gt;
&lt;strong&gt;18) Como saber se existe uma transação ativa&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;select pg_stat_activity;&lt;/p&gt;
&lt;p&gt;Dica do João Paulo.&lt;br /&gt;
&lt;strong&gt;19)Inserir data como valor default:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pode usar também o current_date ou o localtimestamp.&lt;/p&gt;
&lt;p&gt;insert into tabela(data) values ((select current_date));&lt;/p&gt;
&lt;p&gt;ou&lt;/p&gt;
&lt;p&gt;insert into tabela(data) values ((select localtimestampo));&lt;br /&gt;
&lt;strong&gt;20) Ler último saldo de tabela&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tenho o seguinte conteudo numa tabela de contas:&lt;/p&gt;
&lt;p&gt;Lancto&amp;#8211;CCorrente&amp;#8211;Banco&amp;#8211;OP&amp;#8211;DataLan&amp;#8212;&amp;#8212;-Valor&amp;#8212;&amp;#8212;&amp;#8212;Saldo&amp;#8211;&lt;br /&gt;
1 12345-6 002 C 19/11/2007 1000.00 1000.00&lt;br /&gt;
2 12345-6 002 C 19/11/2007 2000.00 3000.00&lt;br /&gt;
3 12345-6 002 D 19/11/2007 100.00 2900.00&lt;br /&gt;
4 23450-6 001 C 19/11/2007 2000.00 3000.00&lt;br /&gt;
5 23450-6 001 D 19/11/2007 100.00 2900.00&lt;/p&gt;
&lt;p&gt;Preciso retornar sempre o último SALDO registrado.&lt;br /&gt;
Como nunca vou saber a data exata da periodo de consulta.&lt;/p&gt;
&lt;p&gt;Estou executando:&lt;/p&gt;
&lt;p&gt;SELECT saldoatual FROM lanban WHERE contacorrente = &amp;#8216;12345-6&amp;#8242; and datalan &amp;lt;= &amp;#8216;2007/12/01&amp;#8242; ORDER BY datalan DESC LIMIT 1&lt;/p&gt;
&lt;p&gt;Retona o Saldo: 1000.00, preciso pegar o ultimo saldo da conta 12345-6: que é 2900.00.&lt;/p&gt;
&lt;p&gt;Isso porque tabelas são conjuntos de dados. O padrão SQL *não* garante a&lt;br /&gt;
ordem dos dados. Mesmo se ele garantisse, um simples UPDATE podia mudar&lt;br /&gt;
o ordem dos dados e o seu SELECT não retornaria o valor desejado.&lt;/p&gt;
&lt;p&gt;&amp;gt; Alguem tem alguma dica?&lt;br /&gt;
&amp;gt;&lt;br /&gt;
O campo &amp;#8216;Lancto&amp;#8217; é do tipo serial? Se for poderias utilizar:&lt;br /&gt;
SELECT saldoatual FROM lanban WHERE contacorrente = &amp;#8216;12345-6&amp;#8242; ORDER BY&lt;br /&gt;
&amp;#8220;Lancto&amp;#8221; DESC LIMIT 1.&lt;/p&gt;
&lt;p&gt;Dica do Euler Taveira de Oliveira&lt;br /&gt;
&lt;strong&gt;21) Formato de moeda&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;O correto seria:&lt;br /&gt;
to_char(1030.52,&amp;#8217;9G999D99&amp;#8242;)&lt;br /&gt;
mas o resultado é: 1,030,52&lt;br /&gt;
como você pode observar existe um problema no&lt;br /&gt;
separador de milhar (indicado pelo G) que é&lt;br /&gt;
considerado como , e não como . que seria o esperado.&lt;/p&gt;
&lt;p&gt;Uma maneira de contornar (não muito elegante) é:&lt;br /&gt;
to_char(1030.52,&amp;#8217;9&amp;#8243;.&amp;#8221;999D99&amp;#8242;)&lt;/p&gt;
&lt;p&gt;Corrigido na versão 8.3&lt;br /&gt;
&lt;strong&gt;22) Saber o Tamanho de Tabela e de Índices&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;pg_relation_size()&lt;br /&gt;
pg_total_relation_size()&lt;/p&gt;
&lt;p&gt;-Leo&lt;br /&gt;
&amp;#8211;&lt;br /&gt;
Leonardo Cezar&lt;br /&gt;
&lt;strong&gt;23) Último Saldo&lt;/strong&gt;&lt;br /&gt;
Fernando Brombatti&lt;/p&gt;
&lt;p&gt;A situação é a seguinte. Não se sabe se o serial citado (por N razões) vai ser o último valor existente. Nada me garante que estes dados não sofreram algum UPDATE. Sendo assim, recomendo:&lt;br /&gt;
1) alterar o campo DATE para TIMESTAMP&lt;br /&gt;
2) alterar o query:&lt;br /&gt;
SELECT lan.saldoatual&lt;br /&gt;
FROM lanban lan&lt;br /&gt;
WHERE lan.contacorrente = &amp;#8216;12345-6&amp;#8242; AND lan.datalan = (SELECT MAX(maxlan.datalan)&lt;br /&gt;
FROM lanban maxlan&lt;br /&gt;
WHERE maxlan.contacorrente = lan.contacorrente)&lt;br /&gt;
Isso faz com que no primeiro SQL eu traga os lancamentos da conta e no segundo eu trago a máxima data de lançamento para a mesma conta. Como as contas são iguais, trago a máxima data da conta atual, logo tenho o saldo atual.&lt;br /&gt;
É confuso, mas é o mais seguro (podem haver UPDATES neste caso também, mas aí não se depende de um serial).&lt;br /&gt;
Para este query funcionar bem necessita mais um índice em datalan ao menos.&lt;br /&gt;
Nos nossos sistemas da prefeitura nunca usamos saldos desta forma, pois aí se é removido algum registro a informação não fica correta.&lt;/p&gt;
&lt;p&gt;Espero não ter confundido tanto.&lt;br /&gt;
&lt;strong&gt;24) Encontrando tanela de sistema&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Para localizar informações desse tipo existe o information_schema&lt;br /&gt;
(conforme citado pelo Leandro). Utilizando o catalogo poupa voce de&lt;br /&gt;
futuras dores de cabeça quando por exemplo houver alguma alteração&lt;br /&gt;
estrutural em tabelas do sistema em versõs futuras. As views do&lt;br /&gt;
catalogo deverão permanecer com o máximo de compatibilidade entre&lt;br /&gt;
versões (segundo padrão SQL).&lt;/p&gt;
&lt;p&gt;Além de ser mais simples:&lt;/p&gt;
&lt;p&gt;SELECT *&lt;br /&gt;
FROM information_schema.tables&lt;br /&gt;
WHERE table_name = &amp;#8216;foobar&amp;#8217;;&lt;/p&gt;
&lt;p&gt;Infelizmente não possuimos referencias a outros banco de dados&lt;br /&gt;
(banco.schema.tabela), portanto o comando deverá ser executado em&lt;br /&gt;
todos seus bancos para localizar a tabela ou um programeta bash&lt;br /&gt;
parecido com isso:&lt;/p&gt;
&lt;p&gt;$ ARG=$1 || &amp;#8220;foo&amp;#8221; &amp;amp;&amp;amp; for DATABASE in `psql -U postgres -c &amp;#8220;\l&amp;#8221; \&lt;br /&gt;
| cut -d&amp;#8221;|&amp;#8221; -f1 | egrep &amp;#8216;^(\ [a-z])&amp;#8217;`&lt;br /&gt;
do&lt;br /&gt;
psql -U postgres -d $DATABASE -Atc \&lt;br /&gt;
&amp;#8220;SELECT &amp;#8216;O banco de dados $DATABASE possui a tabela: $RG&amp;#8217;&lt;br /&gt;
FROM information_schema.tables&lt;br /&gt;
WHERE table_name = &amp;#8216;$ARG&amp;#8217;&amp;#8221;;&lt;br /&gt;
done;&lt;/p&gt;
&lt;p&gt;Abraço!&lt;/p&gt;
&lt;p&gt;-Leo&lt;br /&gt;
&lt;strong&gt;25) Como Localizar e Deletar registros duplicados &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1.Select para localizar duplicados&lt;br /&gt;
select campo,campo1,count(*)&lt;br /&gt;
from tabela group by campo,campo1 having count(*) &amp;gt; 1&lt;/p&gt;
&lt;p&gt;2.Deletar duplicados:&lt;br /&gt;
delete from tab p1&lt;br /&gt;
where rowid &amp;lt; (select max(rowid)&lt;br /&gt;
from tab1 p2&lt;br /&gt;
where p1.primary_key = p2.primary_key);&lt;br /&gt;
&lt;strong&gt;26) Inserir registros em uma específica posição&lt;/strong&gt;&lt;br /&gt;
&amp;gt; Hi, how are you? maybe you know how SQL insert data&lt;br /&gt;
&amp;gt; bellow or above in database tabe? example insert&lt;br /&gt;
&amp;gt; data from position table 5 thanks&lt;br /&gt;
&amp;gt;&lt;/p&gt;
&lt;p&gt;No, I don&amp;#8217;t known.&lt;br /&gt;
But if you make a copy from table,&lt;br /&gt;
create a new table with same structure,&lt;br /&gt;
insert a new register,&lt;br /&gt;
import register from old table, then first register&lt;br /&gt;
are this last register inserted.&lt;br /&gt;
&lt;strong&gt;27) Timezones do PostgreSQL (lista pgbr-geral)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No POSTGRESQL.CONF tem o timezone onde você pode colocar algo do tipo:&lt;/p&gt;
&lt;p&gt;TIMEZONE=BRAZIL/EAST esta é minha configuração, ou seja, de minha região.&lt;/p&gt;
&lt;p&gt;Analise.&lt;br /&gt;
Wandrey&lt;/p&gt;
&lt;p&gt;Outra &amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;&lt;br /&gt;
Na maioria dos casos é criado um link do diretório de timezones do&lt;br /&gt;
S.O. (/usr/share/zoneinfo//usr/share/zoneinfo/) para o diretório de&lt;br /&gt;
Timezones do Postgres ($PGDIR/share/timezone )Que possui seu próprio&lt;br /&gt;
sistema de controle de timezone, se não me engano a partir d versão &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&amp;#8211;&lt;br /&gt;
Att:&lt;br /&gt;
Thiago Risso&lt;br /&gt;
&lt;strong&gt;28) Inserir Número Aleatório em Tabela&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CREATE TABLE page (&lt;br /&gt;
id SERIAL PRIMARY KEY,&lt;br /&gt;
about TEXT NULL,&lt;br /&gt;
);&lt;/p&gt;
&lt;p&gt;ALTER TABLE page ADD myrand NUMERIC NOT NULL DEFAULT RANDOM();&lt;/p&gt;
&lt;p&gt;UPDATE page SET myrand = DEFAULT;&lt;/p&gt;
&lt;p&gt;SELECT id FROM page WHERE myrand &amp;gt;= RANDOM() ORDER BY myrand LIMIT 1;&lt;/p&gt;
&lt;p&gt;This approach has some problems:&lt;/p&gt;
&lt;p&gt;* If the number you pick is greater than the largest number in the myrand column, you will not find any matching rows.&lt;br /&gt;
* The gaps between the random values in the myrand column are not uniform, and thus the rows selected are not random. Imagine a table with two rows and myrand values of 0.8 and 0.9. If the random number compared to myrand is .8 or less, the first row is chosen. But the second row is only chosen if the value picked is between .8 and .9&lt;br /&gt;
* If more than one row has the exact same number, it is likely that one of them will never get picked.&lt;/p&gt;
&lt;p&gt;Mais detalhes em: &lt;a href=&quot;http://people.planetpostgresql.org/greg/index.php?/archives/118-guid.html&quot;&gt;http://people.planetpostgresql.org/greg/index.php?/archives/118-guid.htm&amp;#8230;&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;29) Desabilitar Triggers&lt;/strong&gt;&lt;br /&gt;
Vinicius Santos &amp;#8211; MSI escreveu:&lt;br /&gt;
Thiago Boufleuhr escreveu:&lt;/p&gt;
&lt;p&gt;Como faço para desabilitar as triggers em uma sessão no PLSQL ?&lt;/p&gt;
&lt;p&gt;Thiago Boufleuhr&lt;/p&gt;
&lt;p&gt;ALTER TABLE [NOME DA TABELA]&lt;br /&gt;
DISABLE TRIGGER [NOME DA TRIGGER]&lt;br /&gt;
Ou&lt;br /&gt;
ALTER TABLE [NOME DA TABELA]&lt;br /&gt;
DISABLE TRIGGER ALL&lt;/p&gt;
&lt;p&gt;ALERTA:&lt;br /&gt;
William Leite Araújo: MUITO CUIDADO AO USAR &amp;#8220;DISABLE TRIGGER ALL&amp;#8221;&lt;/p&gt;
&lt;p&gt;As constraints de chave estrangeira são controladas via TRIGGER. Caso desabilite todos os gatilhos, a checagem da integridade referencial (chaves estrangeiras) serão desabilitadas!&lt;br /&gt;
&lt;strong&gt;30) Codificação de Caracteres&lt;/strong&gt;&lt;br /&gt;
Euler Taveira de Oliveira&lt;br /&gt;
&amp;gt;Evandro Ricardo Silvestre wrote: Codificação de caracteres do cliente e&lt;br /&gt;
do servidor podem ser diferentes. Se a codificação do cliente é diferente da codificação do servidor, o servidor PostgreSQL tenta fazer uma conversão antes de armazenar/retornar os dados. Um problema que existia é que a aplicação cliente (no caso abaixo o psql) não avisava se a codificação informada ao servidor (client_encoding) era a mesma do ambiente (terminal).&lt;br /&gt;
Bem vindo ao psql 8.3.0, o terminal iterativo do PostgreSQL.&lt;br /&gt;
Digite: \copyright para mostrar termos de distribuição&lt;br /&gt;
\h para ajuda com comandos SQL&lt;br /&gt;
\? para ajuda com comandos do psql&lt;br /&gt;
\g ou terminar com ponto-e-vírgula para executar a consulta&lt;br /&gt;
\q para sair&lt;br /&gt;
template1=# show client_encoding;&lt;br /&gt;
client_encoding&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;&lt;br /&gt;
LATIN1&lt;br /&gt;
(1 registro)&lt;br /&gt;
template1=# show server_encoding;&lt;br /&gt;
server_encoding&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;&lt;br /&gt;
LATIN1&lt;br /&gt;
(1 registro)&lt;br /&gt;
template1=# select upper(&amp;#8217;áéíóú&amp;#8217;);&lt;br /&gt;
upper&lt;br /&gt;
&amp;#8212;&amp;#8212;-&lt;br /&gt;
ÁÉÍÓÚ&lt;br /&gt;
(1 registro)&lt;br /&gt;
template1=# set client_encoding to &amp;#8216;utf-8&amp;#8242;;&lt;br /&gt;
SET&lt;/p&gt;
&lt;p&gt;template1=# show client_encoding;&lt;br /&gt;
client_encoding&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;&lt;br /&gt;
utf-8&lt;br /&gt;
(1 registro)&lt;br /&gt;
template1=# select upper(&amp;#8217;áéíóú&amp;#8217;);&lt;br /&gt;
ERRO: sequência de bytes é inválida para codificação &amp;#8220;UTF8&amp;#8243;: 0xe1e9ed&lt;br /&gt;
DICA: Este erro pode acontecer também se a sequência de bytes nãocorresponde a codificação esperado pelo servidor, que é controlada por &amp;#8220;client_encoding&amp;#8221;.&lt;br /&gt;
ERRO: sequÃªncia de bytes Ã© invÃ¡lida para codificaÃ§Ã£o &amp;#8220;UTF8&amp;#8243;: 0xe1e9ed&lt;br /&gt;
DICA: Este erro pode acontecer tambÃ©m se a sequÃªncia de bytes nÃ£o corresponde a codificaÃ§Ã£o esperado pelo servidor, que Ã© controlada por &amp;#8220;client_encoding&amp;#8221;.&lt;br /&gt;
[trocando a codificação de caracteres do terminal e digitando novamente]&lt;br /&gt;
template1=# select upper(&amp;#8217;áéí&amp;#8217;);&lt;br /&gt;
upper&lt;br /&gt;
&amp;#8212;&amp;#8212;-&lt;br /&gt;
ÁÉÍ&lt;br /&gt;
(1 registro)&lt;br /&gt;
&lt;strong&gt;31) Como visualizar as consultas correntes no Postgres&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Colaboração: Frederico Palma&lt;/p&gt;
&lt;p&gt;Data de Publicação: 16 de fevereiro de 2008&lt;/p&gt;
&lt;p&gt;É necessário habilitar o stats_command_string no postgresql.conf:&lt;/p&gt;
&lt;p&gt;stats_command_string = true&lt;/p&gt;
&lt;p&gt;Essa configuração pode ser alterada em um banco que está ativo sem a necessidade de reiniciá-lo e sem afetar as conexões abertas para recarregar as configurações. Envie um SIGHUP ou use o comando:&lt;/p&gt;
&lt;p&gt;pg_ctl reload&lt;/p&gt;
&lt;p&gt;Quando stats_command_string está ativo a tabela pg_stat_activity armazena todas consultas correntes.&lt;/p&gt;
&lt;p&gt;Realizando a consulta:&lt;/p&gt;
&lt;p&gt;SELECT datname,procpid,current_query FROM pg_stat_activity&lt;/p&gt;
&lt;p&gt;Teremos a lista dos bancos de dados utilizados com seus respectivos processos (PID) referente às consultas.&lt;/p&gt;
&lt;p&gt;SELECT datname,procpid,current_query FROM pg_stat_activity ORDER BY procpid;&lt;/p&gt;
&lt;p&gt;datname | procpid | current_query&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;&lt;br /&gt;
mydatabase1 | 2587 | &amp;lt; IDLE&amp;gt;&lt;br /&gt;
mydatabase2 | 15726 | SELECT * FROM users WHERE id=123 ;&lt;br /&gt;
mydatabase3 | 15851 | &amp;lt; IDLE&amp;gt;&lt;/p&gt;
&lt;p&gt;Publicado originalmente na Dicas-L &amp;#8211; &lt;a href=&quot;http://www.dicas-l.com.br/dicas-l/20080216.php&quot;&gt;http://www.dicas-l.com.br/dicas-l/20080216.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;32)&lt;/p&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/ribafs.wordpress.com/4/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/ribafs.wordpress.com/4/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ribafs.wordpress.com/4/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ribafs.wordpress.com/4/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/ribafs.wordpress.com/4/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ribafs.wordpress.com/4/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/ribafs.wordpress.com/4/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ribafs.wordpress.com/4/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/ribafs.wordpress.com/4/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ribafs.wordpress.com/4/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/ribafs.wordpress.com/4/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ribafs.wordpress.com/4/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ribafs.wordpress.com&amp;amp;blog=630184&amp;amp;post=4&amp;amp;subd=ribafs&amp;amp;ref=&amp;amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-10-08T15:31:34+00:00</dc:date>
	<dc:creator>ribafs</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-578610887231886448.post-110337242098772183">
	<title>Rodrigo Hjort: PGCon Brasil 2009</title>
	<link>http://agajorte.blogspot.com/2009/10/pgcon-brasil-2009.html</link>
	<content:encoded>&lt;br /&gt;Pessoal, faltam só alguns dias para o &lt;span&gt;PGCon Brasil 2009&lt;/span&gt;, o maior evento de &lt;span&gt;PostgreSQL&lt;/span&gt; da América Latina!&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_YGilJHLjrrI/SszWw8PCW6I/AAAAAAAAAJA/b7nM0bQis4Q/s1600-h/topo-pgconbr.jpg&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_YGilJHLjrrI/SszWw8PCW6I/AAAAAAAAAJA/b7nM0bQis4Q/s400/topo-pgconbr.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5389918990346902434&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Confira maiores informações no site do evento:&lt;br /&gt;&lt;br /&gt;[1] &lt;a href=&quot;http://pgcon.postgresql.org.br/2009/&quot;&gt;http://pgcon.postgresql.org.br/2009/&lt;/a&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/578610887231886448-110337242098772183?l=agajorte.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-10-07T11:26:48+00:00</dc:date>
	<dc:creator>Rodrigo HJORT</dc:creator>
</item>
<item rdf:about="http://www.midstorm.org/~fike/weblog/?p=667">
	<title>Fernando Ike: PGCon Brasil 2009 tá logo aí!!!</title>
	<link>http://www.midstorm.org/~fike/weblog/2009/09/26/pgcon-brasil-2009-ta-logo-ai/</link>
	<content:encoded>&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;Eacute; isso, agora em outubro vai ter a terceira edi&amp;ccedil;&amp;atilde;o da &lt;a target=&quot;_blank&quot; href=&quot;http://pgcon.postgresql.org.br/&quot;&gt;PGCon&amp;nbsp;Brasil&lt;/a&gt;. Al&amp;eacute;m de alguns palestrantes brasileiros j&amp;aacute; consagrados, finalmente ter&amp;aacute; o l&amp;iacute;der do time de desenvolvimento PostgreSQL:&amp;nbsp;&lt;a target=&quot;_blank&quot; href=&quot;http://momjian.us/&quot;&gt;Bruce Momjian&lt;/a&gt;. (torcendo par nenhum imprevisto).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; Com mais palestrantes, na Unicamp, esperamos ter muitas pessoas por l&amp;aacute;. &lt;img src=&quot;http://www.midstorm.org/~fike/weblog/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href=&quot;http://pgcon.postgresql.org.br&quot;&gt;&amp;nbsp;&lt;br /&gt;
&lt;img border=&quot;0&quot; width=&quot;432&quot; height=&quot;60&quot; src=&quot;http://pgcon.postgresql.org.br/2009/img/pgcon2009_horizontal_small.gif&quot; alt=&quot;PGCon Brasil 2008&quot; /&gt; &lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2009-09-26T23:43:38+00:00</dc:date>
	<dc:creator>Fernando Ike</dc:creator>
</item>
<item rdf:about="http://jotacomm.wordpress.com/?p=117">
	<title>João Paulo (Jota): PGCon 2009  Inscrições abertas</title>
	<link>http://jotacomm.wordpress.com/2009/09/26/pgcon-2009-inscricoes-abertas/</link>
	<content:encoded>&lt;p&gt;Estão abertas as inscrições para o PGCon 2009.&lt;/p&gt;
&lt;p&gt;Não perca tempo e faça já sua inscrição e aproveite o maior de todos os eventos sobre PostgreSQL. Clique &lt;a href=&quot;http://pgcon.postgresql.org.br/2009/inscr/&quot;&gt; aqui &lt;/a&gt; e confira:&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/jotacomm.wordpress.com/117/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/jotacomm.wordpress.com/117/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/jotacomm.wordpress.com/117/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/jotacomm.wordpress.com/117/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/jotacomm.wordpress.com/117/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/jotacomm.wordpress.com/117/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/jotacomm.wordpress.com/117/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/jotacomm.wordpress.com/117/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/jotacomm.wordpress.com/117/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/jotacomm.wordpress.com/117/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&amp;amp;blog=5266308&amp;amp;post=117&amp;amp;subd=jotacomm&amp;amp;ref=&amp;amp;feed=1&quot; /&gt;</content:encoded>
	<dc:date>2009-09-26T14:43:25+00:00</dc:date>
	<dc:creator>jotacomm</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-8981227237054252370">
	<title>Claudio Bezerra Leopoldino: Monitoração de Comandos com PG_STAT_STATEMENTS</title>
	<link>http://postgresqlbr.blogspot.com/2009/09/monitoracao-de-comandos-com.html</link>
	<content:encoded>Na versão 8.4, foram acrescentados novos recursos de monitoramento de banco que podem ser bastante úteis para se identificar que consultas têm consumido mais tempo, retornam mais dados e quais são executadas com maior freqüência. A pg_stat_statements é uma biblioteca que monitora e coleta estas informações para o usuário. &lt;br /&gt;&lt;br /&gt;Para monitorar o que acontece no sgbd, é necessário manter em memória uma rotina que realize essa atividade. Para colocar esta rotina em execução, deve ser alterado o arquivo de configuração, mais precisamente a variável “shared_preload_libraries”, e reiniciado o servidor. Acrescente no arquivo de configuração postgresql.conf a linha abaixo e reinicie o serviço do banco:&lt;br /&gt;&lt;br /&gt;shared_preload_libraries = '$libdir/pg_stat_statements'       &lt;br /&gt;&lt;br /&gt;Para visualizar se a biblioteca realmente foi colocada na memória pode ser usado o comando show:&lt;br /&gt;&lt;br /&gt;Show shared_preload_libraries&lt;br /&gt;&lt;br /&gt;Execute algumas consultas para que o sgbd armazene valores monitorados. Serão guardados os códigos dos comandos, o número de vezes em que os mesmos foram executados e os tempos de execução.&lt;br /&gt;&lt;br /&gt;O próximo passo é executar o script do arquivo “contrib/pg_stat_statements/pg_stat_statements.sql” que se encontra na pasta de contribs para criar uma visão que mostrará os dados monitorados chamada pg_stat_statements. Abaixo, coloco a consulta padrão aos dados de monitoramento e alguns exemplos adicionais de consultas por número de chamadas ao comando, pelo tempo total e  pelo número de linhas retornado.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;1 - Consulta padrão&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;select * from pg_stat_statements;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;2 - Consultas ordenadas pelo número de chamadas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;select * from pg_stat_statements order by calls desc;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;3 - Consultas ordenadas pelo tempo total utilizado&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;select * from pg_stat_statements order by total_time desc;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;4 - Consultas ordenadas pelo número de linhas retornado&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;select * from pg_stat_statements order by rows desc;&lt;br /&gt;&lt;br /&gt;Caso a quantidade de dados retornados seja muito grande, utilize a função pg_stat_statements_reset para limpar os dados coletados:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;1 – Limpando dados coletados &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;select pg_stat_statements_reset();&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-8981227237054252370?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-09-24T14:22:29+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="http://www.midstorm.org/~telles/?p=600">
	<title>Fabio Telles: 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>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://pgcon.postgresql.org.br&quot;&gt;&lt;img class=&quot;aligncenter&quot; title=&quot;PGCon Brasil 2009&quot; src=&quot;http://pgcon.postgresql.org.br/2009/img/pgcon2009_horizontal_small.gif&quot; alt=&quot;&quot; width=&quot;432&quot; height=&quot;60&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As inscrições para o PGCon Brasil 2009 estarão abertas a partir de 16/09.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;http://pgcon.postgresql.org.br/2009/inscricoes.php&quot;&gt;Garanta já sua inscrição!!!&lt;/a&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h3&gt;Aproveite e baixe também o cartaz do evento &lt;a href=&quot;http://pgcon.postgresql.org.br/2009/divulgue.php&quot;&gt;aqui&lt;/a&gt;.&lt;/h3&gt;</content:encoded>
	<dc:date>2009-09-15T22:51:07+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-578610887231886448.post-6697240777811043597">
	<title>Rodrigo Hjort: Tips on PostgreSQL tuning</title>
	<link>http://agajorte.blogspot.com/2009/09/tips-on-postgresql-tuning.html</link>
	<content:encoded>&lt;br /&gt;&lt;br /&gt;At last I found something more concise towards PostgreSQL DBMS fine tuning. :)&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server&quot; target=&quot;new&quot;&gt;http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/578610887231886448-6697240777811043597?l=agajorte.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-09-08T19:48:02+00:00</dc:date>
	<dc:creator>Rodrigo HJORT</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-578610887231886448.post-6263505748124237059">
	<title>Rodrigo Hjort: Cedrus PostgreSQL Management versão 2.0</title>
	<link>http://agajorte.blogspot.com/2009/09/cedrus-20.html</link>
	<content:encoded>&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_YGilJHLjrrI/Sqb5LZeegcI/AAAAAAAAAI4/ObmVVButxws/s1600-h/cedrus_p.png&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_YGilJHLjrrI/Sqb5LZeegcI/AAAAAAAAAI4/ObmVVButxws/s400/cedrus_p.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5379260779153228226&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Pessoal, estou organizando esforços para o desenvolvimento da segunda geração do &lt;b&gt;Cedrus&lt;/b&gt; [1], um gerenciador para o &lt;b&gt;SGBD PostgreSQL&lt;/b&gt; criado em 2006 na CELEPAR e apresentado ao público no CONISLI [4] naquele mesmo ano em São Paulo.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Dessa vez será adotada a plataforma &lt;b&gt;Launchpad&lt;/b&gt; para o gerenciamento do projeto. Se você tiver interesse em participar de qualquer das seguintes etapas (requisitos, projeto, desenvolvimento ou testes) ou se desejar somente dar sugestões, mesmo se você só tiver experiência com administração de outros SGBDs, sinta-se livre em conhecer o projeto [2] ou em fazer parte da equipe [3]!&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Referências:&lt;/h3&gt;&lt;br /&gt;[1] &lt;a href=&quot;http://sourceforge.net/projects/cedrus&quot; target=&quot;new&quot;&gt;Cedrus 1.0 no SourceForge&lt;/a&gt;&lt;br /&gt;[2] &lt;a href=&quot;https://launchpad.net/cedrus&quot; target=&quot;new&quot;&gt;Cedrus 2.0 no Launchpad&lt;/a&gt;&lt;br /&gt;[3] &lt;a href=&quot;https://launchpad.net/~cedrus&quot; target=&quot;new&quot;&gt;Equipe do Cedrus no Launchpad&lt;/a&gt;&lt;br /&gt;[4] &lt;a href=&quot;http://pt.wikipedia.org/wiki/Conisli&quot; target=&quot;new&quot;&gt;CONISLI - Congresso Internacional de Software Livre&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/578610887231886448-6263505748124237059?l=agajorte.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-09-08T19:47:42+00:00</dc:date>
	<dc:creator>Rodrigo HJORT</dc:creator>
</item>
<item rdf:about="http://www.postgresql.org.br/71 at http://www.postgresql.org.br">
	<title>PostgreSQL Brasil: Replicação de dados com java</title>
	<link>http://www.postgresql.org.br/node/71</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;mailto:sandro.ci02@gmail.com?subject=Contato%20Pagina%20Postgresql%20BR&quot;&gt;Alessandro Silva&lt;/a&gt; nos enviou um link interessante que pode ser &amp;uacute;til para quem quer ter exemplos de replica&amp;ccedil;&amp;atilde;o de dados.&lt;/p&gt;
&lt;p&gt;O link aponta para um v&amp;iacute;deo demonstrando como realizar uma replica&amp;ccedil;&amp;atilde;o bem simples de dados entre duas bases:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=Z7_WCDLVh_o&quot;&gt;http://www.youtube.com/watch?v=Z7_WCDLVh_o&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Outros links sobre replica&amp;ccedil;&amp;atilde;o:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.postgresql.org.br/node/71&quot; target=&quot;_blank&quot;&gt;leia mais&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2009-09-04T00:06:55+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-3735880111929007415">
	<title>Claudio Bezerra Leopoldino: Participe de Concurso &quot;O Elefante está entre nós&quot; e Concorra a 50 Prêmios!!!</title>
	<link>http://postgresqlbr.blogspot.com/2009/08/participe-de-concurso-o-elefente-esta.html</link>
	<content:encoded>A imaginação é mais importante que o conhecimento. E uma iniciativa brasileira promete estimular e recompensar a criativivade da comunidade PostgreSQL, distribuindo 50 prêmios. Apenas a participação de todos pode fazer desta boa idéia um grande sucesso! Se inscreva na &lt;a href=&quot;http://pgcon.postgresql.org.br/2009/index.php&quot;&gt;PGCON&lt;/a&gt; e mostre seu conhecimento!&lt;br /&gt;&lt;br /&gt;O concurso apresenta várias categorias:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Consulta ou script;&lt;/li&gt;&lt;li&gt;Artigo;&lt;/li&gt;&lt;li&gt;Artigo traduzido;&lt;/li&gt;&lt;li&gt;História em quadrinhos; (!!!)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Estudo de caso;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;O pai da idéia é o Telles, do blog Savepoint: &lt;a href=&quot;http://www.midstorm.org/%7Etelles/2009/08/22/concurso-o-elefante-esta-entre-nos/&quot;&gt;http://www.midstorm.org/~telles/2009/08/22/concurso-o-elefante-esta-entre-nos/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As regras de cada categoria estão disponíveis &lt;a href=&quot;http://pgcon.postgresql.org.br/2009/concurso.php&quot;&gt;aqui&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Se esta iniciativa for bem sucedida, certamente será reproduzida mundo afora. Depende da participação de todos! Este blogueiro parabeniza a iniciativa e tentará participar de pelo menos duas categorias, dentro do espírito olímpico: o &quot;importante é competir&quot;.  &lt;a href=&quot;http://www.midstorm.org/%7Etelles/2009/08/22/concurso-o-elefante-esta-entre-nos/&quot;&gt;&lt;span id=&quot;formatbar_Buttons&quot;&gt;&lt;span class=&quot;down&quot; id=&quot;formatbar_CreateLink&quot; title=&quot;Link&quot;&gt;&lt;img src=&quot;http://www.blogger.com/img/blank.gif&quot; alt=&quot;Link&quot; class=&quot;gl_link&quot; border=&quot;0&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-3735880111929007415?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-08-24T09:24:28+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="http://www.midstorm.org/~telles/?p=595">
	<title>Fabio Telles: Concurso “O elefante está entre nós”</title>
	<link>http://www.midstorm.org/~telles/2009/08/22/concurso-o-elefante-esta-entre-nos/</link>
	<content:encoded>&lt;p&gt;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&amp;#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.&lt;/p&gt;
&lt;p&gt;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: &amp;#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: &amp;#8220;Me mostre a sua melhor consulta SQL e ganhe um pendrive&amp;#8221;.&lt;/p&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Consulta ou script;&lt;/li&gt;
&lt;li&gt;Artigo;&lt;/li&gt;
&lt;li&gt;Artigo traduzido;&lt;/li&gt;
&lt;li&gt;História em quadrinhos;&lt;/li&gt;
&lt;li&gt;Estudo de caso;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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&amp;#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.&lt;/p&gt;
&lt;h2&gt;Vá na página do concurso &amp;#8220;&lt;a href=&quot;http://pgcon.postgresql.org.br/2009/concurso.php&quot;&gt;O elefante está entre nós&lt;/a&gt;&amp;#8221; no site do &lt;a href=&quot;http://pgcon.postgresql.org.br&quot;&gt;PGCon Brasil 2009&lt;/a&gt; e participe!&lt;/h2&gt;</content:encoded>
	<dc:date>2009-08-22T10:54:33+00:00</dc:date>
</item>
<item rdf:about="http://jotacomm.wordpress.com/?p=100">
	<title>João Paulo (Jota): Usando o DBLink para interligar dois bancos PostgreSQL</title>
	<link>http://jotacomm.wordpress.com/2009/08/16/usando-o-dblink-para-interligar-dois-bancos-postgresql/</link>
	<content:encoded>&lt;p&gt;Pessoal,&lt;/p&gt;
&lt;p&gt;Hoje vou apresentar como é possível trocar informações entre bancos de dados PostgreSQL. Apresentarei como isso é possível através do uso do DBLink.&lt;/p&gt;
&lt;p&gt;O primeiro passo é instalar o DBLink no banco. Aqui vou considerar que a instalação do PostgreSQL foi realizada de forma compilada e para isso será necessário fazer uso dos arquivos da instalação. Dentro do diretório existe um diretório denominado &lt;strong&gt;contrib&lt;/strong&gt; e dentro deste diretório existe um subdiretório chamado &lt;strong&gt;dblink&lt;/strong&gt;. Para instalar o dblink é necessário realizar a compilação e posteriormente adiciona-lo ao banco desejado.&lt;/p&gt;
&lt;p&gt;Para compilar é necessário executar o seguinte comando:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;make&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;make install&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Após a execução dos comandos acima será gerado um arquivo chamado &lt;strong&gt;dblink.sql&lt;/strong&gt;. Este arquivo deve ser carregado (importado) no banco desejado. Para demonstrar o seu uso trabalharei com os bancos: banco01 e banco02.&lt;/p&gt;
&lt;p&gt;O banco banco01 possui um tabela chamada tabela01 e o banco02 possui uma tabela chamada tabela02. Cada tabela possui um atributo código do tipo inteiro e ambas as tabelas contém 10 registros.&lt;/p&gt;
&lt;p&gt;Carregando o arquivo dblink.sql no banco01.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;psql banco01 -f dblink.sql&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Com o dblink carregado no banco01, o próximo passo é realizar a conexão entre o banco01 e o banco02.&lt;/p&gt;
&lt;p&gt;No exemplo, será considerado que estando conectado no banco01 será requisitada uma conexão com o banco02 para ai sim possibilitar a troca de informações entre os dois bancos de dados.&lt;/p&gt;
&lt;p&gt;Então vamos a prática:&lt;/p&gt;
&lt;p&gt;banco01=# &lt;strong&gt;SELECT dblink_connect(&amp;#8216;conexao&amp;#8217;,'host=localhost port=9999 user=postgres dbname=banco02&amp;#8242;);&lt;/strong&gt;&lt;br /&gt;
dblink_connect&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-&lt;br /&gt;
OK&lt;br /&gt;
(1 row)&lt;/p&gt;
&lt;p&gt;Alguns parâmetros são informados. O primeiro é um nome para a conexão, e o restante parâmetros normais de uma conexão: hostname, porta, usuário, senha (opcional) e o nome do banco. Como para este exemplo a autenticação esta usando o método &lt;strong&gt;trust,&lt;/strong&gt; o parâmetro password foi omitido.&lt;/p&gt;
&lt;p&gt;Com a conexão OK agora é só realizar uma operação qualquer.&lt;/p&gt;
&lt;p&gt;Por exemplo, um join entre a tabela01 que pertence ao banco01 e a tabela02 que pertence ao banco02.&lt;/p&gt;
&lt;p&gt;banco01=# &lt;strong&gt;SELECT tab01.codigo,tab02.codigo FROM tabela01 tab01 INNER JOIN (SELECT * FROM dblink(&amp;#8216;conexao&amp;#8217;,'SELECT codigo FROM tabela02&amp;#8242;) AS resultado(codigo integer)) tab02 ON tab01.codigo=tab02.codigo;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Um outro exemplo pode ser feito com uma operação de escrita (INSERT, UPDATE OU DELETE).&lt;/p&gt;
&lt;p&gt;A partir do banco01 fazendo uma chamada de inserção na tabela02 que está no banco02.&lt;/p&gt;
&lt;p&gt;banco01=# &lt;strong&gt;SELECT dblink_exec(&amp;#8216;conexao&amp;#8217;,'INSERT INTO tabela02 VALUES (generate_series(11,20))&amp;#8217;);&lt;/strong&gt;&lt;br /&gt;
dblink_exec&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-&lt;br /&gt;
INSERT 0 10&lt;br /&gt;
(1 row)&lt;/p&gt;
&lt;p&gt;Conferindo:&lt;/p&gt;
&lt;p&gt;banco01=# &lt;strong&gt;SELECT * FROM dblink(&amp;#8216;conexao&amp;#8217;,'SELECT codigo FROM tabela02&amp;#8242;) AS resultado(codigo integer);&lt;/strong&gt;&lt;br /&gt;
codigo&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8211;&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
20&lt;br /&gt;
(20 rows)&lt;/p&gt;
&lt;p&gt;Para operações de UPDATE e DELETE o procedimento transcorre da mesma maneira do que do comando INSERT.&lt;/p&gt;
&lt;p&gt;Por fim, para encerrar a conexão é necessário executar a seguinte função:&lt;/p&gt;
&lt;p&gt;banco01=# &lt;strong&gt;SELECT dblink_disconnect(&amp;#8216;conexao&amp;#8217;);&lt;/strong&gt;&lt;br /&gt;
dblink_disconnect&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-&lt;br /&gt;
OK&lt;br /&gt;
(1 row)&lt;/p&gt;
&lt;p&gt;Espero que a dica seja útil. Até uma próxima oportunidade &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;Abraços&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/jotacomm.wordpress.com/100/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/jotacomm.wordpress.com/100/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/jotacomm.wordpress.com/100/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/jotacomm.wordpress.com/100/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/jotacomm.wordpress.com/100/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/jotacomm.wordpress.com/100/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/jotacomm.wordpress.com/100/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/jotacomm.wordpress.com/100/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/jotacomm.wordpress.com/100/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/jotacomm.wordpress.com/100/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&amp;amp;blog=5266308&amp;amp;post=100&amp;amp;subd=jotacomm&amp;amp;ref=&amp;amp;feed=1&quot; /&gt;</content:encoded>
	<dc:date>2009-08-16T18:56:23+00:00</dc:date>
	<dc:creator>jotacomm</dc:creator>
</item>
<item rdf:about="http://jotacomm.wordpress.com/?p=94">
	<title>João Paulo (Jota): PostgreSQL 8.4  Agora com GRANT/REVOKE por coluna</title>
	<link>http://jotacomm.wordpress.com/2009/08/15/postgresql-8-4-agora-com-grantrevoke-por-coluna/</link>
	<content:encoded>&lt;p&gt;Olá, pessoal&lt;/p&gt;
&lt;p&gt;Após um período de inatividade estou voltando com força total e neste retorno aproveito para falar de uma das funcionalidades que entraram no core do PostgreSQL na versão 8.4.&lt;/p&gt;
&lt;p&gt;Alguns bancos de dados como o Oracle já possuiam esta característica e o PostgreSQL ainda não, porém a partir da versão 8.4 é possível conceder e retirar privilégios a colunas específicas de uma tabela.&lt;/p&gt;
&lt;p&gt;Segue um exemplo bem simples:&lt;/p&gt;
&lt;p&gt;Criação de um banco de dados para o exemplo.&lt;/p&gt;
&lt;p&gt;postgres=# CREATE DATABASE exemplo_grant_revoke;&lt;/p&gt;
&lt;p&gt;Após criado o banco é realizada uma conexão a ele.&lt;/p&gt;
&lt;p&gt;postgres=# \c exemplo_grant_revoke&lt;br /&gt;
psql (8.4.0)&lt;br /&gt;
You are now connected to database &amp;#8220;exemplo_grant_revoke&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Criação de uma tabela para exemplificar a funcionalidade.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=# CREATE TABLE tabela01(codigo int PRIMARY KEY,nome varchar(30));&lt;br /&gt;
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index &amp;#8220;tabela01_pkey&amp;#8221; for table &amp;#8220;tabela01&amp;#8243;&lt;br /&gt;
CREATE TABLE&lt;/p&gt;
&lt;p&gt;Inserção de dois registros na tabela.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=# INSERT INTO tabela01 VALUES (1,&amp;#8217;Jota.Comm&amp;#8217;),(2,&amp;#8217;PostgreSQL&amp;#8217;);&lt;br /&gt;
INSERT 0 2&lt;br /&gt;
exemplo_grant_revoke=# SELECT * FROM tabela01;&lt;br /&gt;
codigo |    nome&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8211;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;br /&gt;
1 | Jota.Comm&lt;br /&gt;
2 | PostgreSQL&lt;br /&gt;
(2 rows)&lt;/p&gt;
&lt;p&gt;Criação de um usuário para conceder e revocar privilégios.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=# CREATE ROLE usuario_grant_revoke LOGIN;&lt;br /&gt;
CREATE ROLE&lt;/p&gt;
&lt;p&gt;Conexão ao banco de dados com o usuário criado.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=# \c exemplo_grant_revoke usuario_grant_revoke&lt;br /&gt;
psql (8.4.0)&lt;br /&gt;
You are now connected to database &amp;#8220;exemplo_grant_revoke&amp;#8221; as user &amp;#8220;usuario_grant_revoke&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Realização uma operação de SELECT na tabela criada.&lt;/p&gt;
&lt;p&gt;Neste caso ocorrerá um erro pois o usuário usuario_grant_revoke não tem permissão de acesso ao objeto.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=&amp;gt; SELECT * FROM tabela01;&lt;br /&gt;
ERROR:  permission denied for relation tabela01&lt;/p&gt;
&lt;p&gt;Verificando as permissões de acesso. Observa-se que o usuário usuario_grant_revoke não possui nenhuma permissão no objeto tabela01.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=&amp;gt; \z tabela01&lt;br /&gt;
Access privileges&lt;br /&gt;
Schema |   Name   | Type  | Access privileges | Column access privileges&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8211;+&amp;#8212;&amp;#8212;&amp;#8212;-+&amp;#8212;&amp;#8212;-+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;&lt;br /&gt;
public | tabela01 | table |                   |&lt;br /&gt;
(1 row)&lt;/p&gt;
&lt;p&gt;Conexão com o superuser (postgres).&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=&amp;gt; \c exemplo_grant_revoke postgres&lt;br /&gt;
psql (8.4.0)&lt;br /&gt;
You are now connected to database &amp;#8220;exemplo_grant_revoke&amp;#8221; as user &amp;#8220;postgres&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Concessão do privilégio de SELECT em todas as colunas da tabela.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=# GRANT SELECT ON tabela01 TO usuario_grant_revoke;&lt;br /&gt;
GRANT&lt;/p&gt;
&lt;p&gt;Concessão do privilégio de UPDATE na coluna nome da tabela tabela01.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=# GRANT UPDATE(nome) ON tabela01 TO usuario_grant_revoke;&lt;br /&gt;
GRANT&lt;/p&gt;
&lt;p&gt;Conexão ao banco com o usuário usuario_grant_revoke.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=# \c exemplo_grant_revoke usuario_grant_revoke&lt;br /&gt;
psql (8.4.0)&lt;br /&gt;
You are now connected to database &amp;#8220;exemplo_grant_revoke&amp;#8221; as user &amp;#8220;usuario_grant_revoke&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Tentativa da operação de UPDATE sobre a coluna código da tabela tabela01. Um erro será exibido visto que o usuário não tem permissão de UPDATE na coluna código. O privilégio foi concedido apenas para a coluna nome.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=&amp;gt; UPDATE tabela01 SET codigo=10 WHERE codigo=1;&lt;br /&gt;
ERROR:  permission denied for relation tabela01&lt;/p&gt;
&lt;p&gt;Operação de UPDATE na coluna nome da tabela tabela01.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=&amp;gt; UPDATE tabela01 SET nome=&amp;#8217;Jota&amp;#8217; WHERE codigo=1;&lt;br /&gt;
UPDATE 1&lt;/p&gt;
&lt;p&gt;Operação de SELECT em toda a tabela tabela01.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=&amp;gt; SELECT * FROM tabela01;&lt;br /&gt;
codigo |    nome&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8211;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;br /&gt;
2 | PostgreSQL&lt;br /&gt;
1 | Jota&lt;br /&gt;
(2 rows)&lt;/p&gt;
&lt;p&gt;Vefiricando as permissões do usuário usuario_grant_revoke na tabela tabela01.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=&amp;gt; \x&lt;br /&gt;
Expanded display is on.&lt;br /&gt;
exemplo_grant_revoke=&amp;gt; \z tabela01&lt;br /&gt;
Access privileges&lt;br /&gt;
-[ RECORD 1 ]&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-&lt;br /&gt;
Schema                   | public&lt;br /&gt;
Name                     | tabela01&lt;br /&gt;
Type                     | table&lt;br /&gt;
Access privileges        | postgres=arwdDxt/postgres&lt;br /&gt;
: usuario_grant_revoke=r/postgres&lt;br /&gt;
Column access privileges | nome:&lt;br /&gt;
:   usuario_grant_revoke=w/postgres&lt;/p&gt;
&lt;p&gt;O usuário usuario_grant_revoke possui privilégio de SELECT na tabela (usuario_grant_revoke=r/postgres) e possui privilégio de UPDATE na coluna nome (usuario_grant_revoke=w/postgres).&lt;/p&gt;
&lt;p&gt;Conexão ao banco.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=&amp;gt; \c exemplo_grant_revoke postgres&lt;br /&gt;
psql (8.4.0)&lt;br /&gt;
You are now connected to database &amp;#8220;exemplo_grant_revoke&amp;#8221; as user &amp;#8220;postgres&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Remoção dos privilégios concedidos.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=# REVOKE SELECT ON tabela01 FROM usuario_grant_revoke;&lt;br /&gt;
REVOKE&lt;br /&gt;
exemplo_grant_revoke=# REVOKE UPDATE(nome) ON tabela01 FROM usuario_grant_revoke;&lt;br /&gt;
REVOKE&lt;/p&gt;
&lt;p&gt;Conexão ao banco com o usuário usuario_grant_revoke.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=# \c exemplo_grant_revoke usuario_grant_revoke&lt;br /&gt;
psql (8.4.0)&lt;br /&gt;
You are now connected to database &amp;#8220;exemplo_grant_revoke&amp;#8221; as user &amp;#8220;usuario_grant_revoke&amp;#8221;.&lt;/p&gt;
&lt;p&gt;A partir de agora o usuario usuario_grant_revoke não possui mais nenhum privilégio na tabela tabela01.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=&amp;gt; SELECT * FROM tabela01;&lt;br /&gt;
ERROR:  permission denied for relation tabela01&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=&amp;gt; UPDATE tabela01 SET nome=&amp;#8217;Jota.Comm&amp;#8217; WHERE codigo=1;&lt;br /&gt;
ERROR:  permission denied for relation tabela01&lt;/p&gt;
&lt;p&gt;Verificando os privilégios.&lt;/p&gt;
&lt;p&gt;exemplo_grant_revoke=&amp;gt; \z tabela01&lt;br /&gt;
Access privileges&lt;br /&gt;
Schema |   Name   | Type  |     Access privileges     | Column access privileges&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8211;+&amp;#8212;&amp;#8212;&amp;#8212;-+&amp;#8212;&amp;#8212;-+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;&lt;br /&gt;
public | tabela01 | table | postgres=arwdDxt/postgres |&lt;br /&gt;
(1 row)&lt;/p&gt;
&lt;p&gt;Espero que tenha sido claro e didático no exemplo. Até a próxima.&lt;/p&gt;
&lt;p&gt;Abraços&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/jotacomm.wordpress.com/94/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/jotacomm.wordpress.com/94/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/jotacomm.wordpress.com/94/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/jotacomm.wordpress.com/94/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/jotacomm.wordpress.com/94/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/jotacomm.wordpress.com/94/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/jotacomm.wordpress.com/94/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/jotacomm.wordpress.com/94/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/jotacomm.wordpress.com/94/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/jotacomm.wordpress.com/94/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&amp;amp;blog=5266308&amp;amp;post=94&amp;amp;subd=jotacomm&amp;amp;ref=&amp;amp;feed=1&quot; /&gt;</content:encoded>
	<dc:date>2009-08-15T19:02:21+00:00</dc:date>
	<dc:creator>jotacomm</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-7627735809955316245">
	<title>Claudio Bezerra Leopoldino: PostgreSQL 8.4: Falta um bom instalador para Windows!</title>
	<link>http://postgresqlbr.blogspot.com/2009/07/postgresql-84-falta-um-bom-instalador.html</link>
	<content:encoded>Dentre as mais de 290 mudanças da versão 8.3.x para a 8.4.0, uma importante lacuna que surgiu foi a do instalador para windows. O projeto pgInstaller, mantido por &lt;i&gt;Dave Page e Magnus Hagander&lt;/i&gt; gerou instaladores intuitivos e poderosos, com recursos de configuração mais avançados que facilitavam a adição de contribs e a atualização de versão do SGBD em ambiente Windows. No entanto, o projeto só continuará a ser mantido nas versões 8.2.x e 8.3.x.&lt;br /&gt;&lt;br /&gt;Para Linux, além do one-click installer e de live cds, customizações de instaladores para Fedora, SUZE, Ubuntu e Debian estão  disponíveis para o PostgreSQL 8.4.&lt;br /&gt;&lt;br /&gt;Mais informações &lt;a href=&quot;http://www.postgresql.org/download/&quot;&gt;aqui&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Espera-se que sujam mais opções de instaladores além do limitado &quot;One-Click Installer&quot; da página oficial do PostgreSQL. &lt;span&gt;Quem se habilita a fazer um?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Creio que o impacto para a difusão do PostgreSQL 8.4 pode ser significativo na plataforma Windows. Não podemos  subestimar o impacto da facilidade de instalação para a adoção e atualização de qualquer ferramenta. O que vocês acham?&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Complemento 13/08/2009:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;- Depois de instalar em algumas máquinas, posso afirmar que o one-click installer é bastante funcional e estável. No entanto, continuo a me sentir incomodado por ter menos uma opção de instalação. E o desafio continua a quem se dispor a fazer um instalador alternativo!!!&lt;/span&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-7627735809955316245?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-08-13T09:46:38+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="http://jotacomm.wordpress.com/?p=86">
	<title>João Paulo (Jota): PGCon 2009  Grade oficial do evento</title>
	<link>http://jotacomm.wordpress.com/2009/08/11/pgcon-2009-grade-oficial-do-evento/</link>
	<content:encoded>&lt;p&gt;&lt;strong&gt;Maior evento sobre PostgreSQL da América Latina acontece em Campinas.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A Unicamp já se prepara para receber a “3ª Conferência Brasileira de PostgreSQL” ou simplesmente PGCon Brasil 2009.&lt;/p&gt;
&lt;p&gt;Nos dias 23 e 24 de outubro, centenas de estudantes e profissionais de TI participarão do maior evento latino-americano sobre o mais poderoso sistema gerenciador de banco de dados de código livre do mundo, o PostgreSQL.&lt;/p&gt;
&lt;p&gt;A programação completa da Conferência já foi confirmada. O evento contará com palestras, tutoriais e os já consagrados Hacker Talks e Lightning Talks. Estarão presentes desenvolvedores nacionais do PostgreSQL como Euler Taveira e Francisco Figueiredo Jr, internacionais como Bruce Momjian, Magnus Hagander além de profissionais reconhecidos no Brasil como Fernando Ike, Roberto Mello, Leandro Dutra entre outros.&lt;/p&gt;
&lt;p&gt;Na programação, estarão temas como as últimas novidades da versão 8.4 do PostgreSQL, técnicas de monitoramento, segurança, ajustes de desempenho e muito mais.&lt;/p&gt;
&lt;p&gt;Mais informações sobre o evento, podem ser obtidas no site oficial em: &lt;a href=&quot;http://pgcon.postgresql.org.br/2009/index.php&quot; target=&quot;_blank&quot;&gt;http://pgcon.postgresql.org.br/2009/index.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Abraços&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/jotacomm.wordpress.com/86/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/jotacomm.wordpress.com/86/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/jotacomm.wordpress.com/86/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/jotacomm.wordpress.com/86/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/jotacomm.wordpress.com/86/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/jotacomm.wordpress.com/86/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/jotacomm.wordpress.com/86/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/jotacomm.wordpress.com/86/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/jotacomm.wordpress.com/86/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/jotacomm.wordpress.com/86/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&amp;amp;blog=5266308&amp;amp;post=86&amp;amp;subd=jotacomm&amp;amp;ref=&amp;amp;feed=1&quot; /&gt;</content:encoded>
	<dc:date>2009-08-11T21:31:46+00:00</dc:date>
	<dc:creator>jotacomm</dc:creator>
</item>
<item rdf:about="http://www.midstorm.org/~telles/?p=587">
	<title>Fabio Telles: 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>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://pgcon.postgresql.org.br&quot;&gt; &lt;/a&gt;&lt;a href=&quot;http://pgcon.postgresql.org.br&quot;&gt;&lt;img class=&quot;alignnone&quot; title=&quot;PGCon Brasil 2009&quot; src=&quot;http://pgcon.postgresql.org.br/2009/img/pgcon2009_horizontal_small.gif&quot; alt=&quot;&quot; width=&quot;432&quot; height=&quot;60&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Sim, sim, é verdade! A &lt;a href=&quot;http://pgcon.postgresql.org.br/2009/programacao.php&quot;&gt;grade oficial&lt;/a&gt; está no ar!!!&lt;/h2&gt;
&lt;p&gt;Vá lá dar uma olhada e me diga o que você acha&amp;#8230;&lt;/p&gt;
&lt;p&gt;Vou contar um pouco dos bastidores do evento:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Foram ao todo 40 propostas na chamada de trabalhos;&lt;/li&gt;
&lt;li&gt;2 Palestrantes internacionais convidados;&lt;/li&gt;
&lt;li&gt;65 pessoas votaram nas propostas e disseram quais eram as suas prediletas;&lt;/li&gt;
&lt;li&gt;3 pessoas na banca avaliadora fizeram a seleção final das palestras;&lt;/li&gt;
&lt;li&gt;4 tutoriais aprovados;&lt;/li&gt;
&lt;li&gt;3 palestras avançadas;&lt;/li&gt;
&lt;li&gt;4 Hacker Talks (palestras para quem deseja conhecer e  contribuir com o código do PostgreSQL);&lt;/li&gt;
&lt;li&gt;11 palestras normais;&lt;/li&gt;
&lt;li&gt;12 Lithning Talks  (palestras curtas de até 5 minutos cada);&lt;/li&gt;
&lt;li&gt;3 salas simultâneas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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&amp;#8230; em breve!&lt;/p&gt;</content:encoded>
	<dc:date>2009-08-10T19:13:18+00:00</dc:date>
</item>
<item rdf:about="http://www.midstorm.org/~telles/?p=584">
	<title>Fabio Telles: 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>
	<content:encoded>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.</content:encoded>
	<dc:date>2009-08-05T18:58:52+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-8179270431637399242">
	<title>Claudio Bezerra Leopoldino: Psql 8.4: Novas Funcionalidades!</title>
	<link>http://postgresqlbr.blogspot.com/2009/07/psql-84-novas-funcionalidades.html</link>
	<content:encoded>O psql em sua nova versão apresenta uma série de pequenas novidades, inclusive a promessa de compatibilidade com versões anteriores do Postgres, permitindo que de um console se acesse bancos de servidores mais antigos. A lista de alterações completa pode ser vista &lt;a href=&quot;http://www.postgresql.org/about/press/features84.html&quot;&gt;aqui&lt;/a&gt;. Abaixo, comento algumas das mudanças que reputo como mais significativas:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Listando o Tamanho de Objetos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pequenas funcionalidades podem ser ainda mais interessantes para o usuário do utilitário que os avanços mais complexos. A facilidade de se obter informações detalhadas, particularmente sobre espaço ocupado por objetos em disco certamente é uma delas.&lt;br /&gt;&lt;br /&gt;O uso da sintaxe \dt lista as tabelas criadas no banco. Na versão 8.4, pode ser utilizada a sintaxe \dt+, que retorna o espaço em disco ocupado pela tabela.&lt;br /&gt;&lt;br /&gt;Este recurso também pode ser utilizado para índices. Digite \di para informações dos índices, e \di+ para um maior detalhamento com espaço em disco ocupado e descrição.&lt;br /&gt;&lt;br /&gt;Para bancos de dados, a sintaxe é a mesma. Digite \l para informações dos bancos de dados, e \l+ para um maior detalhamento com espaço em disco ocupado e descrição.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Abrindo Editor para Funções&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Editar funções dentro do psql não é uma tarefa muito agradável. Paras códigos mais extensos chega a ser penosa. Para minorar o problema, a opção \ef abre um editor externo para edição do código.&lt;br /&gt;&lt;br /&gt;A sintaxe é: \ef &lt;br /&gt;&lt;br /&gt;No windows, abre o notepad. Edite o texto, salve e feche o editor. No psql, digite ';' e tecle ENTER. O sistema vai registrar as alterações na função.&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-8179270431637399242?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-07-29T09:05:26+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="http://www.postgresql.org.br/67 at http://www.postgresql.org.br">
	<title>PostgreSQL Brasil: Dica: ZEOS Lib - Componente para acesso nativo ao PostgreSQL.</title>
	<link>http://www.postgresql.org.br/node/67</link>
	<content:encoded>&lt;p&gt;Bruno da Silva Reis nos enviou uma dica de uso da ZEOS Lib, que &amp;eacute; um componente muito utilizado por desenvolvedores Delphi para acesso nativo ao PostgreSQL, sem que seja necess&amp;aacute;rio o uso de drivers externos como ODBC, JDBC, BDE e outros artif&amp;iacute;cios.&lt;/p&gt;
&lt;p&gt;Voc&amp;ecirc; pode fazer o &lt;a href=&quot;http://sourceforge.net/projects/zeoslib/ &quot;&gt;download do componente aqui&lt;/a&gt; ou &lt;a href=&quot;http://zeos.firmos.at/portal.php&quot;&gt;participar dos f&amp;oacute;runs aqui&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</content:encoded>
	<dc:date>2009-07-26T18:26:43+00:00</dc:date>
</item>
<item rdf:about="http://www.postgresql.org.br/65 at http://www.postgresql.org.br">
	<title>PostgreSQL Brasil: Resultados da pesquisa sobre o uso do PostgreSQL no Brasil.</title>
	<link>http://www.postgresql.org.br/pesquisas/2009/utilizacao-do-postgres-no-brasil</link>
	<content:encoded>&lt;p&gt;Foi encerrada a &lt;a href=&quot;http://www.postgresql.org.br/node/61&quot;&gt;&amp;quot;1&amp;ordf; pesquisa sobre o uso do PostgreSQL no Brasil&amp;quot;&lt;/a&gt;.&amp;nbsp; Foram ao todo 164 pesquisas respondidas entre os dias 17/06/2009 e 01/07/2009. A pesquisa n&amp;atilde;o possui um recorte estat&amp;iacute;stico no sentido de representar o universos de empresas brasileiras que utilizam bancos de dados, mas sim uma pesquisa de resposta espont&amp;acirc;nea sobre usu&amp;aacute;rios de PostgreSQL que acompanham um pouco o universo da comunidade brasileira.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.postgresql.org.br/pesquisas/2009/utilizacao-do-postgres-no-brasil&quot; target=&quot;_blank&quot;&gt;leia mais&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2009-07-07T16:00:25+00:00</dc:date>
</item>
<item rdf:about="http://www.midstorm.org/~telles/?p=573">
	<title>Fabio Telles: 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>
	<content:encoded>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;http://pt.wikipedia.org/wiki/ACID&quot;&gt;ACID&lt;/a&gt; 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 &lt;a href=&quot;http://www.postgresql.org/docs/8.4/static/sql-prepare-transaction.html&quot;&gt;commit em duas fases&lt;/a&gt; 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 &lt;strong&gt;não&lt;/strong&gt; 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.&lt;/p&gt;
&lt;p&gt;Há uma solução no universo PostgreSQL conhecida como PGCluster, que&lt;strong&gt; não&lt;/strong&gt; 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?&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;O &lt;a href=&quot;http://bucardo.org/&quot;&gt;Bucardo&lt;/a&gt; é 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.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bom, mas então como resolvemos o problema das filiais??? Duas abordagens distintas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;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;&lt;/li&gt;
&lt;li&gt;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 &lt;a href=&quot;http://pgfoundry.org/projects/plproxy/&quot;&gt;PL/Proxy&lt;/a&gt; do Skytools.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;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:&lt;/li&gt;
&lt;li&gt;Tabelas que são atualizadas apenas em um nó como a matriz e são consultadas por todas as outras filiais;&lt;/li&gt;
&lt;li&gt;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;&lt;/li&gt;
&lt;li&gt;Tabelas onde cada filial deve poder atualizar qualquer registro da tabela, independente de qual filial seja.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;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 &lt;a href=&quot;http://www.slony.info/&quot;&gt;Slony I&lt;/a&gt; e o &lt;a href=&quot;http://pgfoundry.org/projects/skytools/&quot;&gt;Londiste&lt;/a&gt;. A ideia é simples, você atualiza as informações em uma única base e as informações são replicadas para os demais nós.&lt;/li&gt;
&lt;li&gt;Tudo que estiver no 3º caso deve ser modificado para cair no 2º caso através do &lt;a href=&quot;http://www.postgresql.org/docs/8.4/static/ddl-partitioning.html&quot;&gt;particionamento de tabelas&lt;/a&gt;. 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;&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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 &lt;a href=&quot;http://www.postgresql.org/docs/8.4/static/dblink.html&quot;&gt;DBLink&lt;/a&gt;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 &lt;strong&gt;síncrono&lt;/strong&gt; e &lt;strong&gt;assíncrono&lt;/strong&gt;, e &lt;strong&gt;master/slave&lt;/strong&gt; e&lt;strong&gt; multimaster&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;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?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Para saber mais sobre os diferentes tipos de Cluster e Replicação, veja neste blog o texto: &lt;a href=&quot;http://www.midstorm.org/~telles/2007/08/24/cluster-replicacao/&quot;&gt;Cluster != Replicação&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Para saber mais sobre soluções de alta disponibilidade e balanceamento de carva, veja o texto da documentação oficial: &lt;a href=&quot;http://www.postgresql.org/docs/8.4/static/high-availability.html&quot;&gt;High Availability, Load Balancing, and Replication&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
	<dc:date>2009-07-06T20:15:10+00:00</dc:date>
</item>
<item rdf:about="http://www.midstorm.org/~fike/weblog/?p=632">
	<title>Fernando Ike: Eu fui: FISL10</title>
	<link>http://www.midstorm.org/~fike/weblog/2009/07/03/eu-fui-fisl10/</link>
	<content:encoded>&lt;p&gt;&lt;img width=&quot;280&quot; height=&quot;200&quot; alt=&quot;&quot; src=&quot;http://www.midstorm.org/~fike/weblog/wp-content/uploads/fisl10banner.png&quot; /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; O&amp;nbsp;&lt;a target=&quot;_blank&quot; href=&quot;http://www.fisl.org.br&quot;&gt;FISL&lt;/a&gt; &amp;eacute; como uma festa religiosa, todo ano as pessoas fazem romaria para participar da festa. Para muitos de n&amp;oacute;s &lt;a href=&quot;http://pt.wikipedia.org/wiki/Nerd&quot; target=&quot;_blank&quot;&gt;nerds&lt;/a&gt;/&lt;a href=&quot;http://pt.wikipedia.org/wiki/Geek&quot; target=&quot;_blank&quot;&gt;geeks&lt;/a&gt; o FISL&amp;nbsp;&amp;eacute; nossa festa santa, nossa Festa da Padroeira. &lt;img src=&quot;http://www.midstorm.org/~fike/weblog/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp; O&amp;nbsp;FISL&amp;nbsp;10 que acabou de acontecer foi especial pois &amp;eacute; a comemora&amp;ccedil;&amp;atilde;o de 10 anos de evento. Muita gente que deixou de vir, voltou a participar do FISL. Com um pouco mais de 8 mil pessoas, o evento contou com a ilustr&amp;iacute;ssima presen&amp;ccedil;a do Presidente da Rep&amp;uacute;blica.&amp;nbsp; N&amp;atilde;o lembro se um presidente de um pa&amp;iacute;s fosse para um evento de Software Livre. &lt;img src=&quot;http://www.midstorm.org/~fike/weblog/wp-includes/images/smilies/icon_biggrin.gif&quot; alt=&quot;:D&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;Esse ano ajudei um pouco mais do que costumei, ajudei na avalia&amp;ccedil;&amp;atilde;o das palestras&amp;nbsp; e apresentei uma palestra sobre o&amp;nbsp;&lt;a target=&quot;_blank&quot; href=&quot;http://www.postgresql.org&quot;&gt;PostgreSQL 8.4&lt;/a&gt;, tamb&amp;eacute;m ajudei&amp;nbsp; na coordena&amp;ccedil;&amp;atilde;o do evento comunit&amp;aacute;rio do PostgreSQL. &amp;Eacute; sempre bom reencontrar os amigos, conhecer pessoas e etc. Resumindo&amp;#8230;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&amp;nbsp; Palestras&lt;/h2&gt;
&lt;p&gt;&amp;nbsp; As palestras estavam muito diversificadas, com palestras de excelente n&amp;iacute;vel t&amp;eacute;cnico &amp;agrave; palestras mais filos&amp;oacute;ficas mas ainda sim muito interessante. Esse ano as palestras patrocinadas estavam marcadas com &amp;quot;P&amp;quot;, facilitando que o participante do FISL&amp;nbsp;identificadas como palestra de Patrocinadores, umas das grandes reclama&amp;ccedil;&amp;otilde;es do ano passado foi atendida pela organiza&amp;ccedil;&amp;atilde;o.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; Num universo de mais de 300 palestras, sempre tem as ruins, de pouca qualidade ou inexperi&amp;ecirc;ncia do palestrante em apresentar. Esse ano foi diferente e isso faz parte do evento. Ter 100% de palestras excelentes &amp;eacute; um desafio quase que imposs&amp;iacute;vel pela os diferentes interesses objetivos e interesse dos participantes. As poucas que vi, gostei.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; O&amp;nbsp;Peter Sunde do &lt;a target=&quot;_blank&quot; href=&quot;http://thepiratebay.org&quot;&gt;Pirate Bay&lt;/a&gt; foi imperd&amp;iacute;vel.&amp;nbsp; &lt;a target=&quot;_blank&quot; href=&quot;http://stallman.org/&quot;&gt;Richard Stallman&lt;/a&gt;, &lt;a target=&quot;_blank&quot; href=&quot;http://www.linuxjournal.com/blogs/jon-maddog-hall&quot;&gt;John Maddog Hall&lt;/a&gt; e &lt;a target=&quot;_blank&quot; href=&quot;http://samadeu.blogspot.com/&quot;&gt;S&amp;eacute;rgio Amadeu&lt;/a&gt; fizeram suas apresenta&amp;ccedil;&amp;otilde;es tradicionalmente cheias e empolgantes.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; Para variar, eu sempre termino na &amp;uacute;ltima hora minha palestra, espero que as pessoas n&amp;atilde;o tenham odiado demais.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&amp;nbsp; Infra-estrutura&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; O problema com internet ainda continua sendo um problema para quem usou as diversas redes sem fio. Tinha tanta rede sem fio (criadas pelos participantes) l&amp;aacute; que todos os canais de frequ&amp;ecirc;ncia estavam lotados, com muita interfer&amp;ecirc;ncia. Quem usou conex&amp;atilde;o 3G conseguiu usar internet melhor.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; Quem sabe no FISL 11 teremos uma rede &lt;a target=&quot;_blank&quot; href=&quot;http://pt.wikipedia.org/wiki/Redes_Mesh&quot;&gt;MESH&lt;/a&gt; que resolver&amp;aacute; esse tipo de problema?&amp;nbsp;Volunt&amp;aacute;rios?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; Esse ano foi mais organizado que o ano passado, as filas dos crach&amp;aacute;s foram pequenas comparado com os anos anteriores. Tinha boa sinaliza&amp;ccedil;&amp;atilde;o das salas.Os estandes em maior quantidade e melhores, uma sala de imprensa e blogueiros. A impress&amp;atilde;o geral que esse ano estava mais organizado.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&amp;nbsp;&amp;nbsp; Geral&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp;rela&amp;ccedil;&amp;atilde;o do evento com institui&amp;ccedil;&amp;otilde;es p&amp;uacute;blicas e palestrantes internacionais ainda ficou um pouco a desejar. =/&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; O&amp;nbsp;evento acabar &amp;agrave;s 18 horas todos os dias (exceto s&amp;aacute;bado) n&amp;atilde;o foi legal.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Esse ano eu perdi a Festa de Lan&amp;ccedil;amento do &lt;a target=&quot;_blank&quot; href=&quot;http://www.debian.org/releases/lenny/&quot;&gt;Lenny&lt;/a&gt; no estande do &lt;a target=&quot;_blank&quot; href=&quot;http://www.debian.org&quot;&gt;Debian&lt;/a&gt;, pensamos em aproveitar e comemorar junto o lan&amp;ccedil;amento do PostgreSQl 8.4 mas n&amp;atilde;o nos organizamos o suficiente (&lt;a target=&quot;_blank&quot; href=&quot;http://www.postgresql.org.br&quot;&gt;PostgreSQL&amp;nbsp;Brasil&lt;/a&gt;), quem sabe o ano que vem. &lt;img src=&quot;http://www.midstorm.org/~fike/weblog/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; O&amp;nbsp;&lt;a target=&quot;_blank&quot; href=&quot;http://zyakannazio.eti.br/fudeblog/&quot;&gt;C&amp;eacute;sar Cardoso&lt;/a&gt; quebrou sua miss&amp;atilde;o de n&amp;atilde;o assistir palestras e esse ano assistiu.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Seria bom ano que vem ter uma mini-pgcon brasil dentro do FISL. &lt;img src=&quot;http://www.midstorm.org/~fike/weblog/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Senti a falta do estande do &lt;a target=&quot;_blank&quot; href=&quot;http://www.google.com&quot;&gt;Google&lt;/a&gt; e a presen&amp;ccedil;a da &lt;a target=&quot;_blank&quot; href=&quot;http://www.ibm.com&quot;&gt;IBM&lt;/a&gt; e a &lt;a target=&quot;_blank&quot; href=&quot;http://www.oracle.com&quot;&gt;Oracle&lt;/a&gt; estve com um estande&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Ah, ia deixar passar batido. N&amp;atilde;o participei mas pelo que vi o &lt;a target=&quot;_blank&quot; href=&quot;http://www.fisl.org.br/10/www/festival-de-cultura-livre&quot;&gt;Festival de Cultura Livre&lt;/a&gt; foi bem bacana. &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Por fim, fazer o encerramento na &amp;aacute;rea de estandes e comunidades foi bem legal. &lt;img src=&quot;http://www.midstorm.org/~fike/weblog/wp-includes/images/smilies/icon_biggrin.gif&quot; alt=&quot;:D&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;</content:encoded>
	<dc:date>2009-07-03T17:31:42+00:00</dc:date>
	<dc:creator>Fernando Ike</dc:creator>
</item>
<item rdf:about="http://www.midstorm.org/~fike/weblog/?p=626">
	<title>Fernando Ike: PostgreSQL 8.4 lançado</title>
	<link>http://www.midstorm.org/~fike/weblog/2009/07/01/postgresql-8-4-lancado/</link>
	<content:encoded>&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Continuando a nota anterior, esta semana &amp;eacute; uma semana de lan&amp;ccedil;amento de vers&amp;otilde;es de alguns projetos importantes, a nota anterior comentava sobre o &lt;a href=&quot;http://www.mozilla.com/en-US/firefox/firefox.html&quot; target=&quot;_blank&quot;&gt;Firefox 3.5&lt;/a&gt; que foi lan&amp;ccedil;ado essa semana. Foi lan&amp;ccedil;ado tamb&amp;eacute;m a vers&amp;atilde;o do &lt;a href=&quot;http://www.postgresql.org/docs/8.4/static/index.html&quot; target=&quot;_blank&quot;&gt;PostgreSQL 8.4&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; Ap&amp;oacute;s um ciclo de um pouco mais de um ano, saiu a nova vers&amp;atilde;o do PostgreSQL 8.4. Como poderia esperar, est&amp;aacute; mais r&amp;aacute;pido, com mais recursos e funcionalidades. &lt;img src=&quot;http://www.midstorm.org/~fike/weblog/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; A Nota de Lan&amp;ccedil;amento tem maiores detalhes. A&amp;nbsp;nova vers&amp;atilde;o do PostgreSQL&amp;nbsp;foi apresentada numa palestra no &lt;a href=&quot;http://www.fisl.org.br/10/www/&quot; target=&quot;_blank&quot;&gt;FISL 10&lt;/a&gt; (toscamente feita por mim) e as l&amp;acirc;minas da apresenta&amp;ccedil;&amp;atilde;o podem ser vista aqui abaixo ou baixar o &lt;a href=&quot;http://www.midstorm.org/~fike/palestras/pg84.pdf&quot; target=&quot;_blank&quot;&gt;arquivo&lt;/a&gt; da palestra. Aproveito para agradecer o &lt;a href=&quot;http://www.timbira.com&quot; target=&quot;_blank&quot;&gt;Euler&lt;/a&gt; que deu uma senhora ajuda com a palestra. &lt;img src=&quot;http://www.midstorm.org/~fike/weblog/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; Ah! se for usu&amp;aacute;rio de &lt;a href=&quot;http://www.debian.org&quot; target=&quot;_blank&quot;&gt;Debian&lt;/a&gt;, pode ficar tranquilo que o 8.4 j&amp;aacute; est&amp;aacute; empacotado. Agora para mim, tem muito trabalho pela frente, pois tenho &lt;a href=&quot;http://alioth.debian.org/projects/pkg-postgresql&quot; target=&quot;_blank&quot;&gt;alguns pacotes no Debian&lt;/a&gt; que precisar&amp;atilde;o ser recompilados. &lt;img src=&quot;http://www.midstorm.org/~fike/weblog/wp-includes/images/smilies/icon_wink.gif&quot; alt=&quot;;)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;__ss_1671811&quot;&gt;
&lt;p&gt;&lt;a title=&quot;PostgreSQL 8.4&quot; href=&quot;http://www.slideshare.net/fernandoike/postgresql-84&quot;&gt;PostgreSQL 8.4&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;View more &lt;a href=&quot;http://www.slideshare.net/&quot;&gt;presentations&lt;/a&gt; from &lt;a href=&quot;http://www.slideshare.net/fernandoike&quot;&gt;fernandoike&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</content:encoded>
	<dc:date>2009-07-02T02:57:42+00:00</dc:date>
	<dc:creator>Fernando Ike</dc:creator>
</item>
<item rdf:about="http://www.midstorm.org/~telles/?p=570">
	<title>Fabio Telles: Lançado o PostgreSQL 8.4!!!</title>
	<link>http://www.midstorm.org/~telles/2009/07/01/lancado-o-postgresql-8-4/</link>
	<content:encoded>&lt;p&gt;Sim senhores, muitas novidades e hora de preparar o calendário de migrações para a nova versão oficial do PostgreSQL, o banco de dados livre mais avançado do mundo.&lt;/p&gt;
&lt;h2&gt;Vejam a &lt;a href=&quot;http://www.postgresql.org/about/press/presskit84.html.br&quot;&gt;nota oficial de lançamento em pt_BR&lt;/a&gt;.&lt;/h2&gt;</content:encoded>
	<dc:date>2009-07-01T20:28:14+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3371915898459901668.post-836973641950793156">
	<title>Claudio Bezerra Leopoldino: PostgreSQL 8.4 Enfim Liberado!</title>
	<link>http://postgresqlbr.blogspot.com/2009/07/postgresql-84-enfim-liberado.html</link>
	<content:encoded>O download do PostgreSQL 8.4 (8.4.0) foi enfim liberado!&lt;br /&gt;&lt;br /&gt;A nova versão promete mais velocidade e facilidade de uso, melhorias no monitoramento e administração. É instalar e testar para ver! Em breve detalharei neste espaço as principais novidades deste aguardado release!&lt;br /&gt;&lt;br /&gt;Abaixo, os links mais úteis:&lt;br /&gt;&lt;br /&gt;* Download&lt;br /&gt;  &lt;a href=&quot;http://www.postgresql.org/download/&quot; target=&quot;_blank&quot;&gt;http://www.postgresql.org/download/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;* Notas de Lançamento&lt;br /&gt;  &lt;a href=&quot;http://www.postgresql.org/docs/8.4/static/release-8-4.html&quot; target=&quot;_blank&quot;&gt;http://www.postgresql.org/docs/8.4/static/release-8-4.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;* Funções implementadas na versão&lt;br /&gt;  &lt;a href=&quot;http://www.postgresql.org/about/press/features84.html&quot; target=&quot;_blank&quot;&gt;http://www.postgresql.org/about/press/features84.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;* Press Release&lt;br /&gt;  &lt;a href=&quot;http://www.postgresql.org/about/press/presskit84.html&quot; target=&quot;_blank&quot;&gt;http://www.postgresql.org/about/press/presskit84.html&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3371915898459901668-836973641950793156?l=postgresqlbr.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-07-01T15:55:41+00:00</dc:date>
	<dc:creator>cbleopoldino</dc:creator>
</item>
<item rdf:about="http://www.midstorm.org/~telles/?p=564">
	<title>Fabio Telles: Pesquisa sobre backup em PostgreSQL</title>
	<link>http://www.midstorm.org/~telles/2009/06/25/pesquisa-sobre-backup-em-postgresql/</link>
	<content:encoded>Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.</content:encoded>
	<dc:date>2009-06-25T12:21:51+00:00</dc:date>
</item>
<item rdf:about="http://www.midstorm.org/~telles/?p=552">
	<title>Fabio Telles: Pesquisa sobre o uso do PostgreSQL no Brasil</title>
	<link>http://www.midstorm.org/~telles/2009/06/17/pesquisa-sobre-o-uso-do-postgresql-no-brasil/</link>
	<content:encoded>&lt;p&gt;Ouvi uma piada contada no &lt;a href=&quot;http://pgcon.postgresql.org.br/2007/index.html&quot;&gt;PGCon Brasil 2007&lt;/a&gt; que eu nunca esqueço: &lt;em&gt;&amp;#8220;O PostgreSQL é a amante dos bancos de dados. Todo mundo usa, mas quase ninguém confessa em público&amp;#8221;&lt;/em&gt;. Ok, a piada pode te levar a comparações mais curiosas, mas a verdade é nua e crua: o Brasil é um dos países que mais utiliza o PostgreSQL, mas ninguém sabe onde. Sim, sabemos de inúmeros casos onde a empresa tem contratos que a proíbem até de divulgar que utilizam o PostgreSQL. Então, passados mais de um ano e após a prova cabal de que o Google Docs realmente funciona, resolvi fazer a coisa da forma mais simples possível: não leva nem 5 minutos para responder a pesquisa e deve gerar dados com um pouco do perfil dos usuários do PostgreSQL no Brasil.&lt;/p&gt;
&lt;h3&gt;Preencha a pesquisa agora &lt;strong&gt;&lt;a href=&quot;https://spreadsheets.google.com/viewform?formkey=cnlreFpqOFhZVzlNQkhSSHRkb0duV3c6MA..&quot;&gt;aqui&lt;/a&gt;&lt;/strong&gt;.&lt;/h3&gt;
&lt;h3&gt;Mini FAQ&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; Sim, vamos públicar o resultado no final.&lt;/li&gt;
&lt;li&gt;Não, não sei quando ainda, mas deve levar pelo menos um mês.&lt;/li&gt;
&lt;li&gt;Não, não vamos divulgar nomes de empresas e pessoas que preencheram a pesquisa.&lt;/li&gt;
&lt;li&gt;Sim, A chamada para a pesquisa foi &lt;a href=&quot;http://www.postgresql.org.br/node/61&quot;&gt;divulgada&lt;/a&gt; hoje no &lt;a href=&quot;http://www.postgresql.org.br&quot;&gt;site oficial da comunidade&lt;/a&gt; e é lá que vamos publicar os resultados em breve.&lt;/li&gt;
&lt;li&gt;Sim, você pode e deve divulgar a pesquisa para aquele seu cliente que você sabe que utiliza PostgreSQL.&lt;/li&gt;
&lt;li&gt;Sim, você pode e deve divulgar a pesquisa em sites, blogs, listas de discução, etc.&lt;/li&gt;
&lt;li&gt;Sim, vamos fazer uma pesquisa qualitativa com mas detalhes sobre casos de uso brasileiros. Em breve&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
	<dc:date>2009-06-17T14:50:22+00:00</dc:date>
</item>

</rdf:RDF>
