<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3371915898459901668</id><updated>2012-01-22T10:10:08.676-03:00</updated><category term='Outros'/><category term='Limitações'/><category term='Notícias'/><category term='PostgreSQL'/><category term='SQL'/><category term='Ferramentas'/><category term='Algoritmo'/><category term='Links'/><category term='DBA'/><category term='Cases'/><category term='Outro'/><category term='LIVRO'/><category term='PGSQL'/><title type='text'>Meu Blog de PostgreSQL!!!</title><subtitle type='html'>No ar desde 2007!
Blog com informações e notícias sobre o banco de dados PostgreSQL, aquele que todos adoramos usar. Trata-se de uma ferramenta livre e de código aberto, mantida por uma comunidade ativa de usuários da qual você é convidado fazer parte.
Textos, idéias e outras contribuições podem ser enviadas para Cláudio Bezerra Leopoldino: cbleopoldino@ea.ufrgs.br</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default?start-index=101&amp;max-results=100'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>203</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-5892626199986025464</id><published>2011-11-25T13:56:00.002-03:00</published><updated>2011-11-25T13:59:04.613-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Algoritmo'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Criação de Crosstabs no PostgreSQL</title><content type='html'>Você já criou uma tabela cruzada, ou &lt;i&gt;crosstab&lt;/i&gt;, utilizando SQL? Você sabia que era possível? Possivelmente você nunca precisou, mas criar &lt;i&gt;crosstabs&lt;/i&gt; é um recurso à disposição que pode ser bastante útil!&lt;br /&gt;&lt;br /&gt;Tabelas cruzadas apresentam mais de uma dimensão de forma integrada aos usuários, sendo uma forma importante para a melhor visualização de dados consolidados. Geralmente o cruzamento de dados neste tipo de tabela é feito na camada de apresentação das aplicações ou em componentes geradores de relatórios, mas isso não impede que você também possa implementar &lt;i&gt;crosstabs&lt;/i&gt; via banco de dados. &lt;br /&gt;&lt;br /&gt;Vamos exemplificar a criação de &lt;i&gt;crosstabs&lt;/i&gt; no postgresql utilizando as tabelas abaixo: &lt;br /&gt;&lt;br /&gt;* Tabela Loja - Basicamente apresenta a descrição da loja&lt;br /&gt;&lt;br /&gt;&lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-- Tabela Loja&lt;br /&gt;CREATE TABLE loja (codigo integer, nomeloja varchar(20), observacao varchar(250));&lt;br /&gt;INSERT INTO loja VALUES (1, 'Loja 1', 'Matriz');&lt;br /&gt;INSERT INTO loja VALUES (2, 'Loja 2', 'Filial 1');&lt;br /&gt;INSERT INTO loja VALUES (3, 'Loja 3', 'Filial 2');&lt;br /&gt;INSERT INTO loja VALUES (4, 'Loja 4', 'Filial 3');&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;* Tabela Vendas - Apresenta as vendas realizadas para cada mês em cada loja.&lt;br /&gt;&lt;br /&gt;&lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-- Tabela Vendas&lt;br /&gt;&lt;br /&gt;CREATE TABLE vendas (seqvenda integer, codloja integer, mesvenda integer, valor integer);&lt;br /&gt;INSERT INTO vendas VALUES (1, 1, 1, 100);&lt;br /&gt;INSERT INTO vendas VALUES (2, 1, 2, 100);&lt;br /&gt;INSERT INTO vendas VALUES (3, 1, 3, 100);&lt;br /&gt;INSERT INTO vendas VALUES (4, 1, 1, 100);&lt;br /&gt;INSERT INTO vendas VALUES (5, 2, 2, 100);&lt;br /&gt;INSERT INTO vendas VALUES (6, 2, 3, 100);&lt;br /&gt;INSERT INTO vendas VALUES (7, 2, 1, 100);&lt;br /&gt;INSERT INTO vendas VALUES (8, 2, 2, 100);&lt;br /&gt;INSERT INTO vendas VALUES (9, 4, 3, 100);&lt;br /&gt;INSERT INTO vendas VALUES (10, 4, 1, 100);&lt;br /&gt;INSERT INTO vendas VALUES (11, 4, 2, 100);&lt;br /&gt;INSERT INTO vendas VALUES (12, 4, 3, 100);&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Vamos fazer consultas para mostrar as vendas com base em duas dimensões: a loja que fez a vendas e o período (mês) das vendas.&lt;br /&gt;&lt;br /&gt;Em primeiro lugar, vamos colocar como colunas as lojas da tabela pai (loja), e como linhas as vendas da tabela filha, agrupando os dados por mês. A cláusula CASE é importante para atribuir o valor 0 (zero) quando a venda não for da loja a ser apresentada na coluna.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-- CROSSTAB &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-- COLUNAS - LOJAS&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-- LINHAS - Vendas em cada Mês&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SELECT &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(CASE vendas.mesvenda WHEN 1 THEN 'JAN' WHEN 2 THEN 'FEV' WHEN 3 THEN 'MAR' ELSE 'ERRO' END) AS MES,&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SUM (CASE vendas.codloja WHEN 1 THEN vendas.valor ELSE 0 END) AS MATRIZ,&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SUM (CASE vendas.codloja WHEN 2 THEN vendas.valor ELSE 0 END) AS FILIAL_1,&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SUM (CASE vendas.codloja WHEN 3 THEN vendas.valor ELSE 0 END) AS FILIAL_2,&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SUM (CASE vendas.codloja WHEN 4 THEN vendas.valor ELSE 0 END) AS FILIAL_3&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;FROM loja&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;INNER JOIN vendas&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ON loja.codigo = vendas.codloja&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;GROUP BY vendas.mesvenda&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ORDER BY vendas.mesvenda;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;O resultado da consulta mostra inclusive a filial 2, que esteve fechada durante o período: &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;mes | matriz | filial_1 | filial_2 | filial_3 &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-----+--------+----------+----------+----------&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;JAN |&amp;nbsp;&amp;nbsp;&amp;nbsp; 200 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 100 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 100&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;FEV |&amp;nbsp;&amp;nbsp;&amp;nbsp; 100 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 100&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;MAR |&amp;nbsp;&amp;nbsp;&amp;nbsp; 100 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 100 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(3 registros)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Agora vamos fazer uma inversão: vamos colocar como colunas as lojas da tabela filha, vendas, e como linhas as informações da tabela pai, loja, com os dados agrupados por loja. A cláusula CASE é importante para atribuir o valor 0 (zero) quando a venda não for do mês a ser apresentado na coluna.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-- CROSSTAB 2&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-- COLUNAS - Vendas em cada Mês&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-- LINHAS - LOJAS&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SELECT &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(CASE loja.codigo WHEN 1 THEN 'MATRIZ' WHEN 2 THEN 'FILIAL 1' WHEN 3 THEN 'FILIAL 2' WHEN 4 THEN 'FILIAL 3' ELSE 'ERRO' END) AS LOJA,&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SUM (CASE vendas.mesvenda WHEN 1 THEN vendas.valor ELSE 0 END) AS JAN,&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SUM (CASE vendas.mesvenda WHEN 2 THEN vendas.valor ELSE 0 END) AS FEV,&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SUM (CASE vendas.mesvenda WHEN 3 THEN vendas.valor ELSE 0 END) AS MAR&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;FROM loja&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;INNER JOIN vendas&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ON loja.codigo = vendas.codloja&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;GROUP BY loja.codigo&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ORDER BY LOJA;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Resultado da consulta: &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; loja&amp;nbsp;&amp;nbsp; | jan | fev | mar &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;----------+-----+-----+-----&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;FILIAL 1 | 100 | 200 | 100&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;FILIAL 3 | 100 | 100 | 200&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;MATRIZ&amp;nbsp;&amp;nbsp; | 200 | 100 | 100&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(3 registros)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;O exemplo acima pode ser incrementado e melhorado de várias formas (por exemplo, as tabelas não têm índices). Se você tem alguma sugestão ou forma alternativa de fazer &lt;i&gt;crosstabs&lt;/i&gt; ou de melhorar os exemplos abaixo, não deixe de postar um comentário neste post!&lt;br /&gt;&lt;br /&gt;Obs.: Existe um módulo do postgresql já bastante estável, chamado tablefunc que apresenta funções para a criação de tabelas cruzadas. É uma forma de criar &lt;i&gt;crosstabs&lt;/i&gt; com menos trabalho, mas também com menos diversão e portabilidade! Mais informações sobre o tablefunc &lt;a href="http://www.postgresql.org/docs/9.1/static/tablefunc.html"&gt;aqui&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-5892626199986025464?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/5892626199986025464/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=5892626199986025464' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5892626199986025464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5892626199986025464'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/11/criacao-de-crosstabs-no-postgresql.html' title='Criação de Crosstabs no PostgreSQL'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-1537088935478729602</id><published>2011-11-25T09:22:00.000-03:00</published><updated>2011-11-25T09:22:04.455-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>A Função initcap()</title><content type='html'>A função initcap() é ao mesmo tempo simples e útil, e muitos desenvolvedores não a conhecem. Basicamente, a initcap() recebe como parâmetro uma string e a retorna de volta, colocando a primeira letra de cada palavra maiúscula, e as demais em letras minúsculas. &lt;br /&gt;&lt;br /&gt;É bem prático para formatar strings de nomes de pessoas e lugares utilizando o próprio banco de dados. &lt;br /&gt;&lt;br /&gt;Exemplo 1:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;teste=# SELECT initcap('ALFA BETA GAMA');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; initcap&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;----------------&lt;br /&gt;&amp;nbsp;Alfa Beta Gama&lt;br /&gt;(1 registro)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Exemplo 2:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;teste=# SELECT initcap('alfa beta gama');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; initcap&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;----------------&lt;br /&gt;&amp;nbsp;Alfa Beta Gama&lt;br /&gt;(1 registro)&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;A função initcap não altera caracteres numéricos, mas atua em qualquer "palavra" começada por caracteres, ainda que contenha números.&lt;br /&gt;&lt;br /&gt;Exemplo 3: &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;teste=# SELECT initcap('123 123');&lt;br /&gt;&amp;nbsp;initcap &lt;br /&gt;---------&lt;br /&gt;&amp;nbsp;123 123&lt;br /&gt;(1 registro)&lt;br /&gt;&lt;br /&gt;teste=# SELECT initcap('a123a A123A');&lt;br /&gt;&amp;nbsp;&amp;nbsp; initcap&amp;nbsp;&amp;nbsp; &lt;br /&gt;-------------&lt;br /&gt;&amp;nbsp;A123a A123a&lt;br /&gt;(1 registro)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Esta função pode ser empregada na criação de índices(!), embora eu não veja nisso qualquer utilidade para a maioria das aplicações de banco de dados. Bom, se você conhece algum uso criativo desta função, não deixe de registrar nos comentários!&lt;br /&gt;&lt;br /&gt;Exemplo 4: &lt;br /&gt;&lt;br /&gt;&lt;b&gt;teste=# CREATE TABLE simples(codi integer, nome varchar(50));&lt;br /&gt;CREATE TABLE&lt;br /&gt;teste=# CREATE UNIQUE INDEX indexnome ON simples((initcap(nome)));&lt;br /&gt;CREATE INDEX&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Outras funções similares mas mais conhecidas, são UPPER() e LOWER(), que passam a string passada como parâmetro para maiúsculas e minúsculas, respectivamente.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-1537088935478729602?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/1537088935478729602/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=1537088935478729602' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/1537088935478729602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/1537088935478729602'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/11/funcao-initcap.html' title='A Função initcap()'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-5943922763918598102</id><published>2011-10-17T10:08:00.000-03:00</published><updated>2011-10-17T10:08:33.876-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Outros'/><title type='text'>201 Posts! Obrigado!</title><content type='html'>Em 2007 comecei a estudar mais sobre o Postgres, e criei este blog.&lt;br /&gt;&lt;br /&gt;Estamos em 2011 e este é o post número 201.&lt;br /&gt;&lt;br /&gt;Ainda há muito a estudar, muito mesmo!&lt;br /&gt;&lt;br /&gt;Ainda há muito para postar, muitas ideias.&lt;br /&gt;&lt;br /&gt;O tempo diminuiu. Bastante.&lt;br /&gt;&lt;br /&gt;E nem ensino mais banco de dados.&lt;br /&gt;&lt;br /&gt;Mas cada acesso, cada comentário feito, atestam que valeu a pena.&lt;br /&gt;&lt;br /&gt;E continua valendo.&lt;br /&gt;&lt;br /&gt;Agradeço a Deus!&lt;br /&gt;&lt;br /&gt;Obrigado aos amigos da comunidade, muitos dos quais admiro sem conhecer pessoalmente.&lt;br /&gt;&lt;br /&gt;Obrigado a quem acessa este site.&lt;br /&gt;&lt;br /&gt;Obrigado aos brasileiros.&lt;br /&gt;&lt;br /&gt;Obrigado aos paulistas, aos paranaenses e ao povo do Rio Grande do Sul pelos acessos! A todos os estados e ao meu Ceará!&lt;br /&gt;&lt;br /&gt;E também aos americanos, portugueses e holandeses (!) que acessam.&lt;br /&gt;&lt;br /&gt;E a todos os demais!&lt;br /&gt;&lt;br /&gt;Obrigado por cada comentário, ainda que anônimo!&lt;br /&gt;&lt;br /&gt;Este site é sobre uma ferramenta técnica.&lt;br /&gt;&lt;br /&gt;Nunca vai chegar a um milhão de acessos.&lt;br /&gt;&lt;br /&gt;Mas esse não era o objetivo.&lt;br /&gt;&lt;br /&gt;Tampouco vender consultorias.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Espero ter tempo para continuar estudando e compartilhando!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Obrigado!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-5943922763918598102?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/5943922763918598102/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=5943922763918598102' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5943922763918598102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5943922763918598102'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/10/201-posts-obrigado.html' title='201 Posts! Obrigado!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-220886676945714251</id><published>2011-10-11T16:46:00.000-03:00</published><updated>2011-10-11T16:46:04.569-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Unlogged Tables: Funcionalidade para Aumento de Desempenho!</title><content type='html'>Todos sempre buscamos melhorar o desempenho das operações de banco de dados. E um dos recursos de performance ainda pouco utilizados da versão 9.1 do postgres são as chamadas &lt;i&gt;unlogged tables&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;O que são Unlogged Tables? &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Unlogged Tables&lt;/i&gt; são tabelas que não apresentam suporte a recuperação pós-falha. Não apresentam portanto log de transações (&lt;i&gt;write-ahead-log&lt;/i&gt; - WAL). Essa característica possibilita um grande ganho de desempenho em todas as operações realizadas. O ganho de desempenho obtido se deve ao sacrifício da possibilidade de recuperar os dados em caso de falha de sistema. &lt;br /&gt;&lt;br /&gt;Uma &lt;i&gt;unlogged table&lt;/i&gt; tem seus dados automaticamente perdidos em caso de falha, pois é truncada automaticamente, o que gera um ganho no tempo de recuperação do banco de dados.&lt;br /&gt;&lt;br /&gt;Os dados de uma &lt;i&gt;unlogged table&lt;/i&gt; não sofrem replicação dentro do postgresql.&lt;br /&gt;&lt;br /&gt;Em &lt;i&gt;unlogged tables&lt;/i&gt; não há necessidade de se manter o &lt;i&gt;log&lt;/i&gt; e sincronizá-lo com o banco de dados, fator importante para o de ganho de desempenho.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Em que situações é recomendado utilizar este tipo de tabela?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Em situações em que a durabilidade dos dados não seja realmente importante:&lt;br /&gt;- Para parâmetros de aplicações web;&lt;br /&gt;- Cache de dados em geral;&lt;br /&gt;- Tabelas de status de aplicações, entre outras possibilidades.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Acredito que apenas uma pequena parte de sistemas de bancos de dados possa ser armazenada em tabelas &lt;i&gt;unlogged&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;As operações de inserção, alteração, alteração e consulta a dados de uma "tabela sem log" são diferentes de uma tabela "normal"?&lt;/b&gt;&lt;br /&gt;A forma de fazer e os comandos utilizados permanecem os mesmos. No entanto, internamente, não há &lt;i&gt;write-ahead-log&lt;/i&gt; (WAL), o que faz com que os dados da tabela seja perdidos em caso de quedas de sistema. A velocidade das operações tende a ser bem maior.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Como criar &lt;i&gt;Unlogged Tables&lt;/i&gt;? &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A criação de tabelas sem &lt;i&gt;log&lt;/i&gt; é bastante simples. Basta colocar a cláusula "UNLOGGED" no comando de criação da tabela.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;teste=&amp;gt; CREATE TABLE LOGADA (cod integer, descricao varchar(50));&lt;br /&gt;CREATE TABLE&lt;br /&gt;teste=&amp;gt; CREATE UNLOGGED TABLE NAO_LOGADA (cod integer, descricao varchar(50));&lt;br /&gt;CREATE TABLE&lt;br /&gt;teste=&amp;gt; &lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;b&gt;É permitido indexar este tipo de tabela?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Não existem restrições à indexação, exceto para índices GIST em que este recurso não está implementado. É possível inclusive reindexar, se for o caso! Os índices de uma &lt;i&gt;unlogged table&lt;/i&gt; também são "unlogged", isto é, são truncados em caso de falha do sistema.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;teste=&amp;gt; CREATE INDEX UNLOGT ON NAO_LOGADA(cod);&lt;br /&gt;CREATE INDEX&lt;br /&gt;teste=&amp;gt; &lt;br /&gt;teste=&amp;gt; insert into NAO_LOGADA values (1, 'Teste 1');&lt;br /&gt;INSERT 0 1&lt;br /&gt;teste=&amp;gt; insert into NAO_LOGADA values (2, 'Teste 2');&lt;br /&gt;INSERT 0 1&lt;br /&gt;teste=&amp;gt; insert into NAO_LOGADA values (3, 'Teste 3');&lt;br /&gt;INSERT 0 1&lt;br /&gt;teste=&amp;gt; REINDEX TABLE NAO_LOGADA;&lt;br /&gt;REINDEX&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;b&gt;De quanto é o ganho esperado em desempenho? &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;DEPENDE da operações realizada. Veja o link abaixo e depois faça seus próprios testes:&lt;br /&gt;&lt;a href="http://pgsnaga.blogspot.com/2011/10/pgbench-on-unlogged-tables.html"&gt;http://pgsnaga.blogspot.com/2011/10/pgbench-on-unlogged-tables.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Considerações Finais&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Unlogged Tables&lt;/i&gt; são um recurso válido para ganho de performance em certos casos específicos. No entanto, a definição de que tabelas devem ser &lt;i&gt;unlogged&lt;/i&gt; pode gerar erros graves e impossibilitar a recuperação de dados relevantes. Esta decisão deve ser sempre bastante embasada e levar em conta as necessidades de todos os usuários do banco.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-220886676945714251?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/220886676945714251/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=220886676945714251' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/220886676945714251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/220886676945714251'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/10/unlogged-tables-funcionalidade-para.html' title='Unlogged Tables: Funcionalidade para Aumento de Desempenho!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-1691220424041542799</id><published>2011-09-12T10:58:00.000-03:00</published><updated>2011-09-12T10:58:46.206-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>PostgreSQL 9.1 Lançado Oficialmente!</title><content type='html'>A muito aguardada versão 9.1 do PostgreSQL está disponível para &lt;a href="http://www.postgresql.org/download"&gt;download&lt;/a&gt;. O destaque são as mudanças relacionadas a performance e replicação, mas existem melhorias em praticamente todos os campos. É baixar, instalar e usar!&lt;br /&gt;&lt;br /&gt;Abaixo o texto do anúncio oficial:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;------------------------------------------------------------------------------------&lt;/div&gt;&lt;br /&gt;&lt;i&gt;The PostgreSQL Global Development Group announces the release of&lt;br /&gt;PostgreSQL 9.1.&amp;nbsp; This latest version of the leading open source database&lt;br /&gt;offers innovative technology, unmatched extensibility, and new features&lt;br /&gt;such as synchronous replication, K-Nearest Neighbor indexing, and&lt;br /&gt;foreign data wrappers.&lt;br /&gt;&lt;br /&gt;"PostgreSQL 9.1 provides some of the most advanced enterprise&lt;br /&gt;capabilities of any open source database, and is backed by a vibrant and&lt;br /&gt;innovative community with proven customer success.&amp;nbsp; PostgreSQL is well&lt;br /&gt;positioned for building and running applications in the cloud," said&lt;br /&gt;Charles Fan, Sr. VP R&amp;amp;D, VMware.&lt;br /&gt;&lt;br /&gt;Responding to Users&lt;br /&gt;&lt;br /&gt;Version 9.1 delivers several features which users have been requesting&lt;br /&gt;for years, removing roadblocks to deploying new or ported applications&lt;br /&gt;on PostgreSQL.&amp;nbsp; These include:&lt;br /&gt;&lt;br /&gt;* Synchronous Replication: enable high-availability&lt;br /&gt;&amp;nbsp; with consistency across multiple servers&lt;br /&gt;* Per-Column Collations: support linguistically-correct&lt;br /&gt;&amp;nbsp; sorting per database, table or column.&lt;br /&gt;* Unlogged Tables: greatly improves performance for ephemeral data&lt;br /&gt;&lt;br /&gt;"Heroku runs the largest PostgreSQL database-as-a-service in the world,"&lt;br /&gt;said James Lindenbaum, Heroku co-founder. "The release of synchronous&lt;br /&gt;data replication with 9.1 provides our customers with innovative new&lt;br /&gt;ways of protecting mission-critical data, and validates PostgreSQL as&lt;br /&gt;one of the fastest-moving datastores available."&lt;br /&gt;&lt;br /&gt;Advancing the State of the Art&lt;br /&gt;&lt;br /&gt;Our community of contributors innovates with cutting-edge features.&lt;br /&gt;Version 9.1 includes several which are new to the database industry,&lt;br /&gt;such as:&lt;br /&gt;&lt;br /&gt;* K-Nearest-Neighbor Indexing: index on "distance" for&lt;br /&gt;&amp;nbsp; faster location and text-search queries&lt;br /&gt;* Serializable Snapshot Isolation: keeps concurrent transactions&lt;br /&gt;&amp;nbsp; consistent without blocking, using "true serializability"&lt;br /&gt;* Writeable Common Table Expressions: execute complex multi-stage&lt;br /&gt;&amp;nbsp; data updates in a single query&lt;br /&gt;* Security-Enhanced Postgres: deploy military-grade security&lt;br /&gt;&amp;nbsp; and Mandatory Access Control&lt;br /&gt;&lt;br /&gt;"OpenERP has always relied on the enterprise-class features of&lt;br /&gt;PostgreSQL to provide a fast, reliable and scalable foundation for the&lt;br /&gt;Business Applications supporting our customers' operations every day.&lt;br /&gt;Data integrity in highly concurrent and transactional contexts is a&lt;br /&gt;critical topic for us, and we're very enthusiastic about the new&lt;br /&gt;Serializable Snapshot Isolation of PostgreSQL 9.1!"&amp;nbsp; said Olivier Dony,&lt;br /&gt;OpenERP Community Manager.&lt;br /&gt;&lt;br /&gt;Extending the Database Engine&lt;br /&gt;&lt;br /&gt;PostgreSQL's extensibility enables users to add new functionality to a&lt;br /&gt;running production database, and use them for tasks no other database&lt;br /&gt;system can perform.&amp;nbsp; Version 9.1 adds new extensibility tools, including:&lt;br /&gt;&lt;br /&gt;* Foreign Data Wrappers: attach and query other databases&lt;br /&gt;&amp;nbsp; from PostgreSQL&lt;br /&gt;* Extensions: easily create, load, and manage new database features&lt;br /&gt;&lt;br /&gt;In PostgreSQL's 25th year of database development, our community&lt;br /&gt;continues to advance database technology with every annual release.&lt;br /&gt;Download version 9.1 now and experience the most advanced open source&lt;br /&gt;database system in the world.&lt;br /&gt;&lt;br /&gt;More information on PostgreSQL 9.1:&lt;br /&gt;* Release notes&lt;br /&gt;&amp;nbsp; &lt;a href="http://www.postgresql.org/docs/9.1/static/release-9-1" target="_blank"&gt;http://www.postgresql.org/docs/9.1/static/release-9-1&lt;/a&gt;&lt;br /&gt;* Presskit&lt;br /&gt;&amp;nbsp; &lt;a href="http://www.postgresql.org/about/press/presskit91" target="_blank"&gt;http://www.postgresql.org/about/press/presskit91&lt;/a&gt;&lt;br /&gt;* Guide to 9.0:&lt;br /&gt;&amp;nbsp; &lt;a href="http://wiki.postgresql.org/wiki/What%27s_new_in_PostgreSQL_9.1" target="_blank"&gt;http://wiki.postgresql.org/wiki/What's_new_in_PostgreSQL_9.1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Download 9.1 now:&lt;br /&gt;* Main download page:&lt;br /&gt;&amp;nbsp; &lt;a href="http://www.postgresql.org/download" target="_blank"&gt;http://www.postgresql.org/download&lt;/a&gt;&lt;br /&gt;* Source code:&lt;br /&gt;&amp;nbsp; &lt;a href="http://www.postgresql.org/ftp/source/v9.1.0" target="_blank"&gt;http://www.postgresql.org/ftp/source/v9.1.0&lt;/a&gt;&lt;br /&gt;* One-click installer, including Windows installer:&lt;br /&gt;&amp;nbsp; &lt;a href="http://www.enterprisedb.com/products/pgdownload.do" target="_blank"&gt;http://www.enterprisedb.com/products/pgdownload.do&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-1691220424041542799?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/1691220424041542799/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=1691220424041542799' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/1691220424041542799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/1691220424041542799'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/09/postgresql-91-lancado-oficialmente.html' title='PostgreSQL 9.1 Lançado Oficialmente!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-710645292986351339</id><published>2011-09-09T15:16:00.000-03:00</published><updated>2011-09-09T15:16:12.448-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><title type='text'>PgBr 2011 - Inscrições Abertas! Último dia para Submissão de Trabalhos!</title><content type='html'>A &lt;a href="http://pgbr.postgresql.org.br/2011/evento.php"&gt;PgBr 2011&lt;/a&gt;, o maior evento de Postgres do país, está com inscrições abertas. O valor da inscrição aumenta à medida em que se aproxima a data do evento: 3 e 4 de novembro, em São Paulo. A inscrição vip dá direito a almoço com os palestrantes. &lt;a href="http://www.postgresql.org.br/node/16898"&gt;Se inscreva agora&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hoje, 09 de setembro, é o último dia para Submissão de Trabalhos!&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-710645292986351339?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/710645292986351339/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=710645292986351339' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/710645292986351339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/710645292986351339'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/09/pgbr-2011-inscricoes-abertas-ultimo-dia.html' title='PgBr 2011 - Inscrições Abertas! Último dia para Submissão de Trabalhos!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-7909675147169877230</id><published>2011-09-09T14:37:00.001-03:00</published><updated>2011-09-09T14:46:57.939-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Serpro Ultrapassa os 200 Bancos de Dados PostgreSQL!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-d_33BpY9hB8/TmpOr0WqASI/AAAAAAAAAOA/EvZhmlJVqy0/s1600/serprologo.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-d_33BpY9hB8/TmpOr0WqASI/AAAAAAAAAOA/EvZhmlJVqy0/s1600/serprologo.jpeg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ao atingir o volume de 220 bancos de dados, o PostgreSQL passa a ocupar a&lt;br /&gt;posição de destaque como tecnologia livre de bancos de dados no Serpro - Serviço Federal de Processamento de Dados. O MySQl apresenta 200 bancos de dados implementados.&lt;br /&gt;&lt;br /&gt;Confira esta informação na página 19 da edição 207 da versão online de &lt;a href="http://tema.serpro.gov.br/pub/serpro/index.jsp?ipg=544"&gt;revista TEMA&lt;/a&gt;. Outro artigo com destaque para o Postgres é o do encarte TEMATEC "Expresso em Nuvem", que mostra uma implementação de grande porte com Postgres e &lt;a href="http://pgpool.projects.postgresql.org/"&gt;PgPool&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-7909675147169877230?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/7909675147169877230/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=7909675147169877230' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7909675147169877230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7909675147169877230'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/09/serpro-ultrapassa-os-200-bancos-de.html' title='Serpro Ultrapassa os 200 Bancos de Dados PostgreSQL!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-d_33BpY9hB8/TmpOr0WqASI/AAAAAAAAAOA/EvZhmlJVqy0/s72-c/serprologo.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-8492480916716847889</id><published>2011-07-21T10:24:00.000-03:00</published><updated>2011-07-21T10:24:11.477-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>A Função clock_timestamp()</title><content type='html'>Você já ouviu da função clock_timestamp? Ela retorna a data e hora com bastante precisão junto com a time zone do servidor, da mesma forma que as funções now() e current_timestamp. Então para quê implementar esta nova função? O interessante da clock_timestamp é que a mesma retorna o timestamp do término da transação, enquanto now e current timestamp retornam a data/hora do início da transação corrente.&lt;br /&gt;&lt;br /&gt;É uma função que pode ser importante para aqueles que necessitam de alta precisão ao lidar com variáveis temporais.&lt;br /&gt;&lt;br /&gt;Exemplos:&lt;br /&gt;&lt;br /&gt;1 - Sintaxe básica&lt;br /&gt;&lt;br /&gt;&lt;b&gt;teste=# SELECT clock_timestamp();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clock_timestamp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;-------------------------------&lt;br /&gt;&amp;nbsp;2011-07-21 09:34:12.645251-03&lt;br /&gt;(1 registro)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;2 - Extração de parte do valor retornado.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;teste=# SELECT SUBSTRING(CAST(now() AS VARCHAR) FROM 1 FOR 10);&lt;br /&gt;&amp;nbsp;substring&amp;nbsp; &lt;br /&gt;------------&lt;br /&gt;&amp;nbsp;2011-07-21&lt;br /&gt;(1 registro)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3 - Lado a lado o resultado de clock_timestamp() e now() na mesma transação. Observe que os valores são diferentes e indicam o timestamp de início e de término da transação.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;teste=# SELECT SUBSTRING(CAST(now() AS VARCHAR) FROM 1 FOR 10);&lt;br /&gt;&amp;nbsp;substring&amp;nbsp; &lt;br /&gt;------------&lt;br /&gt;&amp;nbsp;2011-07-21&lt;br /&gt;(1 registro)&lt;br /&gt;&lt;br /&gt;teste=# SELECT now() || '&amp;nbsp;&amp;nbsp; ' || clock_timestamp();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ?column?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;&amp;nbsp;2011-07-21 10:21:46.592655-03&amp;nbsp;&amp;nbsp; 2011-07-21 10:21:46.592828-03&lt;br /&gt;(1 registro)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;4 - Diferença entre clock_timestamp() e now(), mostrando o tempo decorrido entre o início e o término da transação.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;teste=# SELECT clock_timestamp() - now();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ?column?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;-----------------&lt;br /&gt;&amp;nbsp;00:00:00.000099&lt;br /&gt;(1 registro)&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-8492480916716847889?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/8492480916716847889/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=8492480916716847889' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8492480916716847889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8492480916716847889'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/07/funcao-clocktimestamp.html' title='A Função clock_timestamp()'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-5599887793931798345</id><published>2011-07-15T17:41:00.001-03:00</published><updated>2011-07-15T17:45:34.286-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>Link: tudo sobre data e hora no PostgreSQL!</title><content type='html'>O link abaixo explica bem como lidar com data, horas e timestamps com o PostgreSQL:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/goog_1257569181"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A1tico/Fun%C3%A7%C3%B5es_Internas/Data_e_Hora"&gt;http://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A1tico/Fun%C3%A7%C3%B5es_Internas/Data_e_Hora&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Já neste outro link, temos a documentação de funções e operadores para lidar com datas e horas:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.postgresql.org/docs/8.2/static/functions-datetime.html"&gt;http://www.postgresql.org/docs/8.2/static/functions-datetime.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-5599887793931798345?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/5599887793931798345/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=5599887793931798345' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5599887793931798345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5599887793931798345'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/07/link-tudo-sobre-data-e-hora-no.html' title='Link: tudo sobre data e hora no PostgreSQL!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-5550266604358404414</id><published>2011-07-01T07:48:00.000-03:00</published><updated>2011-07-01T07:48:31.618-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Baixe os RPMs de Instalação da versão 9.1 Beta2!</title><content type='html'>Os instaladores para linux da versão 9.1 Beta 2 estão disponíveis para quem quiser testar. Esse é mais um indício de que a versão 9.1 logo será oficialmente lançada.&lt;br /&gt;&lt;br /&gt;Baixe os RPMs &lt;a href="http://www.openscg.com/se/postgresql/packages.jsp"&gt;&lt;b&gt;aqui&lt;/b&gt;&lt;/a&gt; e teste à vontade!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-5550266604358404414?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/5550266604358404414/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=5550266604358404414' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5550266604358404414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5550266604358404414'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/07/baixe-os-rpms-de-instalacao-da-versao.html' title='Baixe os RPMs de Instalação da versão 9.1 Beta2!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-6865408034305358545</id><published>2011-06-28T11:42:00.001-03:00</published><updated>2011-06-28T11:53:17.970-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Ferramentas'/><title type='text'>JMeter: Brincando de Testar seu Servidor PostgreSQL!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-IiT0XelILKE/TgnVtWPpCWI/AAAAAAAAANc/8DhG1dFVmxw/s1600/Apache+JMeter+2+-+Cria%25C3%25A7%25C3%25A3o+de+Usu%25C3%25A1rios.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;Testes de performance de servidores de bancos de dados são importantes para se avaliar ambientes de produção antes da implantação de projetos que envolvam muitos usuários e grande tráfego de informações. Uma ferramenta boa e estável para este tipo de teste é o &lt;a href="http://jakarta.apache.org/jmeter/"&gt;Jakarta Jmeter&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Através do JMeter é possível configurar conexões ao servidor, criar requisições JDBC (comandos, chamadas de funções, etc.), submetê-las ao servidor e analisar o resultado da execução. A ferramenta permite ainda criar múltiplas &lt;i&gt;threads&lt;/i&gt; simulando um grande número de usuários simultâneos, e executar para cada &lt;i&gt;thread&lt;/i&gt; as requisições mais de uma vez, gerando uma grande carga de acessos que testa os limites de carga aceitos pelos bancos de dados.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Adicionalmente, é possível utilizar ouvintes (listeners) para apresentar os resultados da execução dos comandos na forma de tabelas, árvores e gráficos diversos. &lt;br /&gt;&lt;br /&gt;O JMeter é compatível com qualquer banco que aceite conexão JDBC, incluindo o postgres e pode testar ainda outros tipos de requisição como ftp e http. Baixe o &lt;a href="http://jakarta.apache.org/jmeter/"&gt;jmeter&lt;/a&gt; agora! &lt;br /&gt;&lt;br /&gt;Vamos mostrar as principais etapas de utilização da ferramenta utilizando um teste feito no postgresql.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Instalação&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Baixe a ferramenta, descompacte os arquivos em uma pasta. Observe que existem vários subdiretórios. As pastas mais relevantes são a LIB e a BIN.&lt;br /&gt;&lt;br /&gt;Copie o arquivo do driver jdbc do postgresql (e o dos demais bancos com os quais trabalhar) para a pasta LIB do JMeter.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Execução&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;No windows pode ser utilizado o arquivo jmeter.bat, na pasta BIN da ferramenta (jakarta-jmeter-2.4/bin no meu caso). No Linux existe o arquivo jmeter.sh.&lt;br /&gt;&lt;br /&gt;Existe a opção de rodar diretamente do arquivo .JAR, digitando:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;java&amp;nbsp; -jar ApacheJMeter.jar&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A tela inicial apresentada é bastante simples, com uma barra de menu e uma árvore onde são apresentados hierarquicamente os comandos dos planos de testes.&lt;br /&gt;&lt;br /&gt;A árvore apresenta duas grandes divisões: plano de testes e área de trabalho. A área de trabalho pode ser utilizada para colocar comandos que não serão executados, enquanto que o plano de testes é a parte da treeview que apresenta os comandos do plano que serão executados, sendo que comandos de teste podem ser arrastados livremente entre área de trabalho e plano de testes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-4s0aw0aPltY/TgnSeljrmAI/AAAAAAAAANY/2GdYULtbglc/s1600/Captura_de_tela-Apache+JMeter+%25282.4+r961953%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="208" src="http://1.bp.blogspot.com/-4s0aw0aPltY/TgnSeljrmAI/AAAAAAAAANY/2GdYULtbglc/s320/Captura_de_tela-Apache+JMeter+%25282.4+r961953%2529.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Número de Usuários Simulados no Teste&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;O primeiro passo é definir o número de usuários que seu teste deseja simular.&amp;nbsp; Se o seu teste tiver muitos usuários, pode ser caracterizado como teste de carga. Caso tenha apenas um, executando uma vez cada comando, pode ser entendido como um teste funcional. Cada plano de testes pode agregar dezenas de requisições (testes) de banco de dados (JDBC), FTP, HTTP, entre outras possibilidades.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Com o botão direito do mouse sobre o plano de trabalho acione o menu "Plano de Testes\ Adicionar\ Threads (Users)\ Grupos de Usuários". A tela mostrada permite que se defina quantos usuários virtuais serão simulados, o tempo de inicialização de cada usuário e o número de vezes que cada usuário simulado executará os próximos comandos do plano de testes. Caso se deseje 100&amp;nbsp; usuários, executando 10 vezes cada teste, uma execução do plano de testes testará 10000 execuções do plano. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-IiT0XelILKE/TgnVtWPpCWI/AAAAAAAAANc/8DhG1dFVmxw/s1600/Apache+JMeter+2+-+Cria%25C3%25A7%25C3%25A3o+de+Usu%25C3%25A1rios.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="136" src="http://2.bp.blogspot.com/-IiT0XelILKE/TgnVtWPpCWI/AAAAAAAAANc/8DhG1dFVmxw/s320/Apache+JMeter+2+-+Cria%25C3%25A7%25C3%25A3o+de+Usu%25C3%25A1rios.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Configurando o JDBC&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Para fazer testes de banco de dados, devemos configurar a conexão JDBC.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Com o botão direito do mouse sobre o plano de trabalho acione o  menu "Plano de Testes\ Adicionar\ Elemento de Configuração\&amp;nbsp; Configuração da Conexão JDBC".&lt;br /&gt;&lt;br /&gt;A  tela mostrada permite que se defina os parâmetros de conexão com o servidor, tais como limite de conexões, tempo máximo de conexão, intervalo para &lt;i&gt;timeout&lt;/i&gt; de conexão, entre outros. A figura abaixo mostra os principais parâmetros utilizados.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-DEMBf3UENrg/TgnYGxe0ZuI/AAAAAAAAANg/l10P8kOmHFs/s1600/Apache+JMeter+3+-+Configura%25C3%25A7%25C3%25A3o+de+conexao+JDBC.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="176" src="http://4.bp.blogspot.com/-DEMBf3UENrg/TgnYGxe0ZuI/AAAAAAAAANg/l10P8kOmHFs/s320/Apache+JMeter+3+-+Configura%25C3%25A7%25C3%25A3o+de+conexao+JDBC.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-DEMBf3UENrg/TgnYGxe0ZuI/AAAAAAAAANg/l10P8kOmHFs/s1600/Apache+JMeter+3+-+Configura%25C3%25A7%25C3%25A3o+de+conexao+JDBC.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;5. Criação do Teste de Banco&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Para criar os testes de banco de dados em si, basta se definir o SQL a ser submetido. O comando será executando tantas vezes forem definidas na seção "Grupo de Usuários" do plano de testes. &lt;br /&gt;&lt;br /&gt;Com o botão direito do mouse sobre o plano de trabalho acione o  menu "Plano de Testes\ Adicionar\ Testador\ Requisição JDBC".&lt;br /&gt;&lt;br /&gt;A  tela mostrada permite que se forneça o comando SQL a ser testado. &lt;b&gt;Não utilize ponto e vírgula ";", pois pode gerar erro de execução. &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ur8dEmD-l6Y/TgneUa4VQ_I/AAAAAAAAAN0/EUxe4JUaxBo/s1600/comando+sql.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="133" src="http://1.bp.blogspot.com/-ur8dEmD-l6Y/TgneUa4VQ_I/AAAAAAAAAN0/EUxe4JUaxBo/s320/comando+sql.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-7s2QULoMsao/TgnaZqqBrQI/AAAAAAAAANo/7V5FCuDEEUM/s1600/jakarta-jmeter+3+Requisi%25C3%25A7%25C3%25A3o+JDBC+OK.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-YwbNIvnaOsE/TgnZ_MTW7WI/AAAAAAAAANk/YbhL8STcVjY/s1600/Apache+JMeter+4+Select+a+ser+testado+no+Postgres.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;6. Adicionando Ouvintes (Listeners)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Antes de executar os testes, deve ser definido de que forma o resultado da execução será apresentado. Os ouvintes monitoram os testes e apresentam o resumo das execuções de várias formas.&lt;br /&gt;&lt;br /&gt;Um mesmo teste pode ser visualizado de mais de uma forma, o que facilita o entendimento, seja como árvore, tabela, gráfico ou geração de arquivo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Com o botão direito do mouse sobre o plano de trabalho acione o  menu "Plano de Testes\ Adicionar\ Ouvinte\ Árvore de Resultados".&amp;nbsp; Acrescente outros ouvintes como "Relatório Agregado" e "Ver Resultados em Tabela". As figuras abaixo mostra o resultado de um teste visto por mais de um ouvinte.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-XHpTU2L7czE/Tgnb1ksFF7I/AAAAAAAAANs/N8jCr8ZJFUc/s1600/listeners.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-BlZ98cQK-Bg/Tgne2W-oo9I/AAAAAAAAAN4/9Pn9NsGIxss/s1600/vasao.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="86" src="http://3.bp.blogspot.com/-BlZ98cQK-Bg/Tgne2W-oo9I/AAAAAAAAAN4/9Pn9NsGIxss/s320/vasao.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-uY0Y6j9GBek/Tgne3GpEw8I/AAAAAAAAAN8/xPog9O6QEck/s1600/listeners.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="178" src="http://2.bp.blogspot.com/-uY0Y6j9GBek/Tgne3GpEw8I/AAAAAAAAAN8/xPog9O6QEck/s320/listeners.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-pWH1IYUqd1M/Tgnb8tiAHJI/AAAAAAAAANw/KMN9vuqQ6hw/s1600/vasao.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-YwbNIvnaOsE/TgnZ_MTW7WI/AAAAAAAAANk/YbhL8STcVjY/s1600/Apache+JMeter+4+Select+a+ser+testado+no+Postgres.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;7. Executando Testes&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Utilize a barra de menu para executar os testes:&lt;br /&gt;- "Executar\ Iniciar" - Executa os testes do plano de trabalho atual&lt;br /&gt;- "Executar\ Limpar Tudo" - Limpa os resultados de testes anteriores para nova rodada de testes&lt;br /&gt;- "Arquivo\ Salvar" - Salva o Plano de Testes&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Independentemente de termos boas ferramentas como o JMeter, temos sempre de testar as nossas aplicações, e não podemos descuidar dos bancos de dados. O JMeter tem potencial para automatizar boa parte dos testes feitos com bancos de dados sem grande esforço, o que não elimina a necessidade de bons testadores e de cuidado na hora de se realizar e interpretar os resultados apresentados.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Teste o JMeter e me diga o que achou dele! &lt;/b&gt;Não se esqueça que a qualidade do seu teste é consequência de um bom plano de testes!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-6865408034305358545?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/6865408034305358545/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=6865408034305358545' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6865408034305358545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6865408034305358545'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/06/jmeter-brincando-de-testar-seu-servidor.html' title='JMeter: Brincando de Testar seu Servidor PostgreSQL!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-4s0aw0aPltY/TgnSeljrmAI/AAAAAAAAANY/2GdYULtbglc/s72-c/Captura_de_tela-Apache+JMeter+%25282.4+r961953%2529.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-3781166571250685590</id><published>2011-06-15T08:29:00.000-03:00</published><updated>2011-06-15T08:29:19.718-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>Atualize seus Drivers JDBC3 e JDBC4 para PostgreSQL</title><content type='html'>Esse link é importante para quem trabalha com JDBC. O site postgresql.org apresenta uma farta oferta de opções de &lt;a href="http://jdbc.postgresql.org/index.html"&gt;drivers JDBC para o Postgres&lt;/a&gt;, além da documentação e detalhes do desenvolvimento.&lt;br /&gt;&lt;br /&gt;São disponibilizados drivers para as versões em produção e para as em desenvolvimento do postgres. Confira e atualize seu ambiente!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-3781166571250685590?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/3781166571250685590/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=3781166571250685590' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3781166571250685590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3781166571250685590'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/06/atualize-seus-drivers-jdbc3-e-jdbc4.html' title='Atualize seus Drivers JDBC3 e JDBC4 para PostgreSQL'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-7294306174687453451</id><published>2011-06-13T10:19:00.000-03:00</published><updated>2011-06-13T10:19:48.663-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ferramentas'/><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>Conecte o PostgreSQL com o LibreOffice via JDBC!</title><content type='html'>A interface visual do LibreOffice (BrOffice) é similar à do ACCESS, e muito superior à da interface do psql. Um grande sonho seria poder visualizar e operar o seu banco do postgresql por meio desta interface.&lt;br /&gt;&lt;br /&gt;Já falamos aqui da integração BASE-POSTGRESQL via &lt;a href="http://postgresqlbr.blogspot.com/2008/05/acessando-o-postgresql-partir-do.html"&gt;SDBC&lt;/a&gt;. No entanto um artigo da revista brasileira do BrOffice mostra como se conectar via JDBC. Acesse &lt;a href="http://wiki.broffice.org/raw-attachment/wiki/Zine/Edicoes/RB-ED20.pdf?format=raw"&gt;&lt;b&gt;aqui&lt;/b&gt;&lt;/a&gt; o artigo "BASE E POSTGRESQL: Acomodando um elefante no escritório" de Leonardo Cezar.&lt;br /&gt;&lt;br /&gt;O texto é bastante didático e bem ilustrado, facilitando a replicação dos procedimentos, e as próximas edições prometem a continuação da matéria detalhando a operacionalização do trabalho com o postgres dentro do LibreOffice Base. É imperdível para quem está procurando uma nova ferramenta visual.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-7294306174687453451?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/7294306174687453451/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=7294306174687453451' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7294306174687453451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7294306174687453451'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/06/conecte-o-postgresql-com-o-libreoffice.html' title='Conecte o PostgreSQL com o LibreOffice via JDBC!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-8776039077049815454</id><published>2011-06-13T09:54:00.000-03:00</published><updated>2011-06-13T09:54:15.159-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Qual é a versão do seu Postgres?</title><content type='html'>Você sabe qual é a versão do seu servidor Postgres? Sabe mesmo? E do cliente (estava pensando que é sempre a mesma?)? Ele é 32 ou 64 bits? Para muitos desenvolvedores a resposta é não, e em vários casos nem se sabe como recuperar estas informações.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A melhor maneira de se saber a versão de um servidor banco de dados é simplesmente consultando-a. E no caso do postgresql a função que retorna estas informações é a VERSION().&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Exemplo:&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt; - Consulta padrão:&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;SELECT version();&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Resultado:&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;PostgreSQL 9.0.4 on i486-pc-linux-gnu, compiled by GCC gcc-4.4.real (Ubuntu 4.4.3-4ubuntu5) 4.4.3, 32-bit&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;Para recuperar informações de versionamento do cliente do banco deve se utilizar o utilitário psql:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Exemplo:&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;psql --version&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Resultado:&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;psql (PostgreSQL) 9.0.4&lt;br /&gt;contém suporte a edição em linha de comando&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Agora você pode visualizar facilmente a versão atual do seu postgres. Então é bom passar mais alguma informação sobre como interpretar o número de versionamento.&lt;br /&gt;&lt;br /&gt;O postgres é versionado em um sistema de numeração com três números, no formato "&lt;b&gt;A.B.C&lt;/b&gt;". A versão de produção atual, seguindo este formato, é a 9.0.4. A sistemática de numeração de versão do postgres pode ser conferida &lt;a href="http://it.toolbox.com/blogs/database-soup/guide-to-postgresql-version-numbers-19177"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;A&lt;/b&gt; - Número de versão principal. Quando este número muda significa que aconteceram alterações radicais na estrutura e funcionamento do banco. A versão atual é 9, e não há planejamento para uma versão 10 no momento.&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;B&lt;/b&gt; - Número de versão secundário. Quando este número muda significa que aconteceram alterações na estrutura e funcionamento do banco que demandam. Os números A e B devem ser considerados em conjunto, e não apenas o primeiro número de versão, pois indicam uma versão em especial. O B da versão atual é 0, mas existe uma versão beta do postgres 9.1 e planejamento da versão 9.2. &lt;br /&gt;&lt;br /&gt;- &lt;b&gt;C&lt;/b&gt; - Número de atualizações aplicadas à versão "A.B". Na versão 8.4, por exemplo, já foram aplicadas 10 atualizações. O valor inicial de C é 0 e atualmente estamos na versão 9.0.4, indicando que a versão 9.0 já sofreu 4 atualizações. É importante acompanhar os informes de atualização especialmente quando solucionam questões chave de segurança, performance e bugs que afetam de alguma forma o desenvolvimento dos sistemas e a disponibilidade dos servidores de banco.&lt;br /&gt;&lt;br /&gt;Que tal conferir agora a versão que está no seu sistema?&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-8776039077049815454?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/8776039077049815454/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=8776039077049815454' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8776039077049815454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8776039077049815454'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/06/qual-e-versao-do-seu-postgres.html' title='Qual é a versão do seu Postgres?'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-3046021978836504028</id><published>2011-06-08T09:44:00.000-03:00</published><updated>2011-06-08T09:44:55.290-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Utilize o PSQL como Gerador de Relatórios!</title><content type='html'>Uma boa maneira de utilizar o utilitário psql é como meio para executar scripts que recuperem informações e as armazenem em arquivos. Desta forma, podemos gerar relatórios de alta relevância e complexidade a um custo mínimo.&lt;br /&gt;&lt;br /&gt;A sintaxe abaixo, lê um script de um arquivo de entrada com o programa e o executa no PSQL:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;psql -U usuario -d banco_de_dados -f arquivo_de_entrada&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Mas como gerar relatórios de forma fácil com o psql? Simplesmente as opções são infinitas, pois podemos mesclar comandos SELECT, funções como a current_timestamp e comandos do psql. A solução depende da sua criatividade.&lt;br /&gt;&lt;br /&gt;Abaixo coloco um script simples que recupera informações sobre os objetos do banco. A opção "\o" especifica um arquivo de saída do relatório. Para se executar o script, o mesmo foi gravado no arquivo "entrada.txt" e foi executado no prompt do psql através da chamada "psql -U postgres -d teste -f entrada.txt". O script foi testado no Postgresql 9.0.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;&lt;span style="font-size: xx-small;"&gt;\o saida.txt&lt;br /&gt;\echo Cabecalho&lt;br /&gt;SELECT 'Inicio: ' || current_timestamp as Inicio; &lt;br /&gt;\echo Relatorio no Arquivo Saida.txt&lt;br /&gt;SELECT '#####################################################################' AS Titulo UNION ALL&lt;br /&gt;SELECT '### Relatorio de Banco de Dados 1.0 #################################' AS Titulo UNION ALL&lt;br /&gt;SELECT '### Claudio Leopoldino&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #################################' AS Titulo UNION ALL&lt;br /&gt;SELECT '### Script para livre distribuição e utilização #####################' AS Titulo UNION ALL&lt;br /&gt;SELECT '### http://postgresqlbr.blogspot.com/ ###############################' AS Titulo UNION ALL&lt;br /&gt;SELECT '#####################################################################' AS Titulo;&lt;br /&gt;\echo Lista de Bancos de Dados&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\qecho '### Bancos de Dados #####################################################################'&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\l&lt;br /&gt;\echo Lista de Bancos de Dados com Detalhe&lt;br /&gt;\l+&lt;br /&gt;\echo Lista de Usuarios&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\qecho '### Lista de Usuarios ###################################################################'&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\du&lt;br /&gt;\echo Lista de Tabelas&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\qecho '### TABELAS #############################################################################'&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\dt&lt;br /&gt;\echo Lista de Tabelas com Detalhe&lt;br /&gt;\dt+&lt;br /&gt;\echo Lista de Tabelas de Sistema&lt;br /&gt;\dtS&lt;br /&gt;\echo Lista de Tabelas de Sistema com Detalhe&lt;br /&gt;\dtS+&lt;br /&gt;\echo Lista de Indices&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\qecho '### INDICES #############################################################################'&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\di&lt;br /&gt;\echo Lista de Indices com Detalhe&lt;br /&gt;\di+&lt;br /&gt;\echo Lista de Sequencias&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\qecho '### SEQUENCIAS###########################################################################'&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\ds&lt;br /&gt;\echo Lista de Visoes&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\qecho '### VISOES ##############################################################################'&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\dv&lt;br /&gt;\echo Lista de Visoes com Detalhe&lt;br /&gt;\dv+&lt;br /&gt;\echo Lista de Visoes de Sistema&lt;br /&gt;\dvS&lt;br /&gt;\echo Lista de Visoes de Sistema com Detalhe&lt;br /&gt;\dvS+&lt;br /&gt;\echo Lista de Privilegios de Acesso&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\qecho '### PRIVILEGIOS DE ACESSO ###############################################################'&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\dp&lt;br /&gt;\echo Lista de Large Objects&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\qecho '### LARGE OBJECTS #######################################################################'&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\dl&lt;br /&gt;\echo Lista de Funcoes&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\qecho '### FUNCOES #############################################################################'&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\df&lt;br /&gt;\echo Lista de Operadores&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\qecho '### OPERADORES ##########################################################################'&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\do&lt;br /&gt;\echo Lista de Tipos de Dados&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\qecho '### TIPOS DE DADOS ######################################################################'&lt;br /&gt;\qecho '#########################################################################################'&lt;br /&gt;\dT &lt;br /&gt;\echo Rodape&lt;br /&gt;SELECT 'Final: ' || current_timestamp as Final; \q&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Agora você pode executá-lo e incrementá-lo para extrair e formatar toda informação que você desejar. Pode ainda criar novos e melhores scripts! Explore opções para layouts mais agradáveis, consultas mais específicas e o que mais a sua necessidade exigir e a sua criatividade for capaz de propor!&lt;br /&gt;&lt;br /&gt;Como melhorar este relatório? Te convido a compartilhar com a comunidade nos comentários deste post. Sua contribuição é sempre bem vinda!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-3046021978836504028?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/3046021978836504028/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=3046021978836504028' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3046021978836504028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3046021978836504028'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/06/utilize-o-psql-como-gerador-de.html' title='Utilize o PSQL como Gerador de Relatórios!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-4714814243894759910</id><published>2011-05-31T09:10:00.000-03:00</published><updated>2011-05-31T09:10:33.634-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Booktown e outros Bancos de Dados de Exemplo para PostgreSQL</title><content type='html'>Exemplos de bancos de dados são úteis para o ensino e a aprendizagem sobre as ferramentas e sobre situações práticas que ocorrem no cotidiano dos profissionais da área. Já falei previamente sobre o &lt;a href="http://postgresqlbr.blogspot.com/2008/03/crie-bases-de-dados-com-o-pagila.html"&gt;pagila&lt;/a&gt;, mas é sempre bom ter mais opções.&lt;br /&gt;&lt;br /&gt;O Booktown é um script que cria o banco de dados de uma livraria completa, incluindo alguns registros e possibilitando um bom banco de dados para testes e ensino de banco de dados. Originalmente, a base booktown foi utilizada nos exemplos do livro &lt;a href="http://www.commandprompt.com/ppbook/"&gt;&lt;i&gt;Practical PostgreSQL&lt;/i&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Baixe o script &lt;a href="http://www.commandprompt.com/ppbook/booktown.sql"&gt;aqui&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-4714814243894759910?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/4714814243894759910/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=4714814243894759910' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4714814243894759910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4714814243894759910'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/05/booktown-e-outros-bancos-de-dados-de.html' title='Booktown e outros Bancos de Dados de Exemplo para PostgreSQL'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-7573788938958589060</id><published>2011-05-30T10:54:00.000-03:00</published><updated>2011-05-30T10:54:17.005-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Automatize o seu Backup do PostgreSQL via Python!</title><content type='html'>Vi esse script no site do &lt;a href="http://codepoets.co.uk/2011/postgresql-backup-script-python/"&gt;David Goodwin&lt;/a&gt; e achei interessante. Mas ao executá-lo posteriormente tive outra boa surpresa: ele executa "de primeira", sem a necessidade de se fazer qualquer correção. A idéia é através de um programa em python chamar os utilitários de backup do postgres para realizar o backup, e o código deste script pode ser alterado para automatizar outras tarefas de modo bastante simples.&lt;br /&gt;&lt;br /&gt;As etapas de utilização são simples:&lt;br /&gt;&lt;br /&gt;- Instale o &lt;a href="http://www.python.org/getit/"&gt;python&lt;/a&gt; e o postgres. Esta etapa eu não precisei fazer, porque já o tinha instalado aqui. Teste a versão digitando: "&lt;b&gt;python --version&lt;/b&gt;". A versão da minha máquina é a 2.6.5 e do postgres é 9.0.&lt;br /&gt;- Crie um arquivo de script com o código. Use a extensão ".py" como padrão para não misturar seus códigos python os de com outras aplicações.&lt;br /&gt;- Edite os campos "usuário", "senha", "caminho do pg_dump", a "lista de bancos que devem sofrer backup" e salve o arquivo. Destaquei abaixo estes parâmetros em vermelho&lt;br /&gt;- Execute o script. Utilizei "&lt;b&gt;python -v py_backup.py&lt;/b&gt;". A opção -v significa VERBOSE, isto é, gera uma descrição de tudo o que está sendo feito durante o backup. Existem outras boas opções do pg_dump e do python, mas isso fica como pesquisa paras os interessados. &lt;br /&gt;&lt;br /&gt;Abaixo coloco o código do script, mas acesse também o &lt;a href="http://codepoets.co.uk/2011/postgresql-backup-script-python/"&gt;site original&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;code class="shell preprocessor bold"&gt;#!/usr/bin/python&lt;/code&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="container"&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;b&gt;&lt;code class="shell plain"&gt;from &lt;/code&gt;&lt;code class="shell functions"&gt;time&lt;/code&gt; &lt;code class="shell functions"&gt;import&lt;/code&gt; &lt;code class="shell plain"&gt;gmtime, strftime&lt;/code&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;b&gt;&lt;code class="shell functions"&gt;import&lt;/code&gt; &lt;code class="shell plain"&gt;subprocess&lt;/code&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;b&gt;&lt;code class="shell functions"&gt;import&lt;/code&gt; &lt;code class="shell plain"&gt;os&lt;/code&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;b&gt;&lt;code class="shell plain"&gt;database_list = [ &lt;/code&gt;&lt;code class="shell string"&gt;'&lt;span style="color: red;"&gt;database1&lt;/span&gt;'&lt;/code&gt;&lt;code class="shell plain"&gt;, &lt;/code&gt;&lt;code class="shell string"&gt;'&lt;span style="color: red;"&gt;database2&lt;/span&gt;'&lt;/code&gt;&lt;code class="shell plain"&gt;, &lt;/code&gt;&lt;code class="shell string"&gt;'&lt;span style="color: red;"&gt;etc&lt;/span&gt;'&lt;/code&gt; &lt;code class="shell plain"&gt;]&lt;/code&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;&lt;b&gt;&lt;code class="shell plain"&gt;USER = &lt;/code&gt;&lt;code class="shell string"&gt;"&lt;span style="color: red;"&gt;postgres&lt;/span&gt;"&lt;/code&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;&lt;b&gt;&lt;code class="shell plain"&gt;PASS = &lt;/code&gt;&lt;code class="shell string"&gt;"&lt;span style="color: red;"&gt;postgres-password&lt;/span&gt;"&lt;/code&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;&lt;b&gt;&lt;code class="shell plain"&gt;BACKUP_DIR = &lt;/code&gt;&lt;code class="shell string"&gt;"&lt;span style="color: red;"&gt;e:\\postgresql_backups\\&lt;/span&gt;"&lt;/code&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;&lt;b&gt;&lt;code class="shell comments"&gt;# dump using PostgreSQL's custom format, with maximum compression. (-F c, -Z 9)&lt;/code&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;&lt;b&gt;&lt;code class="shell plain"&gt;dumper = &lt;/code&gt;&lt;code class="shell string"&gt;""&lt;/code&gt;&lt;code class="shell string"&gt;" "&lt;/code&gt;&lt;code class="shell plain" style="color: red;"&gt;c:\\program files\\postgresql\\8.1\\bin\\pg_dump&lt;/code&gt;&lt;code class="shell string"&gt;" -U %s -Z 9 -f %s -F c %s&amp;nbsp; "&lt;/code&gt;&lt;code class="shell string"&gt;""&lt;/code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;&lt;/div&gt;&lt;div class="line number15 index14 alt2"&gt;&lt;b&gt;&lt;code class="shell plain"&gt;os.putenv(&lt;/code&gt;&lt;code class="shell string"&gt;'PGPASSWORD'&lt;/code&gt;&lt;code class="shell plain"&gt;, PASS)&lt;/code&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="line number16 index15 alt1"&gt;&lt;/div&gt;&lt;div class="line number17 index16 alt2"&gt;&lt;b&gt;&lt;code class="shell keyword"&gt;for&lt;/code&gt; &lt;code class="shell plain"&gt;database_name &lt;/code&gt;&lt;code class="shell keyword"&gt;in&lt;/code&gt; &lt;code class="shell plain"&gt;database_list :&lt;/code&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="line number18 index17 alt1"&gt;&lt;b&gt;&lt;code class="shell spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="shell plain"&gt;print strftime( &lt;/code&gt;&lt;code class="shell string"&gt;"%Y-%m-%d-%H-%M-%S"&lt;/code&gt; &lt;code class="shell plain"&gt;, gmtime()) + &lt;/code&gt;&lt;code class="shell string"&gt;":dump started for %s"&lt;/code&gt;&lt;code class="shell plain"&gt;%database_name&lt;/code&gt;&lt;/b&gt; &lt;/div&gt;&lt;div class="line number19 index18 alt2"&gt;&lt;b&gt;&lt;code class="shell spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="shell functions"&gt;time&lt;/code&gt; &lt;code class="shell plain"&gt;= str (strftime(&lt;/code&gt;&lt;code class="shell string"&gt;"%Y-%m-%d-%H-%M"&lt;/code&gt;&lt;code class="shell plain"&gt;))&lt;/code&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="line number20 index19 alt1"&gt;&lt;b&gt;&lt;code class="shell spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="shell plain"&gt;file_name = database_name + &lt;/code&gt;&lt;code class="shell string"&gt;'_'&lt;/code&gt; &lt;code class="shell plain"&gt;+ &lt;/code&gt;&lt;code class="shell functions"&gt;time&lt;/code&gt; &lt;code class="shell plain"&gt;+ &lt;/code&gt;&lt;code class="shell string"&gt;".sql.pgdump"&lt;/code&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="line number21 index20 alt2"&gt;&lt;b&gt;&lt;code class="shell spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="shell comments"&gt;#Run the pg_dump command to the right directory&lt;/code&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="line number22 index21 alt1"&gt;&lt;b&gt;&lt;code class="shell spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="shell functions"&gt;command&lt;/code&gt; &lt;code class="shell plain"&gt;= dumper % (USER,&amp;nbsp; BACKUP_DIR + file_name, database_name)&lt;/code&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="line number23 index22 alt2"&gt;&lt;b&gt;&lt;code class="shell spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="shell plain"&gt;subprocess.call(&lt;/code&gt;&lt;code class="shell functions"&gt;command&lt;/code&gt;&lt;code class="shell plain"&gt;,shell = True)&lt;/code&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="line number24 index23 alt1"&gt;&lt;b&gt;&lt;code class="shell spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="shell plain"&gt;print strftime( &lt;/code&gt;&lt;code class="shell string"&gt;"%Y-%m-%d-%H-%M-%S"&lt;/code&gt; &lt;code class="shell plain"&gt;, gmtime()) + &lt;/code&gt;&lt;code class="shell string"&gt;":finished"&lt;/code&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Tente utilizar o python para chamar outros utilitários do postgres. Se quiser fazer um backup de todas as bases de dados, pode utilizar por exemplo o PG_DUMPALL. &lt;br /&gt;&lt;br /&gt;Tem sugestões de melhoria para este script? Poste aqui no nosso fórum!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-7573788938958589060?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/7573788938958589060/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=7573788938958589060' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7573788938958589060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7573788938958589060'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/05/automatize-o-seu-backup-do-postgresql.html' title='Automatize o seu Backup do PostgreSQL via Python!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-4405999470421158432</id><published>2011-05-23T08:32:00.000-03:00</published><updated>2011-05-23T08:32:57.243-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>A Revista Oficial do PostgreSQL!</title><content type='html'>É apenas um teste, mas pode se concretizar. O primeiro número da revista oficial do PostgreSQL está no ar e você pode baixar gratuitamente. &lt;a href="http://pgmag.org/"&gt;Acesse e confira&lt;/a&gt;! Caso a recepção seja boa, a revista ganhará novas edições.&lt;br /&gt;&lt;br /&gt;O primeiro número me agradou bastante, explorando vários itens sobre as futuras versões do Postgres, questões de performance e dicas específicas para&amp;nbsp; sistemas operacionais, o que nem sempre é fácil de se encontrar.&lt;br /&gt;&lt;br /&gt;Você pode colaborar adquirindo a versão impressa ou submetendo matérias para os editores. Confira!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-4405999470421158432?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/4405999470421158432/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=4405999470421158432' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4405999470421158432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4405999470421158432'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/05/revista-oficial-do-postgresql.html' title='A Revista Oficial do PostgreSQL!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-2511484191727932454</id><published>2011-05-19T09:45:00.000-03:00</published><updated>2011-05-19T09:45:37.742-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Participe: Edital para Instrutor de PostgreSQL - UNESCO/ FUNAI</title><content type='html'>&lt;div class="MsoNormal"&gt;Aos instrutores de banco de dados, segue a notícia de edital para instrutor de PostgreSQL. A indicação foi do amigo Bruno Rebello. Participem e divulguem entre os possíveis candidatos! Os editais estão nos sites da &lt;a href="http://www.unesco.org.br/"&gt;UNESCO&lt;/a&gt; e da &lt;a href="http://www.funai.gov.br/"&gt;FUNAI&lt;/a&gt;.&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Avisem sempre que tiverem vagas de seleções e concursos relacionados como PostgreSQL para divulgação neste espaço! &lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;_______________________________________________________________&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;strong&gt;&lt;span style="color: #666666; font-size: 9pt;"&gt;EDITAL 002/2011&lt;/span&gt;&lt;/strong&gt;&lt;span style="color: #666666; font-size: 9pt;"&gt; - A UNESCO e FUNAI, por meio do Projeto 914BRA4008 – “Impactos do Desenvolvimento e Salvaguarda de Comunidades Indígenas”, seleciona na modalidade &lt;strong&gt;&lt;span&gt;“PRODUTO”,&lt;/span&gt;&lt;/strong&gt; 01 profissional com Graduação na área de Tecnologia da Informação e/ou pós-graduação de, no mínimo, 360 horas, mestrado ou doutorado em área de Tecnologia da Informação fornecido por instituição reconhecida pelo Ministério da Educação para &lt;/span&gt;&lt;span style="color: #666666; font-size: 9pt;"&gt;Capacitação de técnicos/servidores da FUNAI, para operação e administração do banco de dados PostgreSQL, banco de dados utilizado para armazenar toda a estrutura de dados&amp;nbsp;projetada no desenvolvimento do Sistema&amp;nbsp;Indigenista de Informações - sistema esse que monitora a implantação dos Planos de Salvaguarda da FUNAI&lt;/span&gt;&lt;span style="color: #666666; font-size: 9pt;"&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="color: #666666; font-size: 9pt;"&gt;Os interessados deverão enviar o CV do dia 16/maio/2011 até às 23h 59 do dia 23/maio/2011 para o endereço &lt;b&gt;&lt;a href="mailto:unescobra4008@gmail.com" rel="nofollow" target="_blank"&gt;unescobra4008@gmail.com&lt;/a&gt;&lt;/b&gt;, no formato Word, Open Office ou PDF , indicando o número do edital e o nome do perfil em que se candidata. Serão desconsiderados os CVs remetidos após a data limite indicada neste edital. Para mais informações, consultar o edital completo que será publicado nos sites &lt;b&gt;&lt;a href="http://www.funai.gov.br/" rel="nofollow" target="_blank"&gt;www.funai.gov.br&lt;/a&gt;&lt;/b&gt; e &lt;b&gt;&lt;a href="http://www.unesco.org.br/" rel="nofollow" target="_blank"&gt;www.unesco.org.br&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;strong&gt;&lt;span style="color: #666666; font-size: 9pt;"&gt;Acesso ao Edital&lt;/span&gt;&lt;/strong&gt;&lt;span style="color: #666666; font-size: 9pt;"&gt;: 914BRA4008 Edital 002/2011, Anexo II (modelo padrão currículo). &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="color: #666666; font-size: 9pt;"&gt;Em atenção às disposições do Decreto nº 5.151, de 22 de julho de 2004 é vedada a contratação, a qualquer título, de servidores ativos da Administração Pública Federal, Estadual, do Distrito Federal ou Municipal, direta ou indireta, bem como de empregados de suas subsidiárias e controladas, no âmbito dos projetos de cooperação técnica internacional.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="color: #666666; font-size: 9pt;"&gt;Estas contratações serão efetuadas mediante processo seletivo simplificado (análise de currículo e entrevista), a ser realizado com no mínimo 03 (três) candidatos, por vaga, com currículos válidos e maior pontuação, sendo exigida, destes profissionais, a comprovação da habilitação profissional e da capacidade técnica ou científica compatível com os trabalhos a serem executados. &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="color: #666666; font-size: 9pt;"&gt;De acordo com a Portaria nº 717, de 09/12/2006, é vedada a contratação de consultor que já esteja cumprindo contrato de consultoria por produto vinculado a projeto de cooperação técnica internacional.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;b&gt;&lt;span style="color: #666666; font-size: 9pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #666666; font-size: 9pt;"&gt;Data de Publicação do Edital: 16/05/2011&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-2511484191727932454?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/2511484191727932454/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=2511484191727932454' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2511484191727932454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2511484191727932454'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/05/participe-edital-para-instrutor-de.html' title='Participe: Edital para Instrutor de PostgreSQL - UNESCO/ FUNAI'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-4601113007530330001</id><published>2011-05-16T15:02:00.000-03:00</published><updated>2011-05-16T15:02:02.663-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Ferramentas'/><title type='text'>Squirrel Client: Suas Conexões em um Único Lugar!</title><content type='html'>Conexões são muito importantes e temos de gerenciá-las. Quando temos conexões para vários bancos de dados distintos em múltiplos servidores e ambientes de desenvolvimento, produção e homologação, esta gestão pode se tornar complicada. O &lt;i&gt;&lt;a href="http://squirrel-sql.sourceforge.net/"&gt;Squirrel Client&lt;/a&gt;&lt;/i&gt; é uma boa ferramenta que permite a gestão das conexões, a visualização e a manipulação de dados do PostgreSQL e da maioria dos bancos de dados livres e proprietários, unificando em um ponto esta função. (eles só não têm um logotipo decente, então ilustrei com esse que encontrei na internet)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Jb0ROWzkT_s/TdFVs5laarI/AAAAAAAAAM0/fWje_HjqZco/s1600/esquilo.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-Jb0ROWzkT_s/TdFVs5laarI/AAAAAAAAAM0/fWje_HjqZco/s1600/esquilo.jpeg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;A instalação é bem fácil e se desejar baixar e executar direto do arquivo JAR ou do script .SH sem precisar instalar a ferramenta, não há segredos (é o que eu faço no cotidiano). No windows pode ser acionado pelo arquivo .BAT.&lt;br /&gt;&lt;br /&gt;Para utilizar o &lt;i&gt;Squirrel Client&lt;/i&gt;, basta baixar a ferramenta e o driver do banco de dados que se deseja acessar. A lista de bancos suportados pela ferramenta é muito vasta, e as configurações a serem feitas não são sofisticadas:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Primeiro passo: Configurar driver&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;No caso do PostgreSQL, o driver pode ser &lt;a href="http://www.postgresql.org/docs/current/static/external-interfaces.html"&gt;baixado facilmente&lt;/a&gt;. Neste exemplo foi utilizado um driver jdbc, copiado para a pasta lib do &lt;i&gt;squirrel client&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Selecione a aba "Drivers" à esquerda da tela. Informe a string de conexão, dê uma descrição para o driver e confirme.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&amp;nbsp;&lt;a href="http://2.bp.blogspot.com/-JFscqdndnsE/TdFZ5pVVllI/AAAAAAAAANE/Lb2bZ7rtV-c/s1600/Captura_de_tela.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-JFscqdndnsE/TdFZ5pVVllI/AAAAAAAAANE/Lb2bZ7rtV-c/s320/Captura_de_tela.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Segundo passo: Configurar conexão&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Uma vez que um&amp;nbsp; driver pode ser utilizado em várias conexões, deve-se configurar a conexão que utiliza o driver.&lt;br /&gt;&lt;br /&gt;Acione a aba"Aliases" e clique no ícone "+" para criar uma nova conexão. Informe o nome, o driver que você criou, a string de conexão, usuário e senha, conforme a figura e confirme.&lt;br /&gt;&lt;br /&gt;Para conectar, clique no primeiro ícone da aba "Aliases".&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-0eVb_8Bw884/TdFZ4wq_rxI/AAAAAAAAANA/GcT45HErxic/s1600/tela+2+-+ALIASES+POSTGRESQL.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-0eVb_8Bw884/TdFZ4wq_rxI/AAAAAAAAANA/GcT45HErxic/s320/tela+2+-+ALIASES+POSTGRESQL.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Visualizando o banco de dados&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A conexão faz com que sejam mostradas duas abas: "Objects" e "SQL".&amp;nbsp; A aba "Objects" permite a visualização do banco de dados através de uma treeview e de várias abas internas que são dinamicamente preenchidas à medida em que um objeto do banco de dados é selecionado.&lt;br /&gt;&lt;br /&gt;A interface é bem detalhada e são apresentadas informações detalhadas a respeito dos metadados que não são comumente mostradas em outras ferramentas similares como permissões de acesso de tabelas e colunas.&lt;br /&gt;&lt;br /&gt;Observe que as informações só serão 100% confiáveis se a coleta de estatísticas do banco de dados estiver atualizada.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-5LWgWghSynI/TdFZ4J69nRI/AAAAAAAAAM8/aNJp_kv_MvI/s1600/SQuirreL+SQL+Client+Version+3.2.1+-+Execu%25C3%25A7%25C3%25A3o+de+SQL.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-5LWgWghSynI/TdFZ4J69nRI/AAAAAAAAAM8/aNJp_kv_MvI/s320/SQuirreL+SQL+Client+Version+3.2.1+-+Execu%25C3%25A7%25C3%25A3o+de+SQL.png" width="279" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Trabalhando com o banco de dados&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A aba SQL permite a realização de consultas e a criação, salvamento e recuperação de scripts sql.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Funções como &lt;i&gt;auto correct/ abreviations&lt;/i&gt; e &lt;i&gt;bookmarks&lt;/i&gt; podem aumentar a produtividade do usuário.&lt;br /&gt;&lt;br /&gt;A execução simultânea de várias conexões é muito útil para evitar a abertura de vários visualizadores em ferramentas distintas.&lt;br /&gt;&lt;br /&gt;É possível &lt;b&gt;criar um ou mais diagramas&lt;/b&gt; utilizando o botão direito do mouse sobre as tabelas e selecionando a opção "add to a graph", um bônus muito interessante, pois mostra os relacionamentos e permite imprimir de várias formas!&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-nfVZNFkPjdg/TdFZ3VPXLQI/AAAAAAAAAM4/nZJmDQaMDLs/s1600/SQuirreL+SQL+Client+Version+3.2.1+-+Conexao+OK.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-nfVZNFkPjdg/TdFZ3VPXLQI/AAAAAAAAAM4/nZJmDQaMDLs/s320/SQuirreL+SQL+Client+Version+3.2.1+-+Conexao+OK.png" width="279" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Limitações&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Por ser uma ferramenta de acesso a dados, não apresenta recursos de design mais avançados para a opção de elaboração de diagramas, que gera diagramas através do esquema SQL, mas não gera esquema SQL com base no diagrama. No entanto isso não chega a ser um limitador, apenas não é o propósito da ferramenta.&lt;br /&gt;&lt;br /&gt;O suporte a Hibernate não foi testado neste post, mas parece ser uma das &lt;i&gt;features&lt;/i&gt; mais interessantes para os usuários deste framework.&lt;br /&gt;&lt;br /&gt;A única restrição que encontrei foi o fato do sistema não apresentar o plano de execução das consultas que utilizei no teste (não testei outros bancos além do Postgresql). Possivelmente as novas versões supram esta necessidade futuramente. &lt;br /&gt;&lt;br /&gt;O &lt;i&gt;squirrel client&lt;/i&gt; se mostra adequado para manter e centralizar conexões a múltiplos bancos de dados, visualizar seus metadados e realizar operações no banco que demandem SQL. &lt;a href="http://www.squirrelsql.org/index.php?page=screenshots"&gt;Veja os screenshots&lt;/a&gt;, baixe, instale e teste!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-4601113007530330001?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/4601113007530330001/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=4601113007530330001' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4601113007530330001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4601113007530330001'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/05/squirrel-client-suas-conexoes-em-um.html' title='Squirrel Client: Suas Conexões em um Único Lugar!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Jb0ROWzkT_s/TdFVs5laarI/AAAAAAAAAM0/fWje_HjqZco/s72-c/esquilo.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-1384754332781178062</id><published>2011-05-13T18:20:00.000-03:00</published><updated>2011-05-13T18:20:38.719-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Ordene Registros Fisicamente com o Comando CLUSTER!</title><content type='html'>O comando CLUSTER permite a ordenação física dos dados de uma tabela com base em um índice. Esta pode ser uma boa opção quando um grande número de leituras sequenciais for realizado com base em um ou mais campos. É um comando já antigo, mas pouco conhecido e utilizado.&lt;br /&gt;&lt;br /&gt;A operação de ordenação é feita uma vez no momento da execução do comando, e caso se deseje que os dados continuem ordenados fisicamente, deve-se reexecutar o comando após alterações nos registros, o que pode tomar muito tempo de processamento. &lt;br /&gt;&lt;br /&gt;Um problema com este comando é a utilização de arquivos temporários que pode exigir espaço em disco extra, além de acessos a disco que tornem a operação mais demorada.. &lt;br /&gt;&lt;br /&gt;A sintaxe é relativamente simples: &lt;br /&gt;&lt;br /&gt;CLUSTER [VERBOSE] table_name [ USING index_name ]&lt;br /&gt;CLUSTER [VERBOSE]&lt;br /&gt;&lt;br /&gt;A cláusula VERBOSE faz com que sejam mostradas informações do andamento da clusterização.&lt;br /&gt;&lt;br /&gt;A sintaxe com nome da tabela e nome do índice é a mais segura, pois se sabe exatamente que tabela e que índice são utilizados.&lt;br /&gt;&lt;br /&gt;A redação com o nome da tabela e sem o nome do índice assume que será utilizado para a ordenação o último índice utilizado.&lt;br /&gt;&lt;br /&gt;A utilização de CLUSTER sem indicação de tabela ou índice reordena todas as tabelas que já tenham sido clusterizadas, o que pode ser arriscado, pois estas classificações de dados podem tomar um tempo substancial.&lt;br /&gt;&lt;br /&gt;Por ser uma operação muito custosa, durante a clusterização a tabela fica indisponível para leituras e escritas, o que faz com que esse comando seja um candidato para momentos do dia de menor quantidade de acessos.&lt;br /&gt;&lt;br /&gt;Abaixo temos um exemplo de clusterização, com criação de tabela, índices e dados e execução dos comandos de clusterização:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;/*&lt;br /&gt;Criação da tabela e inserção nos dados&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;begin transaction;&lt;br /&gt;&lt;br /&gt;drop table TAB_CLUSTER;&lt;br /&gt;/*&lt;br /&gt;drop index TAB_CLUSTER_COD;&lt;br /&gt;drop index TAB_CLUSTER_VALOR;&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;CREATE TABLE TAB_CLUSTER (&lt;br /&gt;COD INTEGER, DESCRICAO VARCHAR(50), DATAHORA TIMESTAMP, VALOR INTEGER);&lt;br /&gt;&lt;br /&gt;create index TAB_CLUSTER_COD on TAB_CLUSTER(COD);&lt;br /&gt;create index TAB_CLUSTER_VALOR on TAB_CLUSTER(VALOR);&lt;br /&gt;&lt;br /&gt;insert into TAB_CLUSTER values (round(CAST (random()*500 AS NUMERIC),0), 'Teste do comando Cluster', current_timestamp, round(CAST (random()*500 AS NUMERIC),0));&lt;br /&gt;insert into TAB_CLUSTER values (round(CAST (random()*500 AS NUMERIC),0), 'Teste do comando Cluster', current_timestamp, round(CAST (random()*500 AS NUMERIC),0));&lt;br /&gt;insert into TAB_CLUSTER values (round(CAST (random()*500 AS NUMERIC),0), 'Teste do comando Cluster', current_timestamp, round(CAST (random()*500 AS NUMERIC),0));&lt;br /&gt;insert into TAB_CLUSTER values (round(CAST (random()*500 AS NUMERIC),0), 'Teste do comando Cluster', current_timestamp, round(CAST (random()*500 AS NUMERIC),0));&lt;br /&gt;insert into TAB_CLUSTER values (round(CAST (random()*500 AS NUMERIC),0), 'Teste do comando Cluster', current_timestamp, round(CAST (random()*500 AS NUMERIC),0));&lt;br /&gt;&lt;br /&gt;commit transaction;&lt;br /&gt;&lt;br /&gt;cluster tab_cluster using tab_cluster_cod;&lt;br /&gt;&lt;br /&gt;cluster tab_cluster using tab_cluster_valor;&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Alternativas ao comando CLUSTER envolvem o uso de CREATE TABLE AS (sintaxe recomendada por compatível com Pl/ PgSQL) ou SELECT INTO. Ambos os comandos leem um conjunto der registros, ordenam e gravam em um local determinado:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;- CREATE TABLE tab_cluster_teste1 AS SELECT * FROM tab_cluster ORDER BY cod;&lt;br /&gt;- SELECT * INTO tab_cluster3 FROM tab_cluster ORDER BY cod;&lt;/i&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-1384754332781178062?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/1384754332781178062/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=1384754332781178062' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/1384754332781178062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/1384754332781178062'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/05/ordene-registros-fisicamente-com-o.html' title='Ordene Registros Fisicamente com o Comando CLUSTER!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-4753778781641969169</id><published>2011-05-12T15:54:00.000-03:00</published><updated>2011-05-13T17:50:58.515-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><title type='text'>PostgreSQL no Ubuntu: Primeiros Passos Após a Instalação</title><content type='html'>Este post é uma continuação do de &lt;a href="http://postgresqlbr.blogspot.com/2011/05/minha-instalacao-do-postgresql-90.html"&gt;instalação do postgresql 9.0 no Ubuntu&lt;/a&gt;. Desta vez o referencial veio do site &lt;a href="http://www.stuartellis.eu/articles/postgresql-setup/"&gt;stuartellis.eu&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Uma vez instalado o banco, o serviço está ativo. &lt;br /&gt;&lt;br /&gt;Por padrão existe um banco de dados postgres e um usuário postgres. É necessário configurar o acesso para poder cadastrar usuários.&lt;br /&gt;&lt;br /&gt;Entre no terminal e siga os seguintes passos:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;- sudo -u postgres psql - Abre o utilitário PSQL utilizando o usuário logado na máquina&lt;br /&gt;- ALTER ROLE postgres WITH ENCRYPTED PASSWORD 'senhaforte'; - Dentro do psql, define a senha do role postgres&lt;br /&gt;- \q - Encerra a sessão do psql&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Agora altere os arquivos postgresql.conf e pg_hba.conf para habilitar o acesso:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;- cd /etc/postgresql/9.0/main&lt;br /&gt;- sudo gedit postgresql.conf - Alterar parâmetro listen_addresses para '*' ou para a lista de endereços desejada&lt;br /&gt;- sudo gedit pg_hba.conf - Alterar configuração de segurança&lt;br /&gt;- sudo postgresql service restart - Reiniciar o serviço atualiza os parâmetros alterados&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Agora você pode entrar no psql como usuário postgresql, executar scripts, etc:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;- sudo -u postgres psql -d postgres &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-4753778781641969169?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/4753778781641969169/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=4753778781641969169' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4753778781641969169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4753778781641969169'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/05/postgresql-no-ubuntu-primeiros-passos.html' title='PostgreSQL no Ubuntu: Primeiros Passos Após a Instalação'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-8760077372145139145</id><published>2011-05-12T14:20:00.000-03:00</published><updated>2011-05-13T17:50:58.572-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><title type='text'>Minha Instalação do PostgreSQL 9.0</title><content type='html'>A minha instalação de postgresql 9.0 no Ubuntu Linux, que já está defasada em relação à nova versão de desenvolvimento (9.1 - &lt;a href="http://www.postgresql.org/about/news.1313"&gt;anúncio&lt;/a&gt;, &lt;a href="http://www.postgresql.org/developer/beta"&gt;download&lt;/a&gt;), eu fiz com base no link do sítio do &lt;a href="http://www.viniciusmutter.com.br/2010/12/instalando-o-postgresql-9-0-no-ubuntu/"&gt;Vinicius&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Utilizei estes comandos no terminal:&lt;br /&gt;- sudo apt-get update&amp;nbsp; - atualização das listas de pacotes do apt-get&lt;br /&gt;- sudo apt-get install postgresql-9.0 - instala o pacote do postgresql, versão 9.0&lt;br /&gt;- sudo apt-get install pgadmin3 - instala o pgadmin&lt;br /&gt;- sudo apt-get autoremove - removendo pacotes não mais necessários&lt;br /&gt;- service postgresql status - teste se a instalação está funcionando. A resposta foi: "Running clusters: 9.0/main". O servidor está no ar!&lt;br /&gt;&lt;br /&gt;Agora é executar, estudar e fazer testes!&lt;br /&gt;&lt;br /&gt;Claro que existem dezenas de sítios com tutoriais e boas dicas sobre  como fazer a instalação, e este post não visa aprofundar o  tema. Mas é sempre bom lembrar: que versão está na sua máquina?&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-8760077372145139145?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/8760077372145139145/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=8760077372145139145' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8760077372145139145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8760077372145139145'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2011/05/minha-instalacao-do-postgresql-90.html' title='Minha Instalação do PostgreSQL 9.0'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-4164410223583494621</id><published>2010-12-29T16:01:00.001-03:00</published><updated>2010-12-29T16:01:59.512-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='LIVRO'/><title type='text'>Uma Leitura Diferente: Teses e Dissertações Sobre PostgreSQL</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_r2Eq58DmzTc/TRuFoM-L6oI/AAAAAAAAAMs/AGBqOyo9LJw/s1600/Captura_da_tela-Biblioteca+Digital+Brasileira+de+Teses+e+Disserta%25C3%25A7%25C3%25B5es+-+2010+-+Mozilla+Firefox.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://4.bp.blogspot.com/_r2Eq58DmzTc/TRuFoM-L6oI/AAAAAAAAAMs/AGBqOyo9LJw/s320/Captura_da_tela-Biblioteca+Digital+Brasileira+de+Teses+e+Disserta%25C3%25A7%25C3%25B5es+-+2010+-+Mozilla+Firefox.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Está sem idéias para o seu projeto de monografia? Está procurando alguma leitura mais aprofundada sobre banco de dados? Para encontrar a solução para estas questões, a &lt;a href="http://bdtd.ibict.br/"&gt;Biblioteca de Teses e Dissertações do IBICT&lt;/a&gt; (Instituto Brasileiro de Informação em Ciência e Tecnologia) é uma boa opção.&lt;br /&gt;&lt;br /&gt;Sua base de dados possui um acervo de pesquisas que engloba áreas como administração, medicina, psicologia e ciência da computação. Fiz uma busca e encontrei 16 documentos relacionados sobre o Postgres e o número tende a crescer.&lt;br /&gt;&lt;br /&gt;Nos textos referentes ao Postgres a qualidade dos textos é relativamente boa e a ferramenta é extendida pela implementação de complementos, explorada como ferramenta de desenvolvimento e comparada com outras ferramentas. Os textos apresentam sugestões de novas pesquisas nas suas considerações finais. RECOMENDO!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-4164410223583494621?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/4164410223583494621/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=4164410223583494621' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4164410223583494621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4164410223583494621'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/12/uma-leitura-diferente-teses-e.html' title='Uma Leitura Diferente: Teses e Dissertações Sobre PostgreSQL'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_r2Eq58DmzTc/TRuFoM-L6oI/AAAAAAAAAMs/AGBqOyo9LJw/s72-c/Captura_da_tela-Biblioteca+Digital+Brasileira+de+Teses+e+Disserta%25C3%25A7%25C3%25B5es+-+2010+-+Mozilla+Firefox.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-2839872634310206965</id><published>2010-12-22T17:12:00.001-03:00</published><updated>2010-12-22T17:14:26.532-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>PgDay 2011 em Cuba: Chamada de Trabalhos</title><content type='html'>Uma boa oportunidade para conhecer Cuba é a terceira edição do seu PgDay. A chamada de trabalhos está aberta até o dia 10 de janeiro. O evento está marcado para os dias 1 a 5 de fevereiro de 2011. Mais informações &lt;a href="http://postgresql.uci.cu/node/22"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Existem muitas curiosidades sobre a comunidade cubana de Postgres que tornam este evento atraente e peculiar. Por ser um país socialista, as decisões são tomadas por consenso em comitês. A necessidade de adotar tecnologias mais acessíveis fez com que o Postgres nos últimos anos se tornasse um dos bancos de dados mais adotados no país, e o google insights mostra que a terra de Fidel atualmente é o país que mais faz buscas sobre o Postgres &lt;a href="http://www.google.com/insights/search/#q=postgresql&amp;amp;date=today%2012-m&amp;amp;cmpt=q"&gt;no mundo todo&lt;/a&gt; (o Brasil está em décimo lugar no mesmo levantamento).&lt;br /&gt;&lt;br /&gt;O PgDay cubano é mais formal que o da maioria dos países e tem forte presença estatal. A chamada de trabalhos é bem detalhada, pedindo artigos escritos com rigor para registro nos anais do evento. Os melhores textos para uma edição especial da "&lt;i&gt;Revista Cubana de Ciencias Informáticas&lt;/i&gt;". &lt;br /&gt;&lt;br /&gt;Os interessados devem se apressar, pois o prazo é bem curto!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-2839872634310206965?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/2839872634310206965/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=2839872634310206965' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2839872634310206965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2839872634310206965'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/12/pgday-2011-em-cuba-chamada-de-trabalhos.html' title='PgDay 2011 em Cuba: Chamada de Trabalhos'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-8352352974160349357</id><published>2010-12-16T09:47:00.000-03:00</published><updated>2010-12-16T09:47:53.277-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='LIVRO'/><title type='text'>Tenha os Manuais de Referência do PostgreSQL!</title><content type='html'>É sempre bom poder consultar fontes robustas de conhecimento para melhor conduzir este projeto. As "Bíblias do Oracle" ou as grandes compilações de APIs do Windows são algumas das publicações que muito me ajudaram. No caso do Postgres, os manuais disponibilizados na web sao a referência mais atual e a mais referenciada. No entanto, para muitos de nós a pesquisa em livros é mais prazeroza, e instituições de ensino e empresas ainda utilizam muito material em papel para pesquisas.&lt;br /&gt;&lt;br /&gt;A gráfica britânica "Network Theory LTS" é uma empresa especializada em editoração e impressão de manuais de software livre como Python e CVS e está disponibilizando a documentação do Postgres 9.0.1 na forma de quatro livros. Os preços são relativamente baixos e parte do valor arrecadado vai para a comunidade de desenvolvimento do PostgreSQL (1 dolar por livro).&lt;br /&gt;&lt;br /&gt;Abaixo coloco as referências:&lt;br /&gt;&lt;br /&gt;- The PostgreSQL 9.0 Reference Manual - Volume 1A - The SQL Language&lt;br /&gt;by The PostgreSQL Global Development Group&lt;br /&gt;ISBN 978-1-906966-04-1, Price $19.95 (£14.95)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-The PostgreSQL 9.0 Reference Manual - Volume 1B - SQL Command Reference&lt;br /&gt;by The PostgreSQL Global Development Group&lt;br /&gt;ISBN 978-1-906966-05-8, Price $19.95 (£14.95)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- The PostgreSQL 9.0 Reference Manual - Volume 2 - Programming Guide&lt;br /&gt;by The PostgreSQL Global Development Group&lt;br /&gt;ISBN 978-1-906966-06-5, Price $19.95 (£14.95)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- The PostgreSQL 9.0 Reference Manual - Volume 3 - Server Administration Guide&lt;br /&gt;by The PostgreSQL Global Development Group&lt;br /&gt;ISBN 978-1-906966-07-2, Price $14.95 (£9.95)&lt;br /&gt;&lt;br /&gt;Acesse o site &lt;a href="http://www.network-theory.co.uk/postgresql9/"&gt;aqui&lt;/a&gt; e não se esqueça de avaliar também o custo do frete do material antes de fazer qualquer compra!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-8352352974160349357?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/8352352974160349357/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=8352352974160349357' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8352352974160349357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8352352974160349357'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/12/tenha-os-manuais-de-referencia-do.html' title='Tenha os Manuais de Referência do PostgreSQL!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-4301228652491220072</id><published>2010-11-08T09:01:00.001-03:00</published><updated>2010-11-08T09:01:50.971-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Postgresql 9.1 em pleno desenvolvimento!</title><content type='html'>O Postgresql 9.1 em pleno desenvolvimento e procurando mais testadores. A versão 9.1 está atualmente em sua segunda versão alfa, com evoluções da versão 9.0. As novas mudanças envolvem features de segurança, sql e recursos de administração e performance.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Conheça as funcionalidade aqui: &lt;a href="http://developer.postgresql.org/pgdocs/postgres/release-9-1-alpha.html"&gt;http://developer.postgresql.org/pgdocs/postgres/release-9-1-alpha.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Participe dos testes clicando &lt;a href="http://wiki.postgresql.org/wiki/HowToBetaTest"&gt;aqui&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-4301228652491220072?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/4301228652491220072/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=4301228652491220072' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4301228652491220072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4301228652491220072'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/11/postgresql-91-em-pleno-desenvolvimento.html' title='Postgresql 9.1 em pleno desenvolvimento!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-3580184835334078957</id><published>2010-10-06T15:54:00.000-03:00</published><updated>2010-10-06T15:54:09.345-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Catálogo do Postgres: uma imagem vale por mil palavras!</title><content type='html'>Compreender os metadados de um SGBD é a forma mais direta de saber como encontrar informações sobre o estado dos bancos de dados de um servidor. No caso do PostgreSQL, as várias tabelas e visões do sistema nem sempre são conhecidas pelo desenvolvedor, o que pode gerar problemas.&lt;br /&gt;&lt;br /&gt;A imagem abaixo sintetiza o catálogo do Postgres em sua versão 8.3, apresentando uma visão geral das relações entre as tabelas de metadados. O diagrama não está compĺeto, por terem sido omitidos alguns dos atributos das relações e faltam visões de sistema como PG_TABLES e PG_LOCKS, mas me parece uma iniciativa pioneira para abrir estas informações para um público maior.&lt;br /&gt;&lt;br /&gt;A imagem foi encontrada &lt;a href="http://www.eqsoft.net/blog/index.php?/archives/1635-El-catalogo-interno-de-PostgreSQL.html"&gt;neste site&lt;/a&gt; peruano. Caso alguém conheça mais sobre a origem desta imagem e seu(s) autor(es) ou saiba de outra que englobe mais informação ou versões mais novas do Postgres, não deixe de me avisar!!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_r2Eq58DmzTc/TKzB97DtDfI/AAAAAAAAAMc/KOq8zyGMHsM/s1600/catalog+postgresql+8.3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_r2Eq58DmzTc/TKzB97DtDfI/AAAAAAAAAMc/KOq8zyGMHsM/s320/catalog+postgresql+8.3.png" width="230" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-3580184835334078957?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/3580184835334078957/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=3580184835334078957' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3580184835334078957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3580184835334078957'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/10/catalogo-do-postgres-uma-imagem-vale.html' title='Catálogo do Postgres: uma imagem vale por mil palavras!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r2Eq58DmzTc/TKzB97DtDfI/AAAAAAAAAMc/KOq8zyGMHsM/s72-c/catalog+postgresql+8.3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-6250862037276282248</id><published>2010-10-04T15:28:00.000-03:00</published><updated>2010-10-04T15:28:53.963-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>A Cláusula CASE</title><content type='html'>O uso de expressões condicionais dentro de SQL permite a geração de resultados mais claros sem a necessidade de se programar dentro do código das aplicações as condições a serem verificadas.&lt;br /&gt;&lt;br /&gt;A cláusula CASE permite que os valores&amp;nbsp; retornados pelas consultas possam ser modificados caso sejam compatíveis com determinadas expressões de forma relativamente simples:&lt;br /&gt;&lt;br /&gt;&lt;pre class="SYNOPSIS"&gt;&lt;b&gt;CASE WHEN &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;condition&lt;/i&gt;&lt;/tt&gt; THEN &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;result&lt;/i&gt;&lt;/tt&gt;&lt;/b&gt;&lt;/pre&gt;&lt;pre class="SYNOPSIS"&gt;&lt;b&gt;&lt;tt class="REPLACEABLE"&gt;&lt;i&gt;[&lt;/i&gt;&lt;/tt&gt;&lt;span class="OPTIONAL"&gt;WHEN ...&lt;/span&gt;]&lt;/b&gt;&lt;/pre&gt;&lt;pre class="SYNOPSIS"&gt;&lt;b&gt;[&lt;span class="OPTIONAL"&gt;ELSE &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;result&lt;/i&gt;&lt;/tt&gt;&lt;/span&gt;]&lt;br /&gt;END&lt;/b&gt; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A cláusula CASE aceita uma condição consiste em uma expressão simples e retorna o valor que consta após a cláusula THEN, caso a condição seja satisfeita. Podem ser utilizados opcionalmente mais de um WHEN&amp;nbsp; no comando e a cláusula ELSE que é disparada quando nenhuma das condições do case seja satisfeita.&lt;br /&gt;&lt;br /&gt;Abaixo, os comandos de criação de duas tabelas e a inserção de dados que serão utilizados para os exemplos de sintaxe: &lt;br /&gt;&lt;br /&gt;&lt;b&gt;CREATE TABLE VALORES (val INTEGER);&lt;br /&gt;INSERT INTO VALORES VALUES (1);&lt;br /&gt;INSERT INTO VALORES VALUES (2);&lt;br /&gt;&lt;br /&gt;CREATE TABLE SIGNOS (val CHAR(1));&lt;br /&gt;INSERT INTO SIGNOS VALUES ('A');&lt;br /&gt;INSERT INTO SIGNOS VALUES ('T');&lt;br /&gt;INSERT INTO SIGNOS VALUES ('G');&lt;/b&gt;&lt;br /&gt;&lt;b&gt;INSERT INTO SIGNOS VALUES ('X');&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sintaxe 1:&lt;/b&gt; Caso o valor numérico corresponda à condição, retorna uma string explicativa.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;SELECT val, &lt;br /&gt;CASE &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHEN val=1 THEN 'Primeiro'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHEN val=2 THEN 'Segundo'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ELSE 'Não Classificado'&lt;br /&gt;END&lt;br /&gt;FROM VALORES;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;val |&amp;nbsp;&amp;nbsp; case&amp;nbsp;&amp;nbsp; &lt;br /&gt;-----+----------&lt;br /&gt;&amp;nbsp;&amp;nbsp; 1 | Primeiro&lt;br /&gt;&amp;nbsp;&amp;nbsp; 2 | Segundo&lt;br /&gt;(2 registros)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sintaxe 2:&lt;/b&gt; Testa se o valor numérico é par ou ímpar e retorna uma string explicativa.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SELECT val, &lt;br /&gt;CASE &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHEN val%2=1 THEN 'Ímpar'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHEN val%2=0 THEN 'Par'&lt;br /&gt;END&lt;br /&gt;FROM VALORES;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;val | case&amp;nbsp; &lt;br /&gt;-----+-------&lt;br /&gt;&amp;nbsp;&amp;nbsp; 1 | Ímpar&lt;br /&gt;&amp;nbsp;&amp;nbsp; 2 | Par&lt;br /&gt;(2 registros)&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Sintaxe 3:&lt;/b&gt; O valor reTesta se o valor numérico é par ou ímpar e retorna uma string explicativa.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SELECT val, &lt;br /&gt;CASE &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHEN val='A' THEN 'Primeiro'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHEN val='T' THEN 'Segundo'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHEN val='G' THEN 'Terceiro'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ELSE 'Não Classificado'&lt;br /&gt;END&lt;br /&gt;FROM SIGNOS;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;val |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;-----+------------------&lt;br /&gt;&amp;nbsp;A&amp;nbsp;&amp;nbsp; | Primeiro&lt;br /&gt;&amp;nbsp;T&amp;nbsp;&amp;nbsp; | Segundo&lt;br /&gt;&amp;nbsp;G&amp;nbsp;&amp;nbsp; | Terceiro&lt;br /&gt;&amp;nbsp;X&amp;nbsp;&amp;nbsp; | Não Classificado&lt;br /&gt;(4 registros) &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Nota: &lt;/b&gt;para condições mais complexas e que tomem muito tempo de processamento, pode ser criada uma função armazenada, que realiza as verificações de um case.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-6250862037276282248?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/6250862037276282248/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=6250862037276282248' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6250862037276282248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6250862037276282248'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/10/clausula-case.html' title='A Cláusula CASE'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-4926471608261137650</id><published>2010-09-20T11:02:00.001-03:00</published><updated>2010-09-20T11:04:31.706-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Habemus Postgresql 9.0!!!</title><content type='html'>&lt;span class="" id="result_box"&gt;&lt;span title=""&gt;Lançada oficialmente a&amp;nbsp; versão 9.0 do Postgresql, com novas funcionalidade e recursos para escalabilidade a muito tempo esperados! Atualize sua versão &lt;a href="http://www.postgresql.org/"&gt;aqui&lt;/a&gt;!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box"&gt;&lt;span title=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box"&gt;&lt;span title=""&gt;Boa oportunidade para quem deseja estudar banco de dados e para quem já trabalha com a ferramenta de fazer uma atualização no servidor!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;&lt;span class="" id="result_box"&gt;&lt;span title=""&gt;Abaixo, coloco o texto do lançamento, toscamente traduzido do inglês:&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;span class="" id="result_box"&gt;&lt;span title=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box"&gt;&lt;span title=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box"&gt;&lt;span title=""&gt;O PostgreSQL 9.0 chegou! &lt;/span&gt;&lt;span title=""&gt;O Grupo de Desenvolvimento Global do ostgreSQL&lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;anuncia a disponibilidade do nosso lançamento mais aguardado.&lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box"&gt;&lt;span style="background-color: white;" title=""&gt;PostgreSQL 9.0 inclui &lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box"&gt;&lt;span style="background-color: white;" title=""&gt;replicação binária "&lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box"&gt;&lt;span style="background-color: white;" title=""&gt;&lt;i&gt;built-in&lt;/i&gt;" e mais de uma dúzia&lt;/span&gt;&lt;span title=""&gt;outras características importantes voltadas a todos os desenvolvedores, de web &lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;hackers a administradores de banco de dados.&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;A versão 9.0 inclui funcionalidades mais importantes do que qualquer liberação antes dela, incluindo:&lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;* Hot standby&lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;* Streaming Replication&lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;* Atualizações In-Place&lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;* &lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box"&gt;&lt;span style="background-color: white;" title=""&gt;Versões para &lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box"&gt;&lt;span style="background-color: white;" title=""&gt;Windows 64-bit &lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;* Fácil gerenciamento de permissões em massa&lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;* Blocos anônimos de código e nomeação de &lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box"&gt;&lt;span style="background-color: white;" title=""&gt;chamadas de &lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box"&gt;&lt;span style="background-color: white;" title=""&gt;parâmetros&lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box"&gt;&lt;span style="background-color: white;" title=""&gt;&amp;nbsp; para procedimentos armazenados&lt;/span&gt;&lt;span style="background-color: white;" title=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box"&gt;&lt;span style="background-color: white;" title=""&gt;* Novas "Window Functions" e ordenação de agregados&lt;br /&gt;&lt;/span&gt;&lt;span title=""&gt;... &lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;e muito mais alterações. &lt;/span&gt;&lt;span title=""&gt;Para mais detalhes sobre as mais de 200 adições e&lt;/span&gt;&lt;span style="background-color: white;" title=""&gt;melhorias nesta versão, desenvolvida por mais de uma centena de colaboradores, &lt;/span&gt;&lt;span title=""&gt;consulte as notas de lançamento.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-4926471608261137650?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/4926471608261137650/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=4926471608261137650' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4926471608261137650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4926471608261137650'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/09/habemus-postgresql-90.html' title='Habemus Postgresql 9.0!!!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-5542192495743984939</id><published>2010-08-30T10:07:00.000-03:00</published><updated>2010-08-30T10:07:16.175-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Outros'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>PostgreSQL Beta 4 Lançado!</title><content type='html'>Liberada nova versão de teste do Postgresql, a &lt;a href="http://www.postgresql.org/"&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="http://www.postgresql.org/about/news.1223"&gt;aqui&lt;/a&gt;! Download &lt;a href="http://www.postgresql.org/download"&gt;aqui&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-5542192495743984939?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/5542192495743984939/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=5542192495743984939' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5542192495743984939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5542192495743984939'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/08/postgresql-beta-4-lancado.html' title='PostgreSQL Beta 4 Lançado!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-2384026433716182907</id><published>2010-08-30T09:35:00.001-03:00</published><updated>2010-08-30T10:16:28.333-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Outros'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Coloque o PostgreSQL no seu Navegador!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_r2Eq58DmzTc/THuk50if9EI/AAAAAAAAAMM/mY-nMI_NRbU/s1600/postgresql+personas" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_r2Eq58DmzTc/THuk50if9EI/AAAAAAAAAMM/mY-nMI_NRbU/s320/postgresql+personas" /&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="http://www.getpersonas.com/en-US/"&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: "PostgreSQL Simple", 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="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-2384026433716182907?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/2384026433716182907/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=2384026433716182907' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2384026433716182907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2384026433716182907'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/08/coloque-o-portgresql-no-seu-navegador.html' title='Coloque o PostgreSQL no seu Navegador!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_r2Eq58DmzTc/THuk50if9EI/AAAAAAAAAMM/mY-nMI_NRbU/s72-c/postgresql+personas' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-3435815304201954212</id><published>2010-07-14T09:47:00.005-03:00</published><updated>2010-09-14T08:57:30.578-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>Boa Apostila de Introdução ao Postgres</title><content type='html'>Encontrei uma apostila de postgres bem simples de 2005, ainda referente à versão 7.*, mas ao mesmo tempo bastante concisa e prática para quem está aprendendo ou ensinando. &lt;span class="f"&gt;&lt;cite&gt;&lt;/cite&gt;&lt;/span&gt;Baixe o pdf &lt;a href="http://www.blogger.com/goog_8694812"&gt;&lt;/a&gt;&lt;a href="http://www.unesp.br/gs/treinamento/graduacao/apostilaPostgre.pdf"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Não consegui maiores informações sobre a autora, Vanessa Rocha Solgate.&lt;br /&gt;&lt;br /&gt;Você sabe de alguma outra apostila que possa ser referenciada?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Atualização: Fecharam o acesso à apostila. :(&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tentativas de acesso geram a mensagem: "You don't have permission to access /gs/treinamento/graduacao/apostilaPostgre.pdf on this server.".&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Colocarei em breve mais links para outros materiais que não sejam privados à medida em que for descobrindo.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-3435815304201954212?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/3435815304201954212/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=3435815304201954212' title='6 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3435815304201954212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3435815304201954212'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/07/boa-apostila-de-introducao-ao-postgres.html' title='Boa Apostila de Introdução ao Postgres'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-8487777706035356523</id><published>2010-07-07T12:35:00.002-03:00</published><updated>2010-07-07T12:42:01.378-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>PostgreSQL Feature Matrix!</title><content type='html'>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="http://www.postgresql.org/about/featurematrix"&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="tblBasicGrey" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th class="colMid" align="center"&gt;&lt;br /&gt;&lt;/th&gt;&lt;th class="colMid" align="center"&gt;&lt;br /&gt;&lt;/th&gt;&lt;th class="colMid" align="center"&gt;&lt;br /&gt;&lt;/th&gt;&lt;th class="colMid" align="center"&gt;&lt;br /&gt;&lt;/th&gt;&lt;th class="colMid" align="center"&gt;&lt;br /&gt;&lt;/th&gt;&lt;th class="colMid" align="center"&gt;&lt;br /&gt;&lt;/th&gt;&lt;th class="colLast" align="center"&gt;&lt;br /&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-8487777706035356523?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/8487777706035356523/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=8487777706035356523' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8487777706035356523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8487777706035356523'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/07/postgresql-feature-matrix.html' title='PostgreSQL Feature Matrix!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-6432437458249996705</id><published>2010-05-31T07:41:00.005-03:00</published><updated>2010-05-31T08:35:44.402-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>PostgreSQL 9.0: Quais são as novidades? A visão das "funcionalidades da semana" - Parte 2!</title><content type='html'>&lt;div class="post-header"&gt;  &lt;/div&gt;  &lt;div class="post-body entry-content"&gt;&lt;style type="text/css"&gt;  &lt;!--   @page { margin: 2cm }   P { margin-bottom: 0.21cm }  --&gt;  &lt;/style&gt;  &lt;p class="western"&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 "PostgreSQL Weekly News", organizado por David Fetter apresenta uma seção chamada "Feature of the Week", ou funcionalidade da semana, descrevendo uma alteração em desenvolvimento. Os informes originais podem ser consultados &lt;a href="http://www.postgresql.org/community/weeklynews/"&gt;aqui&lt;/a&gt;. &lt;/p&gt; &lt;p class="western"&gt;Abaixo listo as últimas funcionalidades citadas, agregando algum comentário quando pertinente:&lt;/p&gt;&lt;p class="western"&gt;&lt;span style="font-weight: bold;"&gt;31/05/2010&lt;/span&gt; - Esta semana não teve "funcionalidade da semana". 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="western"&gt;&lt;span style="font-weight: bold;"&gt;23/05/2010&lt;/span&gt; - &lt;span id="result_box" class="medium_text"&gt;&lt;span style="" title=""&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="western"&gt;&lt;span style="font-weight: bold;"&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="http://pgdocptbr.sourceforge.net/pg82/app-initdb.html"&gt;aqui&lt;/a&gt;.  &lt;/p&gt;&lt;p class="western"&gt;&lt;span style="font-weight: bold;"&gt;09/05/2010&lt;/span&gt; - &lt;span id="result_box" class="long_text"&gt;&lt;span style="" title=""&gt;Você pode criar &lt;/span&gt;&lt;/span&gt;&lt;span id="result_box" class="long_text"&gt;&lt;span style="" title=""&gt;triggers &lt;/span&gt;&lt;/span&gt;&lt;span id="result_box" class="long_text"&gt;&lt;span style="" title=""&gt;por coluna, ou seja, que são disparads  somente na modificação das colunas especificadas. Recurso utilíssimo!!!&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);" title=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western"&gt;&lt;span id="result_box" class="long_text"&gt;&lt;span style="background-color: rgb(255, 255, 255);" title=""&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="western"&gt;&lt;span style="font-weight: bold;"&gt;02/05/2010&lt;/span&gt; - &lt;span id="result_box" class="medium_text"&gt;&lt;span style="" title=""&gt;Agora você pode chamar funções com parâmetros nomeados, por exemplo, &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);" title=""&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="western"&gt;&lt;span id="result_box" class="medium_text"&gt;&lt;span style="background-color: rgb(255, 255, 255);" title=""&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="western"&gt;&lt;span style="font-weight: bold;"&gt;25/04/2010&lt;/span&gt; - &lt;span id="result_box" class="short_text"&gt;&lt;span style="" title=""&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="western"&gt;&lt;span style="font-weight: bold;"&gt;18/04/2010&lt;/span&gt; - &lt;span id="result_box" class="short_text"&gt;&lt;span style="" title=""&gt;GUCs agora são reguláveis por função e por banco de dados.  &lt;/span&gt;&lt;span style="" title=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western"&gt;&lt;span id="result_box" class="short_text"&gt;&lt;span style="" title=""&gt;Você sabe o que é GUC? &lt;/span&gt;&lt;/span&gt;&lt;span style="visibility: visible;" id="main"&gt;&lt;span style="visibility: visible;" id="search"&gt;&lt;span style="font-style: italic;"&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 style="visibility: visible;" id="main"&gt;&lt;span style="visibility: visible;" id="search"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western"&gt;&lt;span style="font-weight: bold;"&gt;11/04/2010&lt;/span&gt; - "You can now GRANT and REVOKE on objects schema-wide in a single command".&lt;br /&gt;&lt;/p&gt;&lt;p class="western"&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="western"&gt;&lt;span style="font-weight: bold;"&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="western"&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 style="font-size:100%;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span style="font-weight: bold;"&gt;01/04/2010&lt;/span&gt; - "Distributed map-reduce functions in Erlang". 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="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-6432437458249996705?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/6432437458249996705/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=6432437458249996705' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6432437458249996705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6432437458249996705'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/05/postgresql-90-quais-sao-as-novidades.html' title='PostgreSQL 9.0: Quais são as novidades? A visão das &quot;funcionalidades da semana&quot; - Parte 2!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-9054633505063867483</id><published>2010-05-28T11:29:00.003-03:00</published><updated>2010-05-28T11:34:03.548-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Participe do PgDay de Brasília 2010!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r2Eq58DmzTc/S__T48dgwmI/AAAAAAAAAME/QZy3GhEuo40/s1600/imgem+pgday.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 301px; height: 320px;" src="http://1.bp.blogspot.com/_r2Eq58DmzTc/S__T48dgwmI/AAAAAAAAAME/QZy3GhEuo40/s320/imgem+pgday.jpg" alt="" id="BLOGGER_PHOTO_ID_5476328647161856610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Faltam poucos dias para o PgDay em Brasília! Informe-se e se inscreva &lt;a href="http://www.postgresql.org.br/eventos/pgday/df/2010"&gt;aqui&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-9054633505063867483?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/9054633505063867483/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=9054633505063867483' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/9054633505063867483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/9054633505063867483'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/05/participe-do-pgday-de-brasilia-2010.html' title='Participe do PgDay de Brasília 2010!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_r2Eq58DmzTc/S__T48dgwmI/AAAAAAAAAME/QZy3GhEuo40/s72-c/imgem+pgday.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-4517630244732002940</id><published>2010-04-20T08:33:00.002-03:00</published><updated>2010-04-20T08:39:12.316-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Erros de "Permission Denied na Criação de Tablespaces"</title><content type='html'>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 "permission denied".&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 style="font-weight: bold;"&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 style="font-weight: bold;"&gt;Passo 2: &lt;/span&gt;Abrir tela de configuração&lt;br /&gt;Entre no Windows Explorer e acione o menu "Ferramentas/ Opções de Pasta...".&lt;br /&gt;O sistema apresentará uma tela com as opções de pasta.&lt;br /&gt;Desmarque a opção "Usar Compartilhamento Simples de Arquivo (Recomendado)" 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 style="font-weight: bold;"&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&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;Em seguida, clique na aba segurança.  &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;Na tela apresentada, clique em “Adicionar”. Aparecerá uma tela como a que aparece abaixo. Defina o local (no botão "Locais") 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="western" style="margin-bottom: 0cm;"&gt;&lt;a href="http://3.bp.blogspot.com/_r2Eq58DmzTc/S7M7I-Y6Y3I/AAAAAAAAAL0/df-Xdoi_OUE/s1600/tablespace+4.PNG"&gt;&lt;img src="http://3.bp.blogspot.com/_r2Eq58DmzTc/S7M7I-Y6Y3I/AAAAAAAAAL0/df-Xdoi_OUE/s320/tablespace+4.PNG" name="figura1" vspace="5" width="320" border="0" height="175" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&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="western" style="margin-bottom: 0cm;"&gt;&lt;a href="http://1.bp.blogspot.com/_r2Eq58DmzTc/S7M7BwzUUJI/AAAAAAAAALs/Z_2Lu4ILEZk/s1600/tablespace+3.PNG"&gt;&lt;img src="http://1.bp.blogspot.com/_r2Eq58DmzTc/S7M7BwzUUJI/AAAAAAAAALs/Z_2Lu4ILEZk/s320/tablespace+3.PNG" name="figura2" vspace="5" width="244" border="0" height="320" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;&lt;span style="font-weight: bold;"&gt;Passo 4&lt;/span&gt;: Criação do tablespace.  &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;Utilize para isso o comando &lt;a href="http://postgresqlbr.blogspot.com/2007/06/o-comando-create-tablespace.html"&gt;CREATE TABLESPACE&lt;/a&gt;.&lt;/p&gt;  &lt;p class="western" style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="western" style="margin-bottom: 0cm;"&gt;Este post teve contribuição de Jeferson Gallina.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-4517630244732002940?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/4517630244732002940/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=4517630244732002940' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4517630244732002940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4517630244732002940'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/04/erros-de-permission-denied-na-criacao.html' title='Erros de &quot;Permission Denied na Criação de Tablespaces&quot;'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r2Eq58DmzTc/S7M7I-Y6Y3I/AAAAAAAAAL0/df-Xdoi_OUE/s72-c/tablespace+4.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-3854620452805847879</id><published>2010-03-08T09:34:00.013-03:00</published><updated>2010-05-31T08:32:49.116-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>PostgreSQL 9.0: Quais são as novidades? A visão das "funcionalidades da semana" - Parte 1!!!</title><content type='html'>&lt;style type="text/css"&gt;  &lt;!--   @page { margin: 2cm }   P { margin-bottom: 0.21cm }  --&gt;  &lt;/style&gt;  &lt;p class="western"&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 "PostgreSQL Weekly News", organizado por David Fetter apresenta uma seção chamada "Feature of the Week", ou funcionalidade da semana, descrevendo uma alteração em desenvolvimento. Os informes originais podem ser consultados &lt;a href="http://www.postgresql.org/community/weeklynews/"&gt;aqui&lt;/a&gt;. &lt;/p&gt; &lt;p class="western"&gt;Abaixo listo as últimas funcionalidades citadas, agregando algum comentário quando pertinente:&lt;/p&gt;&lt;p class="western"&gt;&lt;span style="font-weight: bold;"&gt;28/03/2010&lt;/span&gt; - Implementação do conceito de blocos anônimos de código (&lt;span style="font-style: italic;"&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="western"&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="western"&gt;O exemplo abaixo eu peguei &lt;a href="http://developer.postgresql.org/pgdocs/postgres/sql-do.html"&gt;aqui&lt;/a&gt;:&lt;/p&gt;&lt;pre class="PROGRAMLISTING"&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="western"&gt;&lt;span style="font-weight: bold;"&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="western"&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="http://developer.postgresql.org/pgdocs/postgres/hstore.html"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p class="western"&gt;&lt;span style="font-weight: bold;"&gt;14/03/2010&lt;/span&gt; - Em PL/pgsql, o &lt;a href="http://www.postgresql.org/docs/8.4/static/plpgsql-cursors.html"&gt;comando MOVE&lt;/a&gt; agora funciona de forma compreensível com  Cursores.&lt;br /&gt;&lt;/p&gt;&lt;p class="western"  style="font-family:times new roman;"&gt;Obs: Não deu para entender o problema que havia antes, mas este comando reposiciona o cursor sem recuperar dados (&lt;span style="font-style: italic;" class="LITERAL"&gt;NEXT&lt;/span&gt;&lt;span style="font-style: italic;"&gt;,      &lt;/span&gt;&lt;span style="font-style: italic;" class="LITERAL"&gt;PRIOR&lt;/span&gt;&lt;span style="font-style: italic;"&gt;,      &lt;/span&gt;&lt;span style="font-style: italic;" class="LITERAL"&gt;FIRST&lt;/span&gt;&lt;span style="font-style: italic;"&gt;,      &lt;/span&gt;&lt;span style="font-style: italic;" class="LITERAL"&gt;LAST&lt;/span&gt;&lt;span style="font-style: italic;"&gt;,      &lt;/span&gt;&lt;span style="font-style: italic;" class="LITERAL"&gt;ABSOLUTE&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-style: italic;" class="REPLACEABLE"&gt;count&lt;/span&gt;&lt;span style="font-style: italic;"&gt;,      &lt;/span&gt;&lt;span style="font-style: italic;" class="LITERAL"&gt;RELATIVE&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-style: italic;" class="REPLACEABLE"&gt;count&lt;/span&gt;&lt;span style="font-style: italic;"&gt;,      &lt;/span&gt;&lt;span style="font-style: italic;" class="LITERAL"&gt;FORWARD&lt;/span&gt;&lt;span style="font-style: italic;"&gt;, &lt;/span&gt;ou      &lt;span style="font-style: italic;" class="LITERAL"&gt;BACKWARD&lt;/span&gt;).&lt;/p&gt;&lt;p style="font-family: times new roman;" class="western"&gt;&lt;/p&gt;&lt;p class="western"&gt;&lt;span style="font-weight: bold;"&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="western"&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="western"&gt;&lt;span style="font-weight: bold;"&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="western"&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="western"&gt;&lt;span style="font-weight: bold;"&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="western"&gt;Obs: Funcionalidade de performance, para consultas específicas.&lt;/p&gt; &lt;p class="western"&gt;&lt;span style="font-weight: bold;"&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="western"&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="western"&gt;&lt;span style="font-weight: bold;"&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="western"&gt;Obs: Funcionalidade de performance, para consultas específicas.&lt;/p&gt; &lt;p class="western"&gt;&lt;span style="font-weight: bold;"&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="western"&gt;Obs: Sintaxe interessante para os desenvolvedores de ferramentas de banco de dados.&lt;/p&gt; &lt;p class="western"&gt;&lt;span style="font-weight: bold;"&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="western"&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="western"&gt;&lt;span style="font-weight: bold;"&gt;10/01/2010&lt;/span&gt; - Agora você pode armazenar em log o estado de consultas SQL, erros, etc, usando "%e" na sua log_line_prefix.&lt;/p&gt; &lt;p class="western"&gt;&lt;span style="font-weight: bold;"&gt;03/01/2010 &lt;/span&gt;- No psql o uso de "\d" agora mostra quantas tabelas herdadas uma tabela-mãe tem, e "\d+" lista os nomes das tabelas herdadas.&lt;/p&gt; &lt;p class="western"&gt;Obs: Alteração de pouco impacto para quem não utiliza recursos objeto-relacionais.&lt;/p&gt; &lt;p class="western"&gt;&lt;span style="font-weight: bold;"&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="western"&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="western"&gt;&lt;span style="font-weight: bold;"&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="western"&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="western"&gt;&lt;span style="font-weight: bold;"&gt;13/12/2009 &lt;/span&gt;- Constraints de exclusão (por Jeff Davis) permitem que você especifique como únicos "dados" que abranjam um intervalo, como uma área geométrica, um período de tempo, ou um array.&lt;/p&gt; &lt;p class="western"&gt;Obs: Função importante para quem trabalha com lógicas de negócios no banco de dados.&lt;/p&gt; &lt;p class="western"&gt;Abaixo, a redação oficial da coluna:&lt;/p&gt; &lt;p class="western"&gt;&lt;span style="font-weight: bold;"&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="western"&gt;&lt;span style="font-weight: bold;"&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="western"&gt;&lt;span style="font-weight: bold;"&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="western"&gt;&lt;span style="font-weight: bold;"&gt;14/02/2010 &lt;/span&gt;- Uniqueness violations now raise more detailed error messages.&lt;/p&gt; &lt;p class="western"&gt;&lt;span style="font-weight: bold;"&gt;31/01/2010&lt;/span&gt; - Uniqueness constraints can now be deferred until commit time.&lt;/p&gt; &lt;p class="western"&gt;&lt;span style="font-weight: bold;"&gt;24/01/2010 &lt;/span&gt;- The DROP IF EXISTS syntax now works on columns and constraints.&lt;/p&gt; &lt;p class="western"&gt;&lt;span style="font-weight: bold;"&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="western"&gt;&lt;span style="font-weight: bold;"&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="western"&gt;&lt;span style="font-weight: bold;"&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="western"&gt;&lt;span style="font-weight: bold;"&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="western"&gt;&lt;span style="font-weight: bold;"&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="western"&gt;&lt;span style="font-weight: bold;"&gt;13/12/2009&lt;/span&gt; - Exclusion Constraints (by Jeff Davis) allow you to specify as "unique" data which covers a range, such as a geometric area, a period of time, or an array.&lt;/p&gt; &lt;p class="western"&gt;O que acharam destas novas funcionalidades?&lt;br /&gt;&lt;/p&gt;&lt;p class="western"&gt;Elas impactarão o seu trabalho atual?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-3854620452805847879?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/3854620452805847879/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=3854620452805847879' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3854620452805847879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3854620452805847879'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/03/postgresql-90-quais-sao-as-novidades.html' title='PostgreSQL 9.0: Quais são as novidades? A visão das &quot;funcionalidades da semana&quot; - Parte 1!!!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-5862377667119385687</id><published>2010-03-04T09:20:00.006-03:00</published><updated>2010-03-04T09:28:10.660-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><title type='text'>Acompanhe o Status do Servidor no PgAdmin III</title><content type='html'>&lt;div&gt;Acompanhar os acessos ao banco de dados é uma necessidade para quem lida com aplicações de maior porte. O PgAdmin III apresenta um bom painel que premite acompanhar o servidor, mostrando as conexões, bloqueios, transações correntes e o arquivo de log de auditoria. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;O recurso pode ser utilizado através do menu "Ferramentas/ Status do Servidor". Abaixo, uma visualização da tela apresentada.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;img id="BLOGGER_PHOTO_ID_5444753916304566370" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 118px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_r2Eq58DmzTc/S4-m1t7AKGI/AAAAAAAAALk/RBY_gyNaKck/s320/status+do+servidor.PNG" border="0" /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-5862377667119385687?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/5862377667119385687/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=5862377667119385687' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5862377667119385687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5862377667119385687'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/03/acompanhe-o-status-do-servidor-no.html' title='Acompanhe o Status do Servidor no PgAdmin III'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_r2Eq58DmzTc/S4-m1t7AKGI/AAAAAAAAALk/RBY_gyNaKck/s72-c/status+do+servidor.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-4146466099401723566</id><published>2010-03-01T15:04:00.008-03:00</published><updated>2010-03-04T09:30:09.859-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ferramentas'/><title type='text'>DreamCoder for PostgreSQL: Ferramenta Visual</title><content type='html'>Uma das maiores queixas dos profissionais de banco de dados é a falta de ferramentas visuais robustas.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As opções abertas contribuem para reduzir este problema, mas ainda apresentam deficiências e lacunas de importantes funcionalidades que restringem sua utilização e difusão. Ao mesmo tempo, versões freeware de softwares comerciais podem ser úteis em virtude de suas funcionalidades, apesar de não terem seu código disponibilizado.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;O DreamCoder for PostgreSQL é uma opção freeware que promete facilitar o trabalho com este banco de dados uma rápida análise da ferramenta mostrou pontos fortes e deficiências importantes. O software pode ser baixado &lt;a href="http://www.sqldeveloper.net/database-tools/products/download-center.html"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Abaixo, uma tela com a interface da ferramenta.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5443729232868652338" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 171px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_r2Eq58DmzTc/S4wC5SqLtTI/AAAAAAAAALU/5467-mYMo9c/s320/visao+geral+da+ferramenta.PNG" border="0" /&gt;&lt;br /&gt;O editor de plpgsql apresenta bons recursos de formatação que promovem a produtividade.&lt;br /&gt;Vide imagem abaixo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5443729443113180626" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 171px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_r2Eq58DmzTc/S4wDFh4YndI/AAAAAAAAALc/cTjjY9bQNuE/s320/editor+de+plpgsql.PNG" border="0" /&gt;&lt;br /&gt;&lt;strong&gt;Pontos Fortes:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;- Versão Freeware (a Enterprise pode ser baixada com )&lt;br /&gt;- Atualização Recente (02 de 2010)&lt;br /&gt;- Bom editor de Pl/ PgSQL&lt;br /&gt;- Bons recursos visuais para visualização e navegação nos objetos do banco, mostrando propriedades e dependências.&lt;br /&gt;- Configuração de autosubstituição de caracteres.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Pontos Fracos:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;- Não apresenta funções de engenharia reversa e importação.&lt;br /&gt;- Não apresenta assistentes para a criação de tabelas, índices e outros objetos do banco, que devem ser manuseados via DDL, função básica em qualquer ferramenta visual de desenvolvimento.&lt;br /&gt;- Ausência de versão para Linux&lt;br /&gt;- Falta de recursos mais avançados, restritos à versão entreprise.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Resultado geral: &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;É uma ferramenta boa para os usuários da plataforma Windows que utilizem muito código Pl/ PgSQL. As futuras versões podem trazer avanços mais significativos. Só deve ser utilizada após testes criteriosos. A versão entreprise não foi avaliada neste post.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-4146466099401723566?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/4146466099401723566/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=4146466099401723566' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4146466099401723566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4146466099401723566'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/03/dreamcoder-for-postgresql-ferramenta.html' title='DreamCoder for PostgreSQL: Ferramenta Visual'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r2Eq58DmzTc/S4wC5SqLtTI/AAAAAAAAALU/5467-mYMo9c/s72-c/visao+geral+da+ferramenta.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-2060078548179400823</id><published>2010-03-01T07:38:00.007-03:00</published><updated>2010-03-01T13:57:17.082-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Versão Alfa do PostgreSQL 9.0 Lançada!</title><content type='html'>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="http://www.postgresql.org/developer/alpha"&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="http://developer.postgresql.org/pgdocs/postgres/release-9-0.html"&gt;aqui&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-2060078548179400823?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/2060078548179400823/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=2060078548179400823' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2060078548179400823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2060078548179400823'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/03/versao-alfa-do-postgresql-lancada.html' title='Versão Alfa do PostgreSQL 9.0 Lançada!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-7565748323186331194</id><published>2010-02-19T08:53:00.006-03:00</published><updated>2010-10-04T15:57:33.558-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Select - Cláusulas FOR UPDATE, FOR SHARE e NOWAIT</title><content type='html'>Influenciar nos mecanismos de bloqueio 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;A existência de bloqueios sobre os dados acessados durante o acesso concorrente não pode ser ignorada em  sistemas com grande número de transações concorrentes mesmo no Postgres que utiliza o protocolo de bloqueios multiversão (MVCC - &lt;i&gt;&lt;span id="main" style="visibility: visible;"&gt;&lt;span id="search" style="visibility: visible;"&gt;MultiVersion Concurrency Control&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;).&amp;nbsp; &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 o transcorrer da transação. Desta forma se garante que o que está sendo visualizado corresponde ao que está armazenado no banco de dados.&lt;br /&gt;&lt;br /&gt;Por sua vez, a cláusula FOR SHARE efetua bloqueio de escrita, mas permite que leituras sejam feitas aos dados consultados.&lt;br /&gt;&lt;br /&gt;Em resumo, a cláusula FOR UPDATE restringe os acessos aos dados consultados, enquanto que a FOR SHARE explicitamente autoriza acessos de leitura aos dados consultados. O tipo de transação é que determina se e quando utilizar estas cláusulas.&lt;br /&gt;&lt;br /&gt;É importante salientar que ambas as cláusulas se referem &lt;u&gt;apenas os dados que são recuperados na consulta&lt;/u&gt;. &lt;br /&gt;&lt;br /&gt;Adicionalmente, 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 para 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="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-7565748323186331194?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/7565748323186331194/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=7565748323186331194' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7565748323186331194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7565748323186331194'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/02/select-clausulas-for-update-for-share-e.html' title='Select - Cláusulas FOR UPDATE, FOR SHARE e NOWAIT'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-747592200994127647</id><published>2010-01-27T15:43:00.005-03:00</published><updated>2010-01-27T15:51:44.094-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Algoritmo'/><title type='text'>Algoritmos: Caixa de Banco Simulado no PostgreSQL</title><content type='html'>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 style="font-weight: bold;"&gt;--Retornando notas do caixa eletrônico&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;--Notas de 1, 5, 10, 50 e 100&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CREATE OR REPLACE FUNCTION caixa_elet (pvalor integer) RETURNS text AS $$&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DECLARE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;sretorno text;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;qnota1 integer;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;qnota5 integer;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;qnota10 integer;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;qnota50 integer;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;qnota100 integer;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;sretorno := '';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;qnota100 := (pvalor - (pvalor % 100))/100;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;qnota50 := ((pvalor % 100) - (pvalor % 50)) /50;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;qnota10 := ((pvalor % 50) - (pvalor % 10)) /10;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;qnota5 := ((pvalor % 10) - (pvalor % 5)) /5;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;qnota1 := ((pvalor % 5) - (pvalor % 1)) /1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&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 style="font-weight: bold;"&gt;RETURN sretorno; -- Retorna as linhas&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;END;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&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 style="font-weight: bold;"&gt;SELECT caixa_elet(1078);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;"Total: 1078&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Notas de 100:10&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Notas de 50:1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Notas de 10:2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Notas de 5:1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Notas de 1:3"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SELECT caixa_elet(2189);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;"Total: 2189&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Notas de 100:21&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Notas de 50:1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Notas de 10:3&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Notas de 5:1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Notas de 1:4"&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="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-747592200994127647?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/747592200994127647/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=747592200994127647' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/747592200994127647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/747592200994127647'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/01/algoritmos-caixa-de-banco-simulado-no.html' title='Algoritmos: Caixa de Banco Simulado no PostgreSQL'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-4149995007218900666</id><published>2010-01-21T13:37:00.003-03:00</published><updated>2010-01-21T13:43:43.477-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>8.5 sai de cena antes de ser lançado: nova versão do Postgres será a 9.0!</title><content type='html'>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="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-4149995007218900666?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/4149995007218900666/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=4149995007218900666' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4149995007218900666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4149995007218900666'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/01/85-sai-de-cena-antes-de-ser-lancado.html' title='8.5 sai de cena antes de ser lançado: nova versão do Postgres será a 9.0!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-3396715546791699558</id><published>2010-01-05T11:10:00.002-03:00</published><updated>2010-01-05T11:15:27.817-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>PostgreSQL e JDBC: Ótimo exemplo de código!</title><content type='html'>A utilização de linguagem java nas aplicações com PostgreSQL depende de um middleware para o acesso aos dados. O JDBC oferece conexões com segurança e confiabilidade. Mas como implementar estes acessos?&lt;br /&gt;&lt;br /&gt;O link abaixo apresenta um ótimo exemplo introdutório de código java para acesso ao Postgres via JDBC. Confira &lt;a href="http://www.fankhausers.com/postgresql/jdbc/"&gt;aqui&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-3396715546791699558?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/3396715546791699558/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=3396715546791699558' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3396715546791699558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3396715546791699558'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2010/01/postgresql-e-jdbc-otimo-exemplo-de.html' title='PostgreSQL e JDBC: Ótimo exemplo de código!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-711107884524485564</id><published>2009-12-18T15:28:00.007-03:00</published><updated>2009-12-18T16:27:27.275-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Onde esse elefante está? O que nos diz o google insights sobre o ano de 2009?</title><content type='html'>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="http://www.google.com/insights/search/#q=postgresql&amp;amp;date=today%2012-m&amp;amp;cmpt=q"&gt;google insights&lt;/a&gt; e os resultados compartilho neste post. O levantamento do ano passado está &lt;a href="http://postgresqlbr.blogspot.com/2008/11/postgresql-tendncias-pelo-mundo-e-no.html"&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 onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r2Eq58DmzTc/SyvSPBW7ZNI/AAAAAAAAAKs/41jt0LQLDHo/s1600-h/postgresql+2009+buscas.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 81px;" src="http://1.bp.blogspot.com/_r2Eq58DmzTc/SyvSPBW7ZNI/AAAAAAAAAKs/41jt0LQLDHo/s320/postgresql+2009+buscas.png" alt="" id="BLOGGER_PHOTO_ID_5416654132347626706" border="0" /&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 onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r2Eq58DmzTc/SyvSOrLC0vI/AAAAAAAAAKc/TJ6rAiHfmMA/s1600-h/postgres+busca+4+anos+2009.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 148px;" src="http://2.bp.blogspot.com/_r2Eq58DmzTc/SyvSOrLC0vI/AAAAAAAAAKc/TJ6rAiHfmMA/s320/postgres+busca+4+anos+2009.png" alt="" id="BLOGGER_PHOTO_ID_5416654126392201970" border="0" /&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 onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r2Eq58DmzTc/SyvXTJ0pa5I/AAAAAAAAAK8/fVN1nrbuH58/s1600-h/postgresql+busca+mundo+2009.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 199px;" src="http://3.bp.blogspot.com/_r2Eq58DmzTc/SyvXTJ0pa5I/AAAAAAAAAK8/fVN1nrbuH58/s320/postgresql+busca+mundo+2009.png" alt="" id="BLOGGER_PHOTO_ID_5416659700897377170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;- No mundo ganha destaque a busca "PostgreSQL MySQL", 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 "PostgreSQL Windows" e  "PostgreSQL Linux". 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 onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r2Eq58DmzTc/SyvSPbPD91I/AAAAAAAAAK0/C37MfF2zwqk/s1600-h/2009+buscas+Brasil+postgres.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 254px;" src="http://2.bp.blogspot.com/_r2Eq58DmzTc/SyvSPbPD91I/AAAAAAAAAK0/C37MfF2zwqk/s320/2009+buscas+Brasil+postgres.png" alt="" id="BLOGGER_PHOTO_ID_5416654139293955922" border="0" /&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="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-711107884524485564?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/711107884524485564/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=711107884524485564' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/711107884524485564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/711107884524485564'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/12/onde-esse-elefante-esta-o-que-nos-diz-o.html' title='Onde esse elefante está? O que nos diz o google insights sobre o ano de 2009?'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_r2Eq58DmzTc/SyvSPBW7ZNI/AAAAAAAAAKs/41jt0LQLDHo/s72-c/postgresql+2009+buscas.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-7256794289707503902</id><published>2009-12-17T14:36:00.003-03:00</published><updated>2009-12-17T15:11:36.662-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Ferramentas'/><title type='text'>GreenSQL: O Rinoceronte Amigo do Elefante!</title><content type='html'>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="http://www.greensql.net/"&gt;GreenSQL&lt;/a&gt; é um firewall de código aberto que visa proteger bases de dados de ataques tipo "SQL Injection", 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 onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r2Eq58DmzTc/SypvsjrL7pI/AAAAAAAAAKM/Ox1lkJXUDmw/s1600-h/logogreensql.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 100px; height: 65px;" src="http://2.bp.blogspot.com/_r2Eq58DmzTc/SypvsjrL7pI/AAAAAAAAAKM/Ox1lkJXUDmw/s320/logogreensql.gif" alt="" id="BLOGGER_PHOTO_ID_5416264313147747986" border="0" /&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 onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r2Eq58DmzTc/SypvsuP7S6I/AAAAAAAAAKU/zJlOjKGvKBs/s1600-h/greensql-architecture.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 86px;" src="http://2.bp.blogspot.com/_r2Eq58DmzTc/SypvsuP7S6I/AAAAAAAAAKU/zJlOjKGvKBs/s320/greensql-architecture.jpg" alt="" id="BLOGGER_PHOTO_ID_5416264315986201506" border="0" /&gt;&lt;/a&gt;A licença é GPL. Teste e me diga o que achou!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-7256794289707503902?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/7256794289707503902/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=7256794289707503902' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7256794289707503902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7256794289707503902'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/12/greensql-o-rinoceronte-amigo-do.html' title='GreenSQL: O Rinoceronte Amigo do Elefante!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r2Eq58DmzTc/SypvsjrL7pI/AAAAAAAAAKM/Ox1lkJXUDmw/s72-c/logogreensql.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-6518681864817607221</id><published>2009-12-10T09:42:00.004-03:00</published><updated>2009-12-10T09:50:55.024-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Enquete aponta que PostgreSQL Crescerá com a Compra do MySQL</title><content type='html'>A &lt;a href="http://postgresqlbr.blogspot.com/2009/04/oracle-comprou-sun-e-consequentemente-o.html"&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 "The 451 Group", 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="http://planetmariadb.org/"&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="http://blogs.the451group.com/opensource/2009/12/04/451-group-survey-highlights-user-concerns-over-oracles-proposed-ownership-of-mysql/"&gt;aqui&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-6518681864817607221?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/6518681864817607221/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=6518681864817607221' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6518681864817607221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6518681864817607221'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/12/enquete-aponta-que-postgresql-crescera.html' title='Enquete aponta que PostgreSQL Crescerá com a Compra do MySQL'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-4126903476543280188</id><published>2009-11-27T08:37:00.005-03:00</published><updated>2009-11-27T08:52:51.458-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>O Comando Table</title><content type='html'>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 &lt;tabela&gt;tabela;&lt;br /&gt;&lt;br /&gt;Poderiam ser simplificadas para:&lt;br /&gt;&lt;br /&gt;TABLE &lt;tabela&gt;&lt;/tabela&gt;&lt;/tabela&gt;tabela&lt;tabela&gt;&lt;tabela&gt;;&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 "SELECT * FROM" 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;/tabela&gt;&lt;/tabela&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-4126903476543280188?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/4126903476543280188/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=4126903476543280188' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4126903476543280188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4126903476543280188'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/11/o-comando-table.html' title='O Comando Table'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-7569486996326886470</id><published>2009-11-26T14:18:00.001-03:00</published><updated>2009-11-26T14:20:41.973-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>Tutorial de PostgreSQL e Hibernate</title><content type='html'>Bom tutorial introdutório de PostgreSQL com Hibernate &lt;a href="http://www.laliluna.de/download/first-hibernate-example-tutorial-en.pdf"&gt;aqui&lt;/a&gt;.&lt;br /&gt;O autor autoriza o uso mas não a redistribuição!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-7569486996326886470?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/7569486996326886470/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=7569486996326886470' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7569486996326886470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7569486996326886470'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/11/tutorial-de-postgresql-e-hibernate.html' title='Tutorial de PostgreSQL e Hibernate'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-315256147456159659</id><published>2009-11-03T07:45:00.002-03:00</published><updated>2009-11-03T08:01:31.649-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><title type='text'>PostgreSQL 8.5 - Versão Alfa</title><content type='html'>Como desenvolver uma ferramenta altamente poderosa? Certamente um dos passos é a atualização e renovação constante. No caso do PostgreSQL, antes que uma versão seja lançada, existe um planejamento das futuras implementações. Desta forma, sempre existe um horizonte de crescimento.&lt;br /&gt;&lt;br /&gt;A versão 8.4 está sendo atalizada com correções e ajustes nas fuincionalidades, mas em paralelo, a nova versão 8.5 está em desenvolvimento, estando em sua versão alfa. O site para download se encontra &lt;a href="http://www.postgresql.org/developer/alpha"&gt;aqui&lt;/a&gt;. A versão alpa 2 está disponível para download e são disponibilizadas informações sobre as novas funcionalidades para a versão 8.5!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-315256147456159659?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/315256147456159659/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=315256147456159659' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/315256147456159659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/315256147456159659'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/11/postgresql-85-versao-alfa.html' title='PostgreSQL 8.5 - Versão Alfa'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-8981227237054252370</id><published>2009-09-24T13:47:00.004-03:00</published><updated>2009-09-24T14:22:29.275-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Monitoração de Comandos com PG_STAT_STATEMENTS</title><content type='html'>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 style="font-weight: bold;"&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 style="font-weight: bold;"&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 style="font-weight: bold;"&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 style="font-weight: bold;"&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 style="font-weight: bold;"&gt;1 – Limpando dados coletados &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;select pg_stat_statements_reset();&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-8981227237054252370?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/8981227237054252370/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=8981227237054252370' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8981227237054252370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8981227237054252370'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/09/monitoracao-de-comandos-com.html' title='Monitoração de Comandos com PG_STAT_STATEMENTS'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-3735880111929007415</id><published>2009-08-24T08:55:00.005-03:00</published><updated>2009-08-24T09:24:28.735-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Outro'/><title type='text'>Participe de Concurso "O Elefante está entre nós" e Concorra a 50 Prêmios!!!</title><content type='html'>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="http://pgcon.postgresql.org.br/2009/index.php"&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="http://www.midstorm.org/%7Etelles/2009/08/22/concurso-o-elefante-esta-entre-nos/"&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="http://pgcon.postgresql.org.br/2009/concurso.php"&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 "importante é competir".  &lt;a href="http://www.midstorm.org/%7Etelles/2009/08/22/concurso-o-elefante-esta-entre-nos/"&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;img src="http://www.blogger.com/img/blank.gif" alt="Link" class="gl_link" border="0" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-3735880111929007415?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/3735880111929007415/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=3735880111929007415' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3735880111929007415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3735880111929007415'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/08/participe-de-concurso-o-elefente-esta.html' title='Participe de Concurso &quot;O Elefante está entre nós&quot; e Concorra a 50 Prêmios!!!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-7213180142574649851</id><published>2009-07-29T10:45:00.002-03:00</published><updated>2009-07-29T10:51:18.615-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Outro'/><title type='text'>151 posts!</title><content type='html'>Em abril de 2007 este blog surgiu e hoje, pouco mais de 2 anos depois, atingiu a marca de 150 posts.&lt;br /&gt;&lt;br /&gt;É muito pouco em comparação com blogs de entretenimento e variedades, mas é muito em relação a blogs de tecnologia, especialmente se a área é banco de dados, e especificamente o banco de dados PostgreSQL. A longevidade do blog também merece destaque, pois muitos outros bons sites deixaram de existir no período, congelaram no tempo, ou mudaram de rumo, abordando outros assuntos.&lt;br /&gt;&lt;br /&gt;A dinâmica de inovação constante e os movimentos da comunidade ajudaram a atingir esta conquista.&lt;br /&gt;&lt;br /&gt;Deus ajudou dando saúde e disposição! E você, leitor, ajudou de muitas formas, &lt;span style="font-weight: bold;"&gt;obrigado&lt;/span&gt;!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-7213180142574649851?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/7213180142574649851/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=7213180142574649851' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7213180142574649851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7213180142574649851'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/07/151-posts.html' title='151 posts!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-8179270431637399242</id><published>2009-07-29T08:45:00.004-03:00</published><updated>2009-07-29T09:05:26.201-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Psql 8.4: Novas Funcionalidades!</title><content type='html'>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="http://www.postgresql.org/about/press/features84.html"&gt;aqui&lt;/a&gt;. Abaixo, comento algumas das mudanças que reputo como mais significativas:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&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 style="font-weight: bold;"&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;nomefunc&gt;&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="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-8179270431637399242?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/8179270431637399242/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=8179270431637399242' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8179270431637399242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8179270431637399242'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/07/psql-84-novas-funcionalidades.html' title='Psql 8.4: Novas Funcionalidades!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-2247440170118129846</id><published>2009-07-29T07:55:00.002-03:00</published><updated>2009-07-29T07:59:43.894-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Outro'/><title type='text'>PostgreSQL 8.4 - Silêncio no Planeta Postgresql!</title><content type='html'>Achei interessante o silêncio sobre a nova versão do PostgreSQL na comunidade. O site do &lt;a href="http://planeta.postgresql.org.br/"&gt;Planeta PostgreSQL BR&lt;/a&gt; não teve nenhum post novo desde 08/07/2009. &lt;br /&gt;&lt;br /&gt;21 dias sem posts? Ou todos estão muito ocupados ou faltam novidades significativas. Espero que seja a primeira opção, pois foi o que aconteceu comigo!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-2247440170118129846?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/2247440170118129846/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=2247440170118129846' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2247440170118129846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2247440170118129846'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/07/postgresql-84-silencio-no-planeta.html' title='PostgreSQL 8.4 - Silêncio no Planeta Postgresql!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-7627735809955316245</id><published>2009-07-08T09:30:00.005-03:00</published><updated>2009-08-13T09:46:38.967-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>PostgreSQL 8.4: Falta um bom instalador para Windows!</title><content type='html'>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="http://www.postgresql.org/download/"&gt;aqui&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Espera-se que sujam mais opções de instaladores além do limitado "One-Click Installer" da página oficial do PostgreSQL. &lt;span style="font-weight: bold;"&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 style="font-weight: bold; font-style: italic;"&gt;Complemento 13/08/2009:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&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="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-7627735809955316245?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/7627735809955316245/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=7627735809955316245' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7627735809955316245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7627735809955316245'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/07/postgresql-84-falta-um-bom-instalador.html' title='PostgreSQL 8.4: Falta um bom instalador para Windows!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-836973641950793156</id><published>2009-07-01T15:50:00.002-03:00</published><updated>2009-07-01T15:55:41.619-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>PostgreSQL 8.4 Enfim Liberado!</title><content type='html'>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="http://www.postgresql.org/download/" target="_blank"&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="http://www.postgresql.org/docs/8.4/static/release-8-4.html" target="_blank"&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="http://www.postgresql.org/about/press/features84.html" target="_blank"&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="http://www.postgresql.org/about/press/presskit84.html" target="_blank"&gt;http://www.postgresql.org/about/press/presskit84.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-836973641950793156?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/836973641950793156/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=836973641950793156' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/836973641950793156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/836973641950793156'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/07/postgresql-84-enfim-liberado.html' title='PostgreSQL 8.4 Enfim Liberado!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-6116076966917001514</id><published>2009-06-16T13:11:00.003-03:00</published><updated>2009-06-16T13:17:10.814-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>PostgreSQL 8.4: Release Candidate Liberada!</title><content type='html'>Depois do teste de softwares em versões beta, a versão &lt;span style="font-style: italic;"&gt;Release Candidate&lt;/span&gt; é a mais próxima da versão oficial.  A poucos minutos a versão RC do PostgreSQL 8.4 foi liberada para download &lt;a href="http://www.postgresql.org/developer/beta"&gt;aqui&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Lembro que esta não é uma versão definitiva e não deve ser utilizada em sistemas de produção, mas pode ser utilizada, por exemplo, para o desenvolvimento de produtos enquanto a oficial não chega de fato. Teste e compartilhe suas primeiras impressões!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-6116076966917001514?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/6116076966917001514/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=6116076966917001514' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6116076966917001514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6116076966917001514'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/06/postgresql-84-release-candidate.html' title='PostgreSQL 8.4: Release Candidate Liberada!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-1986173837953836590</id><published>2009-06-15T07:45:00.004-03:00</published><updated>2009-06-15T07:49:41.673-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Outro'/><title type='text'>Enquete: Que Prioridades o Desenvolvimento do Postgres deve Assumir?</title><content type='html'>Que Prioridades o Desenvolvimento do Postgres deve Assumir? Você já pensou nisso?&lt;br /&gt;&lt;br /&gt;Essa enquete (&lt;span style="font-style: italic;"&gt;What's your highest priority for PostgreSQL development?&lt;/span&gt;) está disponível no site da comunidade internacional do PostgreSQL. Se você tem alguma prioridade que não está na lista, podes coloca-l a como comentário.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.postgresql.org/community/"&gt;Fazer acesso à enquete&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-1986173837953836590?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/1986173837953836590/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=1986173837953836590' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/1986173837953836590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/1986173837953836590'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/06/enquete-que-prioridades-o.html' title='Enquete: Que Prioridades o Desenvolvimento do Postgres deve Assumir?'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-7569600919079648082</id><published>2009-06-10T12:46:00.006-03:00</published><updated>2009-06-12T10:16:04.055-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Números Aleatórios com o PostgreSQL: A Função RANDOM()</title><content type='html'>Gerar números aleatórios é uma necessidade importante para a geração de grandes bases de dados de teste. Para maior veracidade nos testes, uma certa aleatoriedade é esperada deste tipo de base de dados. Aí entram em cena as rotinas de geração de números aleatórios.&lt;br /&gt;&lt;br /&gt;A função RANDOM() é o método nativo do PostgreSQL para a geração de seqüências de números aleatórios. Neste post vamos apresentar exemplos práticos do uso desta função que podem ser úteis no cotidiano.&lt;br /&gt;&lt;br /&gt;Ao se executar a função RANDOM(), é retornado um número aleatório entre zero e 1 com muitas casas decimais. Dependendo da necessidade, pode-se gerar um número positivo, um valor dentro de um determinado determinado intervalo. Valores e intervalos podem assumir valores nulos e negativos com pequenas variações de sintaxe.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Sintaxe&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1 - A sintaxe básica.&lt;br /&gt;&lt;br /&gt;SELECT random();&lt;br /&gt;&lt;br /&gt;Retorna: 0.896639783866704, 0.516120770014822...&lt;br /&gt;&lt;br /&gt;2 - Busca de números com um valor dentro de um intervalo começado com zero é um pouco mais complicada. O exemplo abaixo retorna um valor entre 0 e 99. Para aumentar ou diminuir o intervalo, trocar o número 100 por outro valor. Ajustar as casas decimais do comando CAST se desejar valores fracionários. A função ROUND() elimina decimais indesejadas.&lt;br /&gt;&lt;br /&gt;SELECT round(CAST (random()*100 AS NUMERIC),0);&lt;br /&gt;&lt;br /&gt;3 - Busca de números com um valor dentro de um intervalo qualquer demanda atenção. O exemplo abaixo retorna um valor entre 27 e 90. Para aumentar ou diminuir o intervalo, trocar os números 27 e 91 por outros valores. Ajustar as casas decimais do comando CAST se desejar valores fracionários.&lt;br /&gt;&lt;br /&gt;SELECT 27 + round(CAST (random()*(91-27) AS NUMERIC),0);&lt;br /&gt;&lt;br /&gt;4 - Busca de números com um valor dentro de um intervalo começado com valor negativo. Bastante similar ao exemplo anterior.&lt;br /&gt;&lt;br /&gt;SELECT -57 + round(CAST (random()*(91+57) AS NUMERIC),0);&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-7569600919079648082?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/7569600919079648082/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=7569600919079648082' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7569600919079648082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7569600919079648082'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/06/numeros-aleatorios-com-o-postgresql.html' title='Números Aleatórios com o PostgreSQL: A Função RANDOM()'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-9116251167714567909</id><published>2009-06-03T13:11:00.004-03:00</published><updated>2009-06-03T13:28:14.359-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='PGSQL'/><title type='text'>Geração de CPFs Fictícios com Pl/ PgSQL</title><content type='html'>A geração de massas de dados para teste é um processo muito importante, para verificar o comportamento de um banco de dados em relação à carga de processamento que o mesmo tem de desempenhar. A geração de CPFs fictícios é uma atividade relativamente comum em empresas brasileiras que armazenam este tipo de identificador. No entanto muitas vezes os testes são feitos com valores incorretos, isto é, que não respeitam as regras para os dois dígitos verificadores.&lt;br /&gt;&lt;br /&gt;Abaixo está um código que se propõe a retornar CPFs aleatórios com dígitos verificadores corretos, implementado em Pl/ PgSQL.&lt;br /&gt;&lt;br /&gt;Os comandos mais importantes deste código são:&lt;br /&gt;- Random() - Geração de números aleatórios&lt;br /&gt;- substring() - Extração de parte de uma string com base nso parâmetros fornecidos&lt;br /&gt;- CAST () - Conversão de tipos no PostgreSQL&lt;br /&gt;- trim() - Eliminação de espaços em branco de strings&lt;br /&gt;&lt;br /&gt;Os testes foram muito positivos. Coloco para você, leitor, as seguintes perguntas:&lt;br /&gt;- Este código segue um algoritmo correto?&lt;br /&gt;- Ele pode ser melhorado? De que forma?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CREATE OR REPLACE FUNCTION gerar_CPF() RETURNS varchar AS $$&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- ROTINA DE GERAÇÃO DE CPF SEM LOOP&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- Retorna string com CPF aletório correto.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DECLARE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;vet_cpf integer [11]; --Recebe o CPF &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;soma integer; -- Soma utilizada para o cálculo do DV&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;rest integer; -- Resto da divisão&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- Atribuição dos valores do Vetor&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;vet_cpf[0] := cast(substring (CAST (random() AS VARCHAR), 3,1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;vet_cpf[1] := cast(substring (CAST (random() AS VARCHAR), 3,1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;vet_cpf[2] := cast(substring (CAST (random() AS VARCHAR), 3,1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;vet_cpf[3] := cast(substring (CAST (random() AS VARCHAR), 3,1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;vet_cpf[4] := cast(substring (CAST (random() AS VARCHAR), 3,1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;vet_cpf[5] := cast(substring (CAST (random() AS VARCHAR), 3,1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;vet_cpf[6] := cast(substring (CAST (random() AS VARCHAR), 3,1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;vet_cpf[7] := cast(substring (CAST (random() AS VARCHAR), 3,1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;vet_cpf[8] := cast(substring (CAST (random() AS VARCHAR), 3,1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- CÁLCULO DO PRIMEIRO NÚMERO DO DV&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- Soma dos nove primeiros multiplicados por 10, 9, 8 e assim por diante...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;soma:=(vet_cpf[0]*10)+(vet_cpf[1]*9)+(vet_cpf[2]*8)+(vet_cpf[3]*7)+(vet_cpf[4]*6)+(vet_cpf[5]*5)+(vet_cpf[6]*4)+(vet_cpf[7]*3)+(vet_cpf[8]*2);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;rest:=soma % 11;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;if (rest = 0) or (rest = 1) THEN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;vet_cpf[9]:=0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ELSE vet_cpf[9]:=(11-rest); END IF;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- CÁLCULO DO SEGUNDO NÚMERO DO DV&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- Soma dos nove primeiros multiplicados por 11, 10, 9 e assim por diante...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;soma:= (vet_cpf[0]*11) + (vet_cpf[1]*10) + (vet_cpf[2]*9) + (vet_cpf[3]*8) + (vet_cpf[4]*7) + (vet_cpf[5]*6) + (vet_cpf[6]*5) + (vet_cpf[7]*4) + (vet_cpf[8]*3) + (vet_cpf[9]*2);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;rest:=soma % 11;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;if (rest = 0) or (rest = 1) THEN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    vet_cpf[10] := 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ELSE &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    vet_cpf[10] := (11-rest); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;END IF;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;--Retorno do CPF&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;RETURN trim(trim(to_char(vet_cpf[0],'9')) || trim(to_char(vet_cpf[1],'9')) || trim(to_char(vet_cpf[2],'9')) || trim(to_char(vet_cpf[3],'9')) || trim(to_char(vet_cpf[4],'9')) || trim(to_char(vet_cpf[5],'9')) || trim(to_char(vet_cpf[6],'9')) || trim(to_char(vet_cpf[7],'9'))|| trim(to_char(vet_cpf[8],'9')) || trim(to_char(vet_cpf[9],'9')) || trim(to_char(vet_cpf[10],'9')));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;END;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$$ LANGUAGE PLPGSQL;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Chamada da função, retornando um CPF aleatório.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;select gerar_CPF() ;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A função para fazer o teste está &lt;a href="http://postgresqlbr.blogspot.com/2008/07/validao-de-cpf-algoritmo-sem-loops.html"&gt;neste post&lt;/a&gt;. O resultado para um CPF correto é 1.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;select CPF_Validar_Sem_Loop(gerar_CPF());&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;select CPF_Validar_Sem_Loop('66067526557'); --Gerado pelo programa&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-9116251167714567909?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/9116251167714567909/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=9116251167714567909' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/9116251167714567909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/9116251167714567909'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/06/geracao-de-cpfs-ficticios-com-pl-pgsql.html' title='Geração de CPFs Fictícios com Pl/ PgSQL'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-4575503200485572294</id><published>2009-05-13T08:37:00.004-03:00</published><updated>2009-05-13T08:50:20.352-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>PostgreSQL no IV Festival Software Livre da Bahia</title><content type='html'>Eventos de software livre ganham maior relevância, à medida em que se consolidam. O III ENSL - Encontro Nordestino de Software Livre e o IV Festival Software Livre da Bahia, que antes eram iniciativas distintas, se fundiram em um único evento que será realizado nos dias &lt;strong style="font-weight: normal;"&gt;29 e 30 de maio de 2009, no campus da Universidade Estadual da Bahia (UNEB), em Salvador&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;A programação é vasta e eclética e abrange cinco grandes áreas: Cultura Digital Livre; Casos de Sucesso; Ferramentas e Soluções; Desenvolvimento de Software e Educação e Inclusão Digital.&lt;br /&gt;&lt;br /&gt;O PostgreSQL será discutido na palestra "&lt;span style="font-style: italic;"&gt;Tuning&lt;/span&gt; de Banco de Dados Livre: O Caso do PostgreSQL", ministrada por mim.&lt;br /&gt;&lt;br /&gt;A programação detalhada e as inscrições estão disponíveis até &lt;span style="font-weight: bold;"&gt;24/05&lt;/span&gt; no &lt;a href="http://wiki.softwarelivre.org/Festival4"&gt;site do evento&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-4575503200485572294?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/4575503200485572294/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=4575503200485572294' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4575503200485572294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4575503200485572294'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/05/postgresql-no-iv-festival-software.html' title='PostgreSQL no IV Festival Software Livre da Bahia'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-4291968700581406469</id><published>2009-04-28T16:55:00.007-03:00</published><updated>2009-05-13T11:49:07.748-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Outro'/><title type='text'>A Oracle comprou a SUN e conseqüentemente o Java e o MySQL. E como fica o PostgreSQL?</title><content type='html'>A Oracle comprou a SUN e conseqüentemente o Java e o MySQL. Mais informações podem ser obtidas &lt;a href="http://www.terra.com.br/istoedinheiro/edicoes/603/oracle-mais-livre-do-que-nuncacom-a-compra-da-sun-132391-1.htm"&gt;aqui&lt;/a&gt;. Que impactos esta aquisição causará sobre o PostgreSQL?&lt;br /&gt;&lt;br /&gt;Ainda é muito cedo para ter certezas sobre este tema, mas ele certamente é bastante crítico para a área de banco de dados. A Oracle adquiriu nos últimos anos uma série de empresas e seus softwares de banco, dentre elas o Berkeley DB, que passaram a  figurar entre as soluções desta empresa. As novas aquisições continuarão a ser livres e a serem aprimoradas? O suporte do java ao PostgreSQL estará ameaçado? O espaço para o PostgreSQL diminuirá ou será ampliado? Estas e outras questões permanecem em aberto.&lt;br /&gt;&lt;br /&gt;Baseado nestas dúvidas tive a idéia de criar um tópico aberto. Peço que coloquem opiniões e links para reportagens sobre o impacto desta aquisição para a comunidade de banco de dados e particularmente para os usuários do PostgreSQL.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Atualização (13/05/2009): anexo link para &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://www.midstorm.org/%7Efike/weblog/2009/04/21/oracle-compra-sun-tentando-entender/"&gt;posts sobre o assunto&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; no site do Fernando Ike e do &lt;a href="http://www.midstorm.org/%7Etelles/2009/04/21/oracle-compra-sun-e-nao-e-1%C2%BA-de-abril/"&gt;Telles&lt;/a&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-4291968700581406469?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/4291968700581406469/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=4291968700581406469' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4291968700581406469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4291968700581406469'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/04/oracle-comprou-sun-e-consequentemente-o.html' title='A Oracle comprou a SUN e conseqüentemente o Java e o MySQL. E como fica o PostgreSQL?'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-8002875349955415496</id><published>2009-04-16T08:40:00.002-03:00</published><updated>2009-04-16T08:46:08.472-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Versão 8.4: primeira release beta disponível!</title><content type='html'>O grupo de desenvolvimento do PostgreSQL anunciou que a primeira versão 8.4 BETA está disponível para &lt;span style="font-style: italic;"&gt;download&lt;/span&gt;.  A colaboração da comunidade nos testes é de vital importância para  o diagnóstico e correção de quaisquer problemas na ferramenta. Esta versão não deve ser utilizada para aplicações corporativas, por ser menos estável que as &lt;span style="font-style: italic;"&gt;releases&lt;/span&gt; padrão.&lt;br /&gt;&lt;br /&gt;Testemos, critiquemos e participemos!!!&lt;br /&gt;&lt;br /&gt;Mais informações em: &lt;a href="http://www.postgresql.org/developer/beta"&gt;http://www.postgresql.org/developer/beta&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Em breve apresentaremos um detalhamento das novas funcionalidades da versão 8.4 neste espaço.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-8002875349955415496?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/8002875349955415496/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=8002875349955415496' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8002875349955415496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8002875349955415496'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/04/versao-84-primeira-release-beta.html' title='Versão 8.4: primeira release beta disponível!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-7057209112487205701</id><published>2009-04-08T15:00:00.004-03:00</published><updated>2009-04-08T15:07:38.106-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Outro'/><title type='text'>Fique Atualizado em PostgreSQL com o Addict-o-matic!!!</title><content type='html'>Ficar atualizado em tecnologias de hardware e software não é das tarefas mais fáceis. O site &lt;span style="font-weight: bold;"&gt;Addict-o-matic&lt;/span&gt; faz a coleta de uma série de notícias, posts em blogs, vídeos e imagens em uma série de fontes na rede. O resultado de uma pesquisa sobre o PostgreSQL não decepcionou.&lt;br /&gt;&lt;br /&gt;Clique &lt;a href="http://addictomatic.com/topic/postgreSQL"&gt;aqui&lt;/a&gt; para experimentar! Podem ser fornecidas várias opções de pesquisa, e o site funciona bem como agregador de informações.&lt;br /&gt;&lt;br /&gt;A dica do site foi do blog da colunista &lt;a href="http://info.abril.com.br/aberto/infonews/tags/sandra_carvalho1.shtml"&gt;Sandra Carvalho&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-7057209112487205701?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/7057209112487205701/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=7057209112487205701' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7057209112487205701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7057209112487205701'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/04/fique-atualizado-em-postgresql-com-o.html' title='Fique Atualizado em PostgreSQL com o Addict-o-matic!!!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-7500448766408196961</id><published>2009-04-03T18:06:00.002-03:00</published><updated>2009-04-03T18:19:10.754-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Algoritmo'/><title type='text'>Ano Bissexto no PostgreSQL!</title><content type='html'>Às vezes o mais difícil de fazer são coisas realmente simples. Os exemplo de código abaixo são implementações de uma rotina que calcula se um ano é bissexto ou não.&lt;br /&gt;&lt;br /&gt;Segundo a &lt;a href="http://pt.wikipedia.org/wiki/Ano_bissexto"&gt;Wikipedia&lt;/a&gt;, as regras do ano bissexto são poucas, mas não são triviais:&lt;br /&gt;* São bissextos todos os anos múltiplos de 400, p.ex: 1600, 2000, 2400, 2800&lt;br /&gt;* Não são bissextos todos os múltiplos de 100 e não de 400, p.ex: 1700, 1800, 1900, 2100, 2200, 2300, 2500...&lt;br /&gt;* São bissextos todos os múltiplos de 4 e não múltiplos de 100, p.ex: 1996, 2004, 2008, 2012, 2016...&lt;br /&gt;* Não são bissextos todos os demais anos.&lt;br /&gt;&lt;br /&gt;Com base no que é apresentado neste post, peço que você que me responda três perguntas:&lt;br /&gt;- Os dois exemplos abaixo estão corretos?&lt;br /&gt;- Qual dos dois apresentaria alguma vantagem em relação ao outro? Ou são ambos equivalentes?&lt;br /&gt;- É possível melhorar as implementações? De que formas?&lt;br /&gt;&lt;br /&gt;As duas funções criadas retornam 1 se ano for bissexto, 0 se não for e 99 se for anterior a 1582, para anos acima de 1582.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Exemplo 1:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE FUNCTION ano_bissexto (pAno integer) RETURNS integer AS $$&lt;br /&gt;DECLARE&lt;br /&gt;    ret integer;&lt;br /&gt;BEGIN&lt;br /&gt;    IF $1&lt;1582 THEN RETURN 99; END IF;&lt;br /&gt;    ret :=0; --Inicialização&lt;br /&gt;    IF ($1%400=0) THEN &lt;br /&gt;        ret:=1; /*Bissexto*/&lt;br /&gt;    ELSE&lt;br /&gt;        IF ($1%4=0) AND ($1%100&lt;&gt;0) THEN &lt;br /&gt;            ret:=1; /*Bissexto*/&lt;br /&gt;        END IF;&lt;br /&gt;    END IF;&lt;br /&gt;    RETURN ret;&lt;br /&gt;END;&lt;br /&gt;$$ LANGUAGE plpgsql;&lt;br /&gt;&lt;br /&gt;SELECT ano_bissexto(1600);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Exemplo 2:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE FUNCTION ano_bissexto_menor (pAno integer) RETURNS integer AS $$&lt;br /&gt;DECLARE&lt;br /&gt;    ret integer;&lt;br /&gt;BEGIN&lt;br /&gt;    IF $1&lt;1582 THEN RETURN 99; END IF;&lt;br /&gt;    ret :=$1; --Inicialização&lt;br /&gt;    IF (ret%100=0) THEN &lt;br /&gt;        ret:=ret/100;&lt;br /&gt;    END IF;&lt;br /&gt;    IF ret%4=0 THEN&lt;br /&gt;        RETURN 1; --Bissexto       &lt;br /&gt;    ELSE&lt;br /&gt;        RETURN 0;    &lt;br /&gt;    END IF;&lt;br /&gt;END;&lt;br /&gt;$$ LANGUAGE plpgsql;&lt;br /&gt;&lt;br /&gt;SELECT ano_bissexto_menor(1600);&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-7500448766408196961?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/7500448766408196961/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=7500448766408196961' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7500448766408196961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7500448766408196961'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/04/ano-bissexto-no-postgresql.html' title='Ano Bissexto no PostgreSQL!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-6464585203806208710</id><published>2009-04-02T16:30:00.006-03:00</published><updated>2009-04-02T16:42:06.242-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Outro'/><title type='text'>Enquete Encerrada: PostgreSQL é um Ótimo Nome para Banco de Dados!</title><content type='html'>A enquete que perguntava a respeito do nome do PostgreSQL foi encerrada, e foi considerado que o nome tradicional deve ser mantido por uma maioria esmagadora. Os nomes alternativos sugeridos não tiveram aceitação e a opção de outros nomes não foi acolhida. Abaixo, os dados:&lt;br /&gt;&lt;br /&gt;&lt;table style="font-family: arial; text-align: left; margin-left: auto; margin-right: auto;" border="0" cellspacing="0" cols="3" frame="void" rules="none"&gt;  &lt;colgroup&gt;&lt;col width="86"&gt;&lt;col width="86"&gt;&lt;col width="86"&gt;&lt;/colgroup&gt;  &lt;tbody&gt;   &lt;tr&gt;    &lt;td align="left" height="17" width="86"&gt;&lt;b&gt;Opção&lt;/b&gt;&lt;/td&gt;    &lt;td align="left" width="86"&gt;&lt;b&gt;Votos&lt;/b&gt;&lt;/td&gt;    &lt;td align="left" width="86"&gt;&lt;b&gt;Percentual&lt;/b&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td align="left" height="32"&gt;Deve ser mantido.&lt;/td&gt;    &lt;td sdval="152" sdnum="1046;" align="right"&gt;152&lt;/td&gt;    &lt;td sdval="69,7247706422018" sdnum="1046;" align="right"&gt;69,72&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td align="left" height="32"&gt;Que tal PgDB?&lt;/td&gt;    &lt;td sdval="15" sdnum="1046;" align="right"&gt;15&lt;/td&gt;    &lt;td sdval="6,88073394495413" sdnum="1046;" align="right"&gt;6,88&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td align="left" height="32"&gt;Postgree seria melhor&lt;/td&gt;    &lt;td sdval="35" sdnum="1046;" align="right"&gt;35&lt;/td&gt;    &lt;td sdval="16,0550458715596" sdnum="1046;" align="right"&gt;16,06&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td align="left" height="17"&gt;Outro&lt;/td&gt;    &lt;td sdval="9" sdnum="1046;" align="right"&gt;9&lt;/td&gt;    &lt;td sdval="4,12844036697248" sdnum="1046;" align="right"&gt;4,13&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td align="left" height="17"&gt;Não sei.&lt;/td&gt;    &lt;td sdval="7" sdnum="1046;" align="right"&gt;7&lt;/td&gt;    &lt;td sdval="3,21100917431193" sdnum="1046;" align="right"&gt;3,21&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td align="left" height="17"&gt;&lt;b&gt;Totais&lt;/b&gt;&lt;/td&gt;    &lt;td sdval="218" sdnum="1046;" align="right"&gt;218&lt;/td&gt;    &lt;td sdval="100" sdnum="1046;" align="right"&gt;100&lt;/td&gt;   &lt;/tr&gt;  &lt;/tbody&gt; &lt;/table&gt;&lt;br /&gt;&lt;p class="western" style="margin-bottom: 0cm;"&gt;Concorda com o resultado? Discorda? Deixe seu comentário!&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r2Eq58DmzTc/SdUTtx6EmzI/AAAAAAAAAKE/YEjCrWiml2Q/s1600-h/enquete.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 212px;" src="http://3.bp.blogspot.com/_r2Eq58DmzTc/SdUTtx6EmzI/AAAAAAAAAKE/YEjCrWiml2Q/s320/enquete.PNG" alt="" id="BLOGGER_PHOTO_ID_5320180212020058930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="western" style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="western" style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-6464585203806208710?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/6464585203806208710/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=6464585203806208710' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6464585203806208710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6464585203806208710'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/04/enquete-encerrada-postgresql-e-um-otimo.html' title='Enquete Encerrada: PostgreSQL é um Ótimo Nome para Banco de Dados!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r2Eq58DmzTc/SdUTtx6EmzI/AAAAAAAAAKE/YEjCrWiml2Q/s72-c/enquete.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-8746180767368739076</id><published>2009-03-27T14:44:00.004-03:00</published><updated>2009-03-27T15:03:06.200-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Log com Arquivos CSV</title><content type='html'>Arquivos texto são muito utilizados em sistemas de informação. No entanto, sua manipulação automática muitas vezes é difícil por serem meios não estruturados de armazenamento de informações. O uso de arquivos CSV (&lt;span style="font-style: italic;"&gt;Comma-Separated-Values&lt;/span&gt; - arquivos com valores separados por vírgula) facilita a utilização de arquivos texto para o armazenamento de dados. Um dos usos de arquivos CSV é no armazenamento do log de bancos de dados PostgreSQL, que passa a ser mais facilmente tratado por meio de planilhas eletrônicas, que apresentam os itens do log de forma tabular.&lt;br /&gt;&lt;br /&gt;A utilização de log em arquivo CSV é muito simples, bastando se alterar o arquivo POSTGRESQL.CONF, alterando o parâmetro &lt;span style="font-weight: bold;"&gt;log_destination&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; e fazer o &lt;span style="font-style: italic;"&gt;reload&lt;/span&gt; da configuração. Comente o valor anterior do parâmetro e coloque esta linha:&lt;br /&gt;&lt;br /&gt;log_destination = 'csvlog'&lt;br /&gt;&lt;br /&gt;A partir deste momento os arquivos de log criados serão do tipo CSV. Abaixo, uma imagem ilustrando como fica armazenado fisicamente o log:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r2Eq58DmzTc/Sc0UUGsWOiI/AAAAAAAAAJ8/LcSEB817x7c/s1600-h/log+csv+postgresql.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 72px;" src="http://2.bp.blogspot.com/_r2Eq58DmzTc/Sc0UUGsWOiI/AAAAAAAAAJ8/LcSEB817x7c/s320/log+csv+postgresql.png" alt="" id="BLOGGER_PHOTO_ID_5317929070620981794" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-8746180767368739076?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/8746180767368739076/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=8746180767368739076' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8746180767368739076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8746180767368739076'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/03/log-com-arquivos-csv.html' title='Log com Arquivos CSV'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r2Eq58DmzTc/Sc0UUGsWOiI/AAAAAAAAAJ8/LcSEB817x7c/s72-c/log+csv+postgresql.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-6206461695124069993</id><published>2009-03-16T07:06:00.002-03:00</published><updated>2009-03-16T07:07:49.912-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Outro'/><title type='text'>Que linguagem você utiliza com o PostgreSQL?</title><content type='html'>Que linguagem você utiliza com o PostgreSQL? Esta é a enquete atual do site do PostgreSQL. Participe!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.postgresql.org/community"&gt;www.postgresql.org/community&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-6206461695124069993?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/6206461695124069993/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=6206461695124069993' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6206461695124069993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6206461695124069993'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/03/que-linguagem-voce-utiliza-com-o.html' title='Que linguagem você utiliza com o PostgreSQL?'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-6056674887972580220</id><published>2009-03-11T12:46:00.003-03:00</published><updated>2009-03-11T13:00:01.363-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><title type='text'>Possíveis Funcionalidades das Versões Futuras do PostgreSQL</title><content type='html'>Pouco se sabe ainda das novas funcionalidades a serem implementadas na versão 8.4 do PostgreSQL. Recentemente, uma apresentação recente de Bruce Momjian apresentou uma descrição de algumas das principais alterações em implementação. As funcionalidades prometem melhor desempenho e facilidade em certos tipos de consulta.&lt;br /&gt;&lt;br /&gt;Algumas das principais alterações da versão 8.4 seriam:&lt;br /&gt;&lt;br /&gt;- &lt;span style="font-style: italic;"&gt;Column-Level Permissions &lt;/span&gt;- Permissões de acesso em por coluna.&lt;br /&gt;- &lt;span style="font-style: italic;"&gt;Windowing Functions: Sum and Rank &lt;/span&gt;- Ranqueamento de registros e somatório em uma sintaxe simples.&lt;br /&gt;- &lt;span style="font-style: italic;"&gt;WITH Queries: Simple and Recursive &lt;/span&gt;- sintaxe alternativa para a realização de consultas, inclusive permitindo recursividade.&lt;br /&gt;- &lt;span style="font-style: italic;"&gt;Parallel Restore of Dumps &lt;/span&gt;- Uso de threads para ganhar paralelismo na restauração de backups. Deve depender do sistema operacjional para funcionar.&lt;br /&gt;- &lt;span style="font-style: italic;"&gt;Visibility Maps Reduce Vacuum Overhead &lt;/span&gt;- Aprimoramento do desempenho das rotinas de Vacuum.&lt;br /&gt;- &lt;span style="font-style: italic;"&gt;No Need for Free-Space Map Configuration&lt;/span&gt; - Remoção de configurações dos arquivos de configuração.&lt;br /&gt;- &lt;span style="font-style: italic;"&gt;Default Values for Function Arguments&lt;/span&gt; - Funções com valores DEFAULT para retorno.&lt;br /&gt;- Outras alterações, principalmente voltadas para o desempenho.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Confira as alterações segundo o texto original &lt;a href="http://momjian.us/main/writings/pgsql/features.pdf"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Esta informação foi obtida no blog do &lt;a href="http://guedesoft.net/blog/2009/03/03/bruce-momjian-disponibiliza-apresentacao-sobre-postgresql-84/"&gt;Guedes&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-6056674887972580220?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/6056674887972580220/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=6056674887972580220' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6056674887972580220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6056674887972580220'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/03/possiveis-funcionalidades-das-versoes.html' title='Possíveis Funcionalidades das Versões Futuras do PostgreSQL'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-4209507767485386069</id><published>2009-02-13T09:47:00.005-03:00</published><updated>2009-02-13T10:47:36.785-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Documentando Objetos no PostgreSQL</title><content type='html'>Onde guardar a documentação sobre os objetos do seu banco de dados? A importância a e grande quantidade de informação sobre tabelas, seus campos, índices e outros objetos faz com que essa questão ganhe importância. Um bom lugar para fazer esse registro é justamente o próprio banco de dados. No PostgreSQL é possível se comentar os objetos armazenados no banco, atualizar, remover e consultar essas informações, através do comando COMMENT.&lt;br /&gt;&lt;br /&gt;O comando COMMENT armazena um comentário textual associado a um objeto do banco de dados. Sua sintaxe é relativamente simples:&lt;br /&gt;&lt;br /&gt;&lt;pre class="SYNOPSIS"&gt;COMMENT ON&lt;br /&gt;{&lt;br /&gt; TABLE &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; COLUMN &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;table_name&lt;/i&gt;&lt;/tt&gt;.&lt;tt class="REPLACEABLE"&gt;&lt;i&gt;column_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; AGGREGATE &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;agg_name&lt;/i&gt;&lt;/tt&gt; (&lt;tt class="REPLACEABLE"&gt;&lt;i&gt;agg_type&lt;/i&gt;&lt;/tt&gt; [, ...] ) |&lt;br /&gt; CAST (&lt;tt class="REPLACEABLE"&gt;&lt;i&gt;sourcetype&lt;/i&gt;&lt;/tt&gt; AS &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;targettype&lt;/i&gt;&lt;/tt&gt;) |&lt;br /&gt; CONSTRAINT &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;constraint_name&lt;/i&gt;&lt;/tt&gt; ON &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;table_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; CONVERSION &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; DATABASE &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; DOMAIN &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; FUNCTION &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;func_name&lt;/i&gt;&lt;/tt&gt; ( [ [ &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;argmode&lt;/i&gt;&lt;/tt&gt; ] [ &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;argname&lt;/i&gt;&lt;/tt&gt; ] &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;argtype&lt;/i&gt;&lt;/tt&gt; [, ...] ] ) |&lt;br /&gt; INDEX &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; LARGE OBJECT &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;large_object_oid&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; OPERATOR &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;op&lt;/i&gt;&lt;/tt&gt; (&lt;tt class="REPLACEABLE"&gt;&lt;i&gt;leftoperand_type&lt;/i&gt;&lt;/tt&gt;, &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;rightoperand_type&lt;/i&gt;&lt;/tt&gt;) |&lt;br /&gt; OPERATOR CLASS &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt; USING &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;index_method&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; OPERATOR FAMILY &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt; USING &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;index_method&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; [ PROCEDURAL ] LANGUAGE &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; ROLE &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; RULE &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;rule_name&lt;/i&gt;&lt;/tt&gt; ON &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;table_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; SCHEMA &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; SEQUENCE &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; TABLESPACE &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; TEXT SEARCH CONFIGURATION &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; TEXT SEARCH DICTIONARY &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; TEXT SEARCH PARSER &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; TEXT SEARCH TEMPLATE &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; TRIGGER &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;trigger_name&lt;/i&gt;&lt;/tt&gt; ON &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;table_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; TYPE &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt; |&lt;br /&gt; VIEW &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;object_name&lt;/i&gt;&lt;/tt&gt;&lt;br /&gt;} IS &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;'text'&lt;/i&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;A grande lista de tipos de objetos para os quais o comando pode criar comentários é bastante abrangente. Compreende tabelas, campos de tabelas, índices, tablespaces, esquemas, databases, tipos, funções, etc. Os comentários são armazenados em campos TEXT, que permitem documentações largamente detalhadas.&lt;br /&gt;&lt;br /&gt;Os comentários são consultados por meio do utilitário PSQL e de algumas funções disponibilizadas pelo PostgreSQL (&lt;code class="FUNCTION"&gt;obj_description&lt;/code&gt;, &lt;code class="FUNCTION"&gt;col_description&lt;/code&gt;,     and &lt;code class="FUNCTION"&gt;shobj_description&lt;/code&gt;).&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;Exemplos de Código - Criação de Comentário&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;1 - Criação de Objetos do Tipo Tabela.&lt;br /&gt;&lt;br /&gt;create table starttest (col int);&lt;br /&gt;create table starttest2 (col int);&lt;br /&gt;&lt;br /&gt;2 - Definição de Comentários&lt;br /&gt;&lt;br /&gt;COMMENT ON TABLE starttest IS 'Tabela do sistema SITP';&lt;br /&gt;COMMENT ON TABLE starttest2 IS 'SITP - Modulo II';&lt;br /&gt;&lt;br /&gt;3 - Remoção de Comentários&lt;br /&gt;&lt;br /&gt;COMMENT ON TABLE starttest IS NULL;&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;Exemplos de Código - Consulta de Comentários&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;1 - Recuperação de OID de objeto em PG_CLASS.&lt;br /&gt;&lt;br /&gt;SELECT relname, relfilenode&lt;br /&gt;FROM PG_CLASS&lt;br /&gt;WHERE relname LIKE 'starttest%';&lt;br /&gt;&lt;br /&gt;2 - Consulta dos commentários associados pelo OID.&lt;br /&gt;&lt;br /&gt;SELECT obj_description(17173);&lt;br /&gt;&lt;br /&gt;3 - Consulta dos comentários de todos os objetos de PG_CLASS.&lt;br /&gt;&lt;br /&gt;SELECT obj_description(p.relfilenode), * from pg_class p;&lt;br /&gt;&lt;br /&gt;4 - Consulta dos comentários de todos os objetos de PG_TYPE.&lt;br /&gt;&lt;br /&gt;SELECT obj_description(p.typrelid), * from PG_TYPE p;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;Utilizaçao Prática&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;O uso do comando COMMENT para documentar objetos do banco é pouco difundido em parte pelo fato do mesmo ser pouco conhecido, não apresentar similares em alguns SGBDs e por não ser gerado por muitas das ferramentas do mercado, que armazenam estas informações em formato próprio, sem transferi-las ao SGBD.&lt;br /&gt;&lt;br /&gt;Também existem questões de segurança, pois um usuário malicioso que tenha acesso ao banco pode recuperar os comentários sobre os seus objetos. No entanto, o interesse real dos invasores de bancos de dados se refere às informações armazenadas, e não à documentação dos bancos de dados. &lt;br /&gt;&lt;br /&gt;Deve ser evitado armazenar qualquer informação crítica para a segurança com o comando COMMENT, tais como senhas, informações sobre criptografia e política de acesso utilizados, uma vez que não existem restrições de segurança para os comentários armazenados, isto é, qualquer usuário criado no SGBD visualiza todas as informações.&lt;br /&gt;&lt;br /&gt;Os comentários são exportados ao se fazer um backup do banco com os utilitários do PostgreSQL.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-4209507767485386069?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/4209507767485386069/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=4209507767485386069' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4209507767485386069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4209507767485386069'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/02/documentando-objetos-no-postgresql.html' title='Documentando Objetos no PostgreSQL'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-1720155174006148039</id><published>2009-01-28T11:18:00.009-03:00</published><updated>2009-02-13T10:52:41.550-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Ferramentas'/><title type='text'>Configuração Básica de Driver ODBC para PostgreSQL</title><content type='html'>Acesso a dados demanda um bom middleware. E a tecnologia ODBC - &lt;b&gt;Open Database Connectivity&lt;/b&gt;, é uma opção bastante estável, disponível desde 1992&lt;b&gt;. &lt;/b&gt;Por apresentar drivers para praticamente todos os bons SGBDs do mercado, muitas soluções são implementadas utilizando esta tecnologia.&lt;br /&gt;&lt;br /&gt;O suporte às funcionalidades de um SGBD relacional e a grande disponibilidade de drivers são grandes pontos fortes deste middleware. Como problemas podem ser elencadas a falta de atualizações recentes, com defasagem em termos de novas funcionalidades oferecidas por outros componentes de acesso a dados e o fato de ser uma tecnologia proprietária.&lt;br /&gt;&lt;br /&gt;Longe de esgotar este tópico, este post mostra uma configuração básica de ODBC para PostgreSQL, como a que foi utilizada para a utilização da ferramenta &lt;a href="http://postgresqlbr.blogspot.com/2008/12/dbdesigner-fork-fraco-mas-gratuito.html"&gt;DbDesigner Fork&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Etapa 1- Instalação&lt;/span&gt;&lt;br /&gt;É sempre recomendável baixar a versão mais atualizada disponível, no site da comunidade PostgreSQL.ORG: &lt;a href="http://www.postgresql.org/ftp/odbc/versions/"&gt;http://www.postgresql.org/ftp/odbc/versions/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No nosso caso, a instalação será feita em uma máquina com Windows XP. Existem formas de utilizar o ODBC no Linux e no UNIX e meios de se fazer pontes envolvendo ODBC e JDBC, mas estas variações estão (bastante) fora do escopo deste post.&lt;br /&gt;&lt;br /&gt;Descompacte o arquivo ZIP e execute o instalador. É sempre aconselhável ler antes o arquivo readme e se for uma atualização, pode ser disparado o arquivo upgrade.bat. Na instalação padrão um assistente relativamente simples se encarregará do processo sem que se precise fazer configurações complicadas.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r2Eq58DmzTc/SYB1ewGx4RI/AAAAAAAAAJc/a6UVz8y_wLk/s1600-h/odbc0_install.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 251px;" src="http://3.bp.blogspot.com/_r2Eq58DmzTc/SYB1ewGx4RI/AAAAAAAAAJc/a6UVz8y_wLk/s320/odbc0_install.GIF" alt="" id="BLOGGER_PHOTO_ID_5296362332957565202" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;* Etapa 2 - Configuração&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Após a instalação, abra o painel de controle do windows (Menu Iniciar/ Painel de Controle). Dispare a opção "Ferramentas administrativas" e depois selecione "Fontes de Dados (ODBC)".&lt;br /&gt;&lt;br /&gt;Será aberta a tela "Administrador de Fonte de Dados ODBC". Nesta tela, selecione a aba "Drivers ODBC que estão instalados no sistema". Observe na imagem abaixo que foram instalados os drivers para PostgreSQL ANSI e UNICODE.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r2Eq58DmzTc/SYB2O8qbbwI/AAAAAAAAAJk/F0ZhbKNbt-Y/s1600-h/odbc1_Drivers.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 279px;" src="http://1.bp.blogspot.com/_r2Eq58DmzTc/SYB2O8qbbwI/AAAAAAAAAJk/F0ZhbKNbt-Y/s320/odbc1_Drivers.GIF" alt="" id="BLOGGER_PHOTO_ID_5296363160962035458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Para criar um &lt;span style="font-style: italic;"&gt;data source&lt;/span&gt;, selecione a aba "Fonte de dados do usuário" e o botão "Adicionar". Aparecerá uma tela como a que está abaixo. Selecione o driver do PostgreSQL e confirme.&lt;br /&gt;&lt;br /&gt;Em seguida, preencha os valores para o nome da fonte (&lt;span style="font-style: italic;"&gt;Description&lt;/span&gt;), banco de dados para o qual aponta (&lt;span style="font-style: italic;"&gt;Database&lt;/span&gt;), servidor em que está o banco de dados (&lt;span style="font-style: italic;"&gt;Server&lt;/span&gt;), Porta de Comunicação (&lt;span style="font-style: italic;"&gt;Port&lt;/span&gt;), usuário e senha. O servidor pode assumir os valores "localhost" ou um endereço IP. Utilize o botão TEST para verificar se os dados foram devidamente fornecidos e se a conexão pode ser feita e a opção SAVE para gravar a configuração do driver.&lt;br /&gt;&lt;br /&gt;A opção "Configurar" permite a alteração de uma fonte de dados do usuário, abrindo a tela abaixo. Os botões &lt;span style="font-style: italic;"&gt;Datasource,&lt;/span&gt; &lt;span style="font-style: italic;"&gt;Global &lt;/span&gt;e &lt;span style="font-style: italic;"&gt;Manage &lt;/span&gt;DSN estão fora do escopo deste &lt;span style="font-style: italic;"&gt;post&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r2Eq58DmzTc/SYB6IJWw-1I/AAAAAAAAAJs/tWIkF5fVpu4/s1600-h/odbc2_Configura%C3%A7%C3%A3o.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 182px;" src="http://3.bp.blogspot.com/_r2Eq58DmzTc/SYB6IJWw-1I/AAAAAAAAAJs/tWIkF5fVpu4/s320/odbc2_Configura%C3%A7%C3%A3o.GIF" alt="" id="BLOGGER_PHOTO_ID_5296367442156649298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Após fazer a instalação, a nova fonte de dados do usuário aparece na lista, podendo ser utilizada por várias aplicações compatíveis com o ODBC.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r2Eq58DmzTc/SYB8YKp2n9I/AAAAAAAAAJ0/49gckmSZ50g/s1600-h/odbc3_Fonte+Criada.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 279px;" src="http://1.bp.blogspot.com/_r2Eq58DmzTc/SYB8YKp2n9I/AAAAAAAAAJ0/49gckmSZ50g/s320/odbc3_Fonte+Criada.GIF" alt="" id="BLOGGER_PHOTO_ID_5296369916406308818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Mais informações sobre ODBC podem ser obtidas nestas fontes:&lt;br /&gt;- &lt;a href="http://en.wikipedia.org/wiki/Open_Database_Connectivity"&gt;Na Wikipedia&lt;br /&gt;&lt;/a&gt;- Site &lt;a href="http://www.easysoft.com/developer/interfaces/odbc/linux.html#what_is_odbc"&gt;Easysoft&lt;/a&gt;, com informações sobre ODBC em UNIX e Linux&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-1720155174006148039?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/1720155174006148039/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=1720155174006148039' title='10 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/1720155174006148039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/1720155174006148039'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/01/configuracao-basica-de-driver-odbc-para.html' title='Configuração Básica de Driver ODBC para PostgreSQL'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r2Eq58DmzTc/SYB1ewGx4RI/AAAAAAAAAJc/a6UVz8y_wLk/s72-c/odbc0_install.GIF' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-4590765033202644371</id><published>2009-01-14T12:28:00.007-03:00</published><updated>2009-01-14T12:59:01.970-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Ferramentas'/><title type='text'>Power Architect  - Ótima Ferramenta Livre!!!</title><content type='html'>Falar de ferramentas de banco de dados geralmente implica em destacar suas limitações. Uma exceção é o Power Architect, que apresenta boas e úteis funcionalidades para o desenvolvimento de aplicações que tenham um certo grau de complexidade. É uma ferramenta livre e de código aberto, cujo download pode ser feito &lt;a href="http://www.sqlpower.ca/page/architect"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Não é exclusiva para o PostgreSQL, podendo também ser utilizada em projetos com Oracle, SQL Server, MySQL, Derby e HSQLDB. O desenvolvimento é pago por taxa de suporte premium de 199 dólares ao ano, o que é relativamente baixo em se falando de ferramentas de base de dados.&lt;br /&gt;&lt;br /&gt;As principais funcionalidades são:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Boa interface visual com diagramas de ER e OLAP&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Acesso a bancos de dados via JDBC&lt;/li&gt;&lt;li&gt;Conexão a múltiplas fntes de dados ao mesmo tempo&lt;/li&gt;&lt;li&gt;Comparação de modelos de dados com identificação de diferenças e geração de scripts de sincronização&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Suporte a "Drag-and-drop" de tabelas de um modelo para o &lt;span style="font-style: italic;"&gt;playpen&lt;/span&gt; (diagrama)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Geração de banco de dados através do projeto (&lt;span style="font-style: italic;"&gt;Forward-engineers&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;Engenharia reversa para a construção dos projetos&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Salvamento da estrutura de dados em um projeto que pode ser trabalhado remotemante&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Dados do projeto armazenados em um formato XML de fácil navegação&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Licença livre GPL (version 3) &lt;/li&gt;&lt;li&gt;Suporte rudimentar a ETL - Extração, Transformação e Carga de Dados &lt;/li&gt;&lt;li&gt;Suporte a esquemas OLAP para projeto de &lt;span style="font-style: italic;"&gt;Data Warehouses&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Alguns problemas ou desvantagens foram constatados. Falta suporte a visões, triggers, restrições tipo check e stored procedures, recursos importantes para o projeto de bancos de dados de maior complexidade. Outros problemas menores constatados foram: falta Suporte a trabalho em grupos, ausência de Controle de versões e falta de interface WEB.&lt;br /&gt;&lt;br /&gt;Abaixo, algumas telas capturadas:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Tela de conexão a banco de dados PostgreSQL, tendo ao fundo uma visão geral da ferramenta.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r2Eq58DmzTc/SW4HlWxsISI/AAAAAAAAAJE/2_lKF8sh4n0/s1600-h/Ambiente+e+tela+de+conex%C3%A3o.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 232px;" src="http://2.bp.blogspot.com/_r2Eq58DmzTc/SW4HlWxsISI/AAAAAAAAAJE/2_lKF8sh4n0/s320/Ambiente+e+tela+de+conex%C3%A3o.GIF" alt="" id="BLOGGER_PHOTO_ID_5291174950557458722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Parâmetros para a comparação entre bancos de dados&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r2Eq58DmzTc/SW4IeappHyI/AAAAAAAAAJU/YV95KGVK67E/s1600-h/tela+de+parametros+de+compara%C3%A7a%C3%B5+de+bancos+de+dados.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 271px;" src="http://3.bp.blogspot.com/_r2Eq58DmzTc/SW4IeappHyI/AAAAAAAAAJU/YV95KGVK67E/s320/tela+de+parametros+de+compara%C3%A7a%C3%B5+de+bancos+de+dados.GIF" alt="" id="BLOGGER_PHOTO_ID_5291175930849992482" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Tela de resultado da comparação entre bancos de dados.&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r2Eq58DmzTc/SW4H9M94beI/AAAAAAAAAJM/xomts-OH4GE/s1600-h/compara%C3%A7%C3%A3o+de+bdf.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 222px;" src="http://1.bp.blogspot.com/_r2Eq58DmzTc/SW4H9M94beI/AAAAAAAAAJM/xomts-OH4GE/s320/compara%C3%A7%C3%A3o+de+bdf.GIF" alt="" id="BLOGGER_PHOTO_ID_5291175360241102306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Avaliação Geral&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A ferramenta é superior ao DBDesigner e pode ser utilizada para projetos que não sejam de pequeno porte. Apresentou poucos bugs nos testes realizados. No entanto, as desvantagens apesar de poucas são significativas.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-4590765033202644371?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/4590765033202644371/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=4590765033202644371' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4590765033202644371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/4590765033202644371'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/01/power-architect-tima-ferramenta-livre.html' title='Power Architect  - Ótima Ferramenta Livre!!!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r2Eq58DmzTc/SW4HlWxsISI/AAAAAAAAAJE/2_lKF8sh4n0/s72-c/Ambiente+e+tela+de+conex%C3%A3o.GIF' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-7051318056935261920</id><published>2009-01-12T12:17:00.002-03:00</published><updated>2009-01-12T12:24:30.716-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>PostgreSQL: primeira release de 2009!!!</title><content type='html'>A equipe do PostgreSQL lançou a primeira release de 2009, apresentando uma versão instável que não deve ser utilizada para ambientes de produção, que consiste basicamente em uma visão &lt;span style="font-style: italic;"&gt;snapshot&lt;/span&gt; das atualizações feitas no desenvolvimento do banco. O instalador pode ser baixado &lt;a href="http://www.postgresql.org/download/snapshots"&gt;aqui&lt;/a&gt;. A documentação desta versão está disponível &lt;a href="http://developer.postgresql.org/pgdocs/postgres/index.html"&gt;aqui&lt;/a&gt;, mas não conta por exemplo com uma seção "release notes" apesar de apreentar no título referência à versão 8.4.&lt;br /&gt;&lt;br /&gt;É uma boa opção para desenvolvedores e testadores que querem se antecipar às novas funcionalidades da versão 8.4 que estão em desenvolvimento ou colaborar nos testes.&lt;br /&gt;&lt;br /&gt;Acredita-se que  no primeiro semestre serão lançadas as primeiras versões de teste para a nova release 8.4 deste SGBD.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-7051318056935261920?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/7051318056935261920/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=7051318056935261920' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7051318056935261920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7051318056935261920'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2009/01/postgresql-primeira-release-de-2009.html' title='PostgreSQL: primeira release de 2009!!!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-3261403217628794766</id><published>2008-12-23T13:32:00.003-03:00</published><updated>2008-12-23T13:35:13.985-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Outro'/><title type='text'>Boas Festas!!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r2Eq58DmzTc/SVETLG6TuBI/AAAAAAAAAI8/2-8I2glfqN8/s1600-h/elefante.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 320px;" src="http://3.bp.blogspot.com/_r2Eq58DmzTc/SVETLG6TuBI/AAAAAAAAAI8/2-8I2glfqN8/s320/elefante.jpg" alt="" id="BLOGGER_PHOTO_ID_5283024919436965906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Não sou o primeiro, nem quero ser o último a desejar a você boas festas e um abençoado 2009!!!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-3261403217628794766?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/3261403217628794766/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=3261403217628794766' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3261403217628794766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3261403217628794766'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/12/boas-festas.html' title='Boas Festas!!!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r2Eq58DmzTc/SVETLG6TuBI/AAAAAAAAAI8/2-8I2glfqN8/s72-c/elefante.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-6006727140969847866</id><published>2008-12-23T12:33:00.010-03:00</published><updated>2008-12-23T13:31:31.782-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Ferramentas'/><title type='text'>DbDesigner Fork: Fraco, mas Gratuito!</title><content type='html'>Ferramentas para projeto de banco de dados estão entre as mais úteis para o desenvolvimento de sistemas. Infelizmente, também estão entre as mais difíceis de se encontrar dentre os softwares gratuitos. O &lt;a href="http://sourceforge.net/projects/dbdesigner-fork/"&gt;DbDesigner Fork&lt;/a&gt; é uma boa opção livre para a modelagem de bancos de dados, apresentando suporte para Oracle, SQL Server, MySql e Firebird, além do PostgreSQL.&lt;br /&gt;&lt;br /&gt;O projeto está disponível para Windows e Linux e sua última versão está datada de julho de 2007. Originou-se do DBDesigner, uma ferramenta mais antiga. Seu desenvolvimento apresenta alguma taxa de atividade e possivelmente será feito algum novo release em breve. Gera arquivos XML com a modelagem realizada em uma boa interface visual.&lt;br /&gt;&lt;br /&gt;Apresenta uma série de recursos bastante úteis:&lt;br /&gt;- Engenharia Reversa&lt;br /&gt;- Sincronização&lt;br /&gt;- Modelagem visual de diagramas de Entidade-Relacionamento, com integridade referencial&lt;br /&gt;- Recursos para exportação SQL&lt;br /&gt;- Importação da ferramenta ErWin&lt;br /&gt;- Exportação dos diagramas como figuras (PNG e BMP)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DbDesigner e PostgreSQL&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nesta análise me concentrarei basicamente nas características específicas que o software tem em relação com o o PostgreSQL. A ferramenta apresentou um resultado razoável, pois foram constatados bugs e limitações. O ponto forte, além da gratuidade, foi a interface amigável, apesar de não tão moderna.&lt;br /&gt;&lt;br /&gt;A conexão com o banco foi dificultada pelo fato da ferramenta só aceitar conexão ODBC com o PostgreSQL. Tive de baixar e instalar o driver ODBC, além de criar um data source no sistema operacional.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r2Eq58DmzTc/SVEMnAFRQ_I/AAAAAAAAAIk/y9EClHx3QBQ/s1600-h/ODBC.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 182px;" src="http://1.bp.blogspot.com/_r2Eq58DmzTc/SVEMnAFRQ_I/AAAAAAAAAIk/y9EClHx3QBQ/s320/ODBC.GIF" alt="" id="BLOGGER_PHOTO_ID_5283017702058836978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A interface visual é simples e a seleção da visualização em query mode permitiu a realização de consultas ao SGBD sem sair da ferramenta.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r2Eq58DmzTc/SVEQthiVq9I/AAAAAAAAAI0/3Jo8hBDq7d4/s1600-h/tela+em+query+mode.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 232px;" src="http://3.bp.blogspot.com/_r2Eq58DmzTc/SVEQthiVq9I/AAAAAAAAAI0/3Jo8hBDq7d4/s320/tela+em+query+mode.GIF" alt="" id="BLOGGER_PHOTO_ID_5283022212164856786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A engenharia reversa funcionou muito bem. Puxou os dados do PostgreSQL rapidamente e criou objetos no diagrama corrente. No entanto, não importou as chaves estrangeiras. Quando realizada mais de uma vez, criou mais de uma tabela com o mesmo nome no diagrama.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r2Eq58DmzTc/SVELd4bOPII/AAAAAAAAAIc/dRKjUzO6Dyw/s1600-h/engrev.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 285px; height: 320px;" src="http://1.bp.blogspot.com/_r2Eq58DmzTc/SVELd4bOPII/AAAAAAAAAIc/dRKjUzO6Dyw/s320/engrev.GIF" alt="" id="BLOGGER_PHOTO_ID_5283016445872979074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A sincronização de banco de dados simplesmente não funcionou. Fiquei em dúvida se a mensagem de erro apresentada foi em virtude de bug da ferramenta ou da versão do driver ODBC utilizada. Abaixo, a tela de sincronização:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r2Eq58DmzTc/SVEP309-KGI/AAAAAAAAAIs/1zNra_JAZPw/s1600-h/sincro.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 238px; height: 320px;" src="http://1.bp.blogspot.com/_r2Eq58DmzTc/SVEP309-KGI/AAAAAAAAAIs/1zNra_JAZPw/s320/sincro.GIF" alt="" id="BLOGGER_PHOTO_ID_5283021289668094050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Na exportação de dados, uma decepção: não há ligação direta para o PostgreSQL. O DbDesigner exporta um script SQL que deve ser submetido ao banco.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Avaliação geral&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Creio que houve uma série de avanços em relação às versões anteriores da ferramenta, mas ainda está distante de ser utilizável sem ressalvas, especialmente nas grandes empresas. Abaixo listo algumas das limitações da ferramenta:&lt;br /&gt;&lt;br /&gt;- Falta Suporte a trabalho em grupos.&lt;br /&gt;- Ausência de Controle de versões.&lt;br /&gt;- Grande espaçamento de tempo entre as atualizações de versão.&lt;br /&gt;- Número grande de bugs e de requested features por atender.&lt;br /&gt;- Falta de interface WEB&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Observações&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Aconselho a quem deseja utilizar esta ferramenta para suas aplicações que preserve o modelo gerado, que é criado em formato XML, em uma ferramenta de controle de versões. Em releases anteriores do DbDesigner cheguei a perder algumas horas de trabalho por corrupção do arquivo.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-6006727140969847866?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/6006727140969847866/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=6006727140969847866' title='15 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6006727140969847866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6006727140969847866'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/12/dbdesigner-fork-fraco-mas-gratuito.html' title='DbDesigner Fork: Fraco, mas Gratuito!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_r2Eq58DmzTc/SVEMnAFRQ_I/AAAAAAAAAIk/y9EClHx3QBQ/s72-c/ODBC.GIF' height='72' width='72'/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-8382792400127971597</id><published>2008-12-05T11:30:00.006-03:00</published><updated>2008-12-05T18:15:16.498-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Retornando registros de consultas genéricas com RETURN QUERY</title><content type='html'>&lt;style type="text/css"&gt;  &lt;!--   @page { margin: 2cm }   P { margin-bottom: 0.21cm }  --&gt;&lt;/style&gt;&lt;p class="western" style="margin-bottom: 0cm;"&gt;Recentemente, recebi uma dúvida sobre o &lt;a href="http://postgresqlbr.blogspot.com/2008/04/return-query-novo-recurso-do-postgresql.html"&gt;RETURN QUERY&lt;/a&gt;, funcionalidade implementada na versão 8.3 do PostgreSQL, que permite o retorno de conjuntos de linhas e colunas de uma função. A dúvida do Patrick é bastante comum e até pouco tempo eu não teria uma resposta adequada:&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm; font-style: italic; font-weight: bold;"&gt;"Patrick Espake disse...&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm; font-style: italic; font-weight: bold;"&gt;Eu estou tentando usar isso, para retorna uma linha que vem de um inner join de diversas tabelas.&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm; font-style: italic; font-weight: bold;"&gt;O que eu coloco para o RETURNS SETOF? Visto que os meus dados vem de uma junção de diversas tabelas.&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm; font-style: italic; font-weight: bold;"&gt;Obrigado."&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm; font-style: italic; font-weight: bold;"&gt;&lt;br /&gt;&lt;/p&gt; A solução do problema do Patrick é relativamente simples. O Return Query aceita o tipo RECORD  como valor de retorno. Portanto, fica fácil retornar resultados de consultas genéricas. Para ilustrar, segue um exemplo de código Pl/ PgSQL abaixo.&lt;br /&gt;&lt;br /&gt;A tabela indivíduo será utilizada para o teste do RETURN QUERY retornando uma consulta qualquer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CREATE TABLE individuo (&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cod integer PRIMARY KEY,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;nome varchar(50)); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;INSERT INTO individuo VALUES (1,'Teste');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;INSERT INTO individuo VALUES (2,'Teste 2');&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Agora, a função RET_ROWS mostra como utilizar o retorno de tipos RECORD para funções:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;--Retornando consulta de várias linhas &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;CREATE OR REPLACE FUNCTION ret_rows () RETURNS SETOF RECORD AS $$&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;RETURN QUERY SELECT * FROM individuo; -- Acrescenta um conjunto de linhas ao retorno da função&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;RETURN ; -- Retorna as linhas&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;END;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;$$ LANGUAGE plpgsql;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A grande diferença desta forma de programar está na chamada da função. Ao utilizar valor de retorno do tipo RECORD, deve ser indicada a lista de campos a serem retornados e seus tipos. Esta pode ser vista como uma limitação, embora na prática também seja uma forma de se garantir a confiabilidade dos resultados retornados na execução de comandos SQL dentro de funções pela validação dos valores retornados.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;SELECT * from ret_rows() as (c1 integer, c2 varchar(50)) ;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; --Declaração dos campos do record&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Falta considerar a execução de uma &lt;span style="font-weight: bold;"&gt;junção dentro da função&lt;/span&gt;, que é nossa questão original. Para tanto, será criada uma tabela com os filhos dos indivíduos para sofrer junção com a de indivíduos. O exemplo abaixo executou sem qualquer problema na versão 8.3:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;CREATE TABLE filhos (&lt;br /&gt;cod integer PRIMARY KEY,&lt;br /&gt;filhos integer);&lt;br /&gt;INSERT INTO filhos VALUES (1,1);&lt;br /&gt;INSERT INTO filhos VALUES (2,3);&lt;br /&gt;&lt;br /&gt;--Retornando Resultado de Junção&lt;br /&gt;CREATE OR REPLACE FUNCTION ret_filhos (psql integer) RETURNS SETOF RECORD AS $$&lt;br /&gt;BEGIN&lt;br /&gt;RETURN QUERY SELECT individuo.nome, filhos.filhos FROM individuo, filhos WHERE individuo.cod = filhos.cod AND individuo.cod = $1; -- Consulta&lt;br /&gt;RETURN ; -- Retorna as linhas&lt;br /&gt;END;&lt;br /&gt;$$ LANGUAGE plpgsql;&lt;br /&gt;&lt;br /&gt;SELECT * from ret_filhos(1) as (c1 varchar(50), c2 integer) ; --Declaração dos campos de retorno&lt;br /&gt;SELECT * from ret_filhos(2) as (c1 varchar(50), c2 integer) ;&lt;br /&gt;&lt;br /&gt;Outras Soluções&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Outras soluções para o retorno de registros em funções são a consolidação e retorno dos dados dentro de um campo texto ou XML.&lt;br /&gt;&lt;br /&gt;Resolveu, Patrick?&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-8382792400127971597?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/8382792400127971597/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=8382792400127971597' title='6 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8382792400127971597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8382792400127971597'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/12/retornando-registros-de-consultas.html' title='Retornando registros de consultas genéricas com RETURN QUERY'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-5406140456518127580</id><published>2008-11-28T11:04:00.007-03:00</published><updated>2008-11-28T11:40:10.046-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>PostgreSQL: Tendências pelo Mundo e no Brasil!</title><content type='html'>Você já se perguntou que países mais utilizam o PostgreSQL? Em que colocação ficaria o Brasil neste ranking? As buscas sobre o PostgreSQL estão aumentando ou diminuindo? Este tipo de pergunta é difícil de responder em virtude da facilidade de instalação e difusão do software. Estatísticas confiáveis são difíceis de conseguir e as que são disponíveis são certamente sujeitas a erros substanciais. Por exemplo, o fato de termos o PostgreSQL instalado, não significa que esteja sendo realmente executado.&lt;br /&gt;&lt;br /&gt;No site do Google Insights podem ser buscadas informações relativas a buscas de termos em geral. A busca por PostgreSQL revelou interessantes idéias. Confira por conta própria &lt;a href="http://www.google.com/insights/search/#q=postgresql&amp;amp;date=today%2012-m&amp;amp;cmpt=q"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Algumas curiosidades:&lt;br /&gt;&lt;br /&gt;- A procura por PostgreSQL tem diminuído nos últimos 4 anos. Este dado não significa uma diminuição da base instalada, uma vez que o que é medido é a quantidade de buscas a respeito.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r2Eq58DmzTc/SS_-sFaFY1I/AAAAAAAAAH8/nJzbtPAhRY4/s1600-h/postgresql+-+interesse+desdde+2004.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 150px;" src="http://3.bp.blogspot.com/_r2Eq58DmzTc/SS_-sFaFY1I/AAAAAAAAAH8/nJzbtPAhRY4/s320/postgresql+-+interesse+desdde+2004.GIF" alt="" id="BLOGGER_PHOTO_ID_5273713721993421650" border="0" /&gt;&lt;/a&gt;- Se em 2004, Japão e Rússia eram os países com maior interesse, Cuba e China hoje ocupam esta posição. Abaixo, uma visão do dia de hoje (28/11/2008)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r2Eq58DmzTc/SS__owPJdBI/AAAAAAAAAIM/J6nj99Ta9Ac/s1600-h/postgresql+-+pelo+mundo.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 195px;" src="http://2.bp.blogspot.com/_r2Eq58DmzTc/SS__owPJdBI/AAAAAAAAAIM/J6nj99Ta9Ac/s320/postgresql+-+pelo+mundo.GIF" alt="" id="BLOGGER_PHOTO_ID_5273714764282426386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;- O Brasil ainda ocupa uma posição intermediária em buscas na internet sobre o tema. O Paraguai é o país da América do Sul que mais pesquisa sobre o PostgreSQL.&lt;br /&gt;&lt;br /&gt;- Em 2008 a quantidade de buscas está estável, com queda à medida que se aproxima o fim do ano.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r2Eq58DmzTc/SS__GWyuvxI/AAAAAAAAAIE/AeWOZSUoft4/s1600-h/postgresql+-+interesse+%C3%BAltimos+12+meses.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 148px;" src="http://1.bp.blogspot.com/_r2Eq58DmzTc/SS__GWyuvxI/AAAAAAAAAIE/AeWOZSUoft4/s320/postgresql+-+interesse+%C3%BAltimos+12+meses.GIF" alt="" id="BLOGGER_PHOTO_ID_5273714173336796946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;- Dentre os estados brasileiros, temos como grandes buscadores o Distrito Federal, o meu Ceará e Santa Catarina. A região Norte em Geral e alguns estados apresentaram um baixíssimo índice de buscas sobre o PostgreSQL, enquanto que a Região Sul é a que apresentou uma maior difusão, com todos os estados apresentando bom índice de buscas. Estes dados apresentam uma forte influência da concentração dos profissionais de informática no país.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r2Eq58DmzTc/STAA5Mf8K_I/AAAAAAAAAIU/AU7WMNUK4DU/s1600-h/postgresql+-+Brasil.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 199px;" src="http://3.bp.blogspot.com/_r2Eq58DmzTc/STAA5Mf8K_I/AAAAAAAAAIU/AU7WMNUK4DU/s320/postgresql+-+Brasil.GIF" alt="" id="BLOGGER_PHOTO_ID_5273716146258586610" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-5406140456518127580?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/5406140456518127580/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=5406140456518127580' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5406140456518127580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5406140456518127580'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/11/postgresql-tendncias-pelo-mundo-e-no.html' title='PostgreSQL: Tendências pelo Mundo e no Brasil!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r2Eq58DmzTc/SS_-sFaFY1I/AAAAAAAAAH8/nJzbtPAhRY4/s72-c/postgresql+-+interesse+desdde+2004.GIF' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-7508116861583760407</id><published>2008-11-28T09:31:00.002-03:00</published><updated>2008-11-28T09:39:14.722-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Funções de Suporte a Tipos ENUM (8.3)</title><content type='html'>O PostgreSQL 8.3 disponibiliza algumas funções que permitem a consulta a campos ENUM com pouquíssimo esforço.  As funções implementadas são: enum_first, enum_last e enum_range.&lt;br /&gt;&lt;br /&gt;Para exemplificar sua utilização, vamos criar o tipo enum signos:&lt;br /&gt;&lt;br /&gt;CREATE TYPE signos AS ENUM ('Áries', 'Touro', 'Gêmeos', 'Câncer', 'Leão', 'Virgem', 'Libra',&lt;br /&gt;'Escorpião', 'Sagitário', 'Capricórnio', 'Aquário', 'Peixes');&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* enum_first&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1- Primeiro elemento de um tipo ENUM&lt;br /&gt;&lt;br /&gt;SELECT enum_first(null::signos);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* enum_last &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1- Último elemento de um tipo ENUM&lt;br /&gt;&lt;br /&gt;SELECT enum_last(null::signos);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* enum_range&lt;/span&gt; - Intervalos de elementos de um tipo ENUM.&lt;br /&gt;&lt;br /&gt;1 - Retornando todos os valores em ordem&lt;br /&gt;&lt;br /&gt;SELECT enum_range(null::signos);&lt;br /&gt;&lt;br /&gt;2 - Retorna valores até o ENUM Virgem, incluindo o 'Virgem'&lt;br /&gt;&lt;br /&gt;SELECT enum_range(null, 'Virgem'::signos);&lt;br /&gt;&lt;br /&gt;3 - Retorna valores a partir do ENUM Virgem, incluindo o 'Virgem'&lt;br /&gt;&lt;br /&gt;SELECT enum_range('Virgem'::signos, null);&lt;br /&gt;&lt;br /&gt;4 - Retorna valores do intervalo entre Touro e Virgem, incluindo os dois itens.&lt;br /&gt;&lt;br /&gt;SELECT enum_range('Gêmeos'::signos,'Virgem'::signos);&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-7508116861583760407?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/7508116861583760407/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=7508116861583760407' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7508116861583760407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7508116861583760407'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/11/funes-de-suporte-tipos-enum-83.html' title='Funções de Suporte a Tipos ENUM (8.3)'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-6630283205964535501</id><published>2008-11-27T10:57:00.004-03:00</published><updated>2008-11-27T11:23:08.922-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Campos Tipo ENUM no PostgreSQL 8.3</title><content type='html'>Campos com enumerações de valores aceitos são implementados em vários bons bancos de dados. No caso do PostgreSQL, este recurso poderia ser realizado através de constraints tipo CHECK ou &lt;a href="http://postgresqlbr.blogspot.com/2008/01/o-comando-create-domain.html"&gt;domínios&lt;/a&gt;. Na versão 8.3 foi introduzido um tipo de dado ENUM, facilitando ainda mais a operação de campos com uma lista restrita de valores permitidos.&lt;br /&gt;&lt;br /&gt;Vantagens:&lt;br /&gt;- Cria listas de valores aceitos que podem ser reutilizadas várias vezes, inclusive dentro de uma mesma tabela, para disciplinar os valores aceitos por um determinado campo.&lt;br /&gt;- Apresenta funções específicas para manipulação dos tipos ENUM criados.&lt;br /&gt;- Melhor uso de espaço: o armazenamento campos Enum ocupam 4 bytes em disco. Dependendo da quantidade de valores armezenados, pode ser economizado um bom espaço no banco de dados.&lt;br /&gt;- Podem ser visualizados através de consultas a pg_enum.&lt;br /&gt;&lt;br /&gt;Desvantagens:&lt;br /&gt;- O tipo ENUM é diferente dos demais tipos do PostgreSQL, portanto não pode ser comparado com valores de outros tipos. Na ausência de CAST, empregue um operador customizado ou uma função que realize esta conversão.&lt;br /&gt;- Falta de recursos para alterações no tipo. Não é possível simplesmente inserir ou retirar valores de um tipo, mas os valores de campos de tabelas tipo ENUM podem ser livremente alterados.&lt;br /&gt;- Enumerados que não sejam de valores alfanuméricios não podem ser criados. Para enumerados de datas e números deve ser empregada uma restrição do tipo CHECK, por exemplo, ou outra maneira de simular o ENUM.&lt;br /&gt;&lt;br /&gt;Sintaxe:&lt;br /&gt;&lt;pre class="SYNOPSIS"&gt;CREATE TYPE &lt;tt class="REPLACEABLE"&gt;&lt;i&gt;name&lt;/i&gt;&lt;/tt&gt; AS ENUM&lt;br /&gt;   ( '&lt;tt class="REPLACEABLE"&gt;&lt;i&gt;label&lt;/i&gt;&lt;/tt&gt;' [, ... ] )&lt;br /&gt;&lt;/pre&gt;Exemplos:&lt;br /&gt;&lt;br /&gt;1 - Criação e Utilização de Tipo Enumerado&lt;br /&gt;&lt;br /&gt;CREATE TYPE dia_sem AS ENUM ('Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab');&lt;br /&gt;&lt;br /&gt;--Utilização na criação de tabelas&lt;br /&gt;CREATE TABLE registro (&lt;br /&gt;dia_coleta dia_sem,&lt;br /&gt;dia_analise dia_sem,&lt;br /&gt;dia_resultado dia_sem);&lt;br /&gt;&lt;br /&gt;INSERT INTO registro VALUES ('Seg', 'Ter', 'Qua');&lt;br /&gt;INSERT INTO registro VALUES ('Seg', 'Ter', 'Dom');&lt;br /&gt;INSERT INTO registro VALUES ('Seg', 'Ter', 'QuW'); --ERRO - Não encontrado no tipo ENUM&lt;br /&gt;INSERT INTO registro VALUES ('Seg', 'Ter', 'QuA'); --ERRO - Case sentitive&lt;br /&gt;&lt;br /&gt;2 - Implementação similar com a cláusula check&lt;br /&gt;&lt;br /&gt;CREATE TABLE registro_teste (&lt;br /&gt;dia_coleta text check (dia_coleta in ('Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab')));&lt;br /&gt;&lt;br /&gt;3 - Criação de Tipo Enumerado II&lt;br /&gt;&lt;br /&gt;CREATE TYPE situacao AS ENUM ('Em elaboração', 'Proposto',&lt;br /&gt;'Em homologação', 'Aprovado', 'Recusado', 'Cancelado', 'Efetivado');&lt;br /&gt;&lt;br /&gt;--Utilização na criação de tabelas&lt;br /&gt;CREATE TABLE documento (&lt;br /&gt;descricao varchar(50) PRIMARY KEY,&lt;br /&gt;estado situacao);&lt;br /&gt;INSERT INTO documento VALUES ('Ata de reunião de 12/12/2008', 'Aprovado');&lt;br /&gt;INSERT INTO documento VALUES ('Levantamento do Protótipo', 'Cancelado');&lt;br /&gt;&lt;br /&gt;4 - Consulta aos enumerados no catálogo do PostgreSQL (OID do Tipo e Valor)&lt;br /&gt;&lt;br /&gt;SELECT * from pg_enum;&lt;br /&gt;&lt;br /&gt;5 - Consulta aos enumerados no catálogo do PostgreSQL (OID do Valor, do Tipo e o Valor)&lt;br /&gt;&lt;br /&gt;SELECT oid,* from pg_enum;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-6630283205964535501?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/6630283205964535501/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=6630283205964535501' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6630283205964535501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/6630283205964535501'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/11/campos-tipo-enum-no-postgresql-83.html' title='Campos Tipo ENUM no PostgreSQL 8.3'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-2194456900728434346</id><published>2008-10-20T11:01:00.004-03:00</published><updated>2008-10-20T11:13:54.074-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>PostgreSQL em Evento de Curitiba</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r2Eq58DmzTc/SPyRtU9vXPI/AAAAAAAAAH0/9zAzvLhv3UY/s1600-h/capaEvento.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_r2Eq58DmzTc/SPyRtU9vXPI/AAAAAAAAAH0/9zAzvLhv3UY/s320/capaEvento.gif" alt="" id="BLOGGER_PHOTO_ID_5259238672769703154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;O SERPRO - Serviço Federal de Processamento de Dados, promove o II Fórum de Tecnologia em Software Livre, em Curitiba. O evento ocorrerá de 10 a 12 de novembro de 2008, na Regional Serpro de Curitiba.&lt;br /&gt;&lt;br /&gt;O PostgreSQL faz parte da programação por meio de uma palestra sobre as funcionalidades da versão 8.3 e de um minicurso de PostgreSQL Avançado, ministrado por mim. Plataformas, tecnologias e processos baseados em software e formatos livres e abertos fazem parte da &lt;a href="http://www.cta.softwarelivre.serpro.gov.br/2008/programacao"&gt;programação do evento&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Participe! As incrições podem ser feitas pelo site: &lt;a href="http://www.cta.softwarelivre.serpro.gov.br/"&gt;http://www.cta.softwarelivre.serpro.gov.br/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-2194456900728434346?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/2194456900728434346/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=2194456900728434346' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2194456900728434346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2194456900728434346'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/10/postgresql-em-evento-de-curitiba.html' title='PostgreSQL em Evento de Curitiba'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r2Eq58DmzTc/SPyRtU9vXPI/AAAAAAAAAH0/9zAzvLhv3UY/s72-c/capaEvento.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-8432120489794945419</id><published>2008-10-09T13:14:00.003-03:00</published><updated>2008-10-09T13:41:44.608-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>PostgreSQL no Novo Concurso do SERPRO</title><content type='html'>(09/10/2008) Saiu o edital do concurso do SERPRO - Serviço Federal de Processamento de Dados e pela primeira vez o banco de dados PostgreSQL aparece no edital. No cargo 5: ‘ANALISTA – ESPECIALIZAÇÃO: DESENVOLVIMENTO DE SISTEMAS’, aparece no conteúdo programático o tópico ‘PostgreSQL em Linux’. Dos bancos de dados proprietários, apenas o ADABAS (Software AG) foi citado explicitamente.&lt;br /&gt;&lt;br /&gt;Uma curiosidade: no cargo 17, ANALISTA – ESPECIALIZAÇÃO: SUPORTE TÉCNICO, o PostgreSQL também faz parte do conteúdo programático, mas esta escrito errado.&lt;br /&gt;&lt;br /&gt;E difícil afirmar que cairá ao menos uma questão de PostgreSQL no concurso, no entanto este edital consiste em mais um indicador da crescente utilização deste banco de dados na esfera federal brasileira.&lt;br /&gt;&lt;br /&gt;Confira &lt;a href="http://www.cespe.unb.br/concursos/serpro2008/arquivos/ED_1_2008_SERPRO_ABT_FORM.PDF"&gt;aqui&lt;/a&gt; o edital completo e boa sorte!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-8432120489794945419?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/8432120489794945419/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=8432120489794945419' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8432120489794945419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8432120489794945419'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/10/postgresql-no-novo-concurso-do-serpro.html' title='PostgreSQL no Novo Concurso do SERPRO'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-7181816007943086645</id><published>2008-10-03T08:40:00.002-03:00</published><updated>2008-10-03T08:45:36.594-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><title type='text'>SERPRO Participa da PgCon 2008</title><content type='html'>O SERPRO - Serviço Federal de Processamento de Dados participou da PgCon 2008 como patrocinador. A ferramenta é o principal banco de dados livre homologada para compor as soluções da empresa, que conta com um portfólio de centenas de sistemas ativos.&lt;br /&gt;&lt;br /&gt;Saiba mais neste &lt;a href="http://www.serpro.gov.br/noticiasSERPRO/2008/setembro/conferencia-explora-as-possibilidades-do-postgresql"&gt;link&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-7181816007943086645?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/7181816007943086645/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=7181816007943086645' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7181816007943086645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7181816007943086645'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/10/serpro-participa-da-pgcon-2008.html' title='SERPRO Participa da PgCon 2008'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-8407133350265623891</id><published>2008-10-02T10:13:00.006-03:00</published><updated>2008-10-02T11:17:43.192-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Limitações'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Esqueça o Comando SHOW: Use PG_SETTINGS</title><content type='html'>O comando &lt;a href="http://postgresqlbr.blogspot.com/2007/08/o-comando-show.html"&gt;SHOW&lt;/a&gt; é bastante utilizado para visualizar as configurações de um servidor PostgreSQL de datas, log, gerência de memória etc. Uma vez que na versão em que estou trabalhando tempos 187 parâmetros distintos, este comando se revela bastante prático para se ter uma visão geral da configuração e bem fácil de usar sem.&lt;br /&gt;Abaixo, exemplos de sua sintaxe:&lt;br /&gt;&lt;br /&gt;- SHOW ALL&lt;br /&gt;&lt;br /&gt;- SHOW work_mem&lt;br /&gt;&lt;br /&gt;No entanto, apresenta uma série de desagradáveis limitações:&lt;br /&gt;&lt;br /&gt;- O resultado da consulta das variáveis de configuração não pode ser alterado (essa atualização pode ser feita pelo comando SET).&lt;br /&gt;- Os campos mostrados são poucos e até insuficientes dependendo da necessidade (nome do parâmetro, valor corrente e descrição)&lt;br /&gt;- Não é possível selecionar um subconjunto dados para ser visualizado (linhas e colunas), tampouco agregar colunas adicionais na consulta retornada.&lt;br /&gt;- Não é possível montar consultas envolvendo junção, union e outros recursos da linguagem SQL.&lt;br /&gt;- Para se visualizar 10 variáveis importantes, deve-se usar SHOW ALL ou fazer 10 comandos SHOW indicando as variáveis desejadas.&lt;br /&gt;&lt;br /&gt;Apesar de sua utilizada, este comando simplesmente  limita a flexibilidade de consultas e relatórios sobre as configurações do PostgreSQL.  Como contornar esta limitação?&lt;br /&gt;&lt;br /&gt;A tabela virtual PG_SETINGS contorna TODAS AS LIMITAÇÕES apresentadas pelo comando SHOW. As únicas restrições são:&lt;br /&gt;- Não se pode inserir registros ou excluí-los (assim como não se pode adicionar e excluir variáveis de configuração)&lt;br /&gt;- Certas variáveis não podem ser alteradas com o servidor em funcionamento ou apresentam restrições (como 'autovacuum' e 'bonjour_name', por exemplo).&lt;br /&gt;&lt;br /&gt;As vantagens obtidas são várias:&lt;br /&gt;- O resultado da consulta das variáveis de configuração pode ser alterado, respeitando-se as restrições de cada variável e seus valores aceitos .&lt;br /&gt;- São mostradas mais informações sobre cada item de configuração (11 colunas)&lt;br /&gt;- É possível selecionar um subconjunto dados para ser visualizado (utilizando comando SELECT!!!)&lt;br /&gt;- É possível (e fácil) montar consultas envolvendo junção, union e outros recursos da linguagem SQL.&lt;br /&gt;- Para se visualizar 10 (ou mais) variáveis importantes, pode ser empregado apenas um comando que retorne exclusivamente as variáveis desejadas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Exemplos de utilização de PG_SETTINGS:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1 - Sintaxe básica, retornando todas as configurações.&lt;br /&gt;&lt;br /&gt;SELECT * FROM pg_settings;&lt;br /&gt;&lt;br /&gt;2 - Seleção de variáveis de configuração que comecem com 'AUTO'.&lt;br /&gt;&lt;br /&gt;SELECT * FROM pg_settings WHERE NAME LIKE 'auto%';&lt;br /&gt;&lt;br /&gt;3 - Consulta de variáveis de configuração com UNION.&lt;br /&gt;&lt;br /&gt;SELECT * FROM pg_settings WHERE NAME LIKE 'auto%'&lt;br /&gt;UNION&lt;br /&gt;SELECT * FROM pg_settings WHERE NAME LIKE 'Date%';&lt;br /&gt;&lt;br /&gt;4 - Consulta de variáveis de configuração com junção.&lt;br /&gt;&lt;br /&gt;SELECT * FROM pg_settings p1, pg_settings p2&lt;br /&gt;WHERE P1.NAME LIKE 'log_%' AND P1.NAME = P2.NAME AND UPPER(P2.UNIT) = 'KB';&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-8407133350265623891?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/8407133350265623891/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=8407133350265623891' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8407133350265623891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8407133350265623891'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/10/esquea-o-comando-show-use-pgsettings.html' title='Esqueça o Comando SHOW: Use PG_SETTINGS'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-1321094399685655913</id><published>2008-09-22T09:03:00.003-03:00</published><updated>2008-10-02T10:56:47.804-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><title type='text'>Que tipo de aplicação você implementa com PostgreSQL?</title><content type='html'>Esta e a enquete que está sendo realizada no momento pela comunidade postgresql.org&lt;br /&gt;&lt;br /&gt;Participe!!! O link está abaixo:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.postgresql.org/community/"&gt;http://www.postgresql.org/community/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-1321094399685655913?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/1321094399685655913/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=1321094399685655913' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/1321094399685655913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/1321094399685655913'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/09/que-tipo-de-aplicao-voc-implementa-com.html' title='Que tipo de aplicação você implementa com PostgreSQL?'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-2471219383357555498</id><published>2008-09-08T09:13:00.003-03:00</published><updated>2008-09-08T09:21:30.307-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='PGSQL'/><title type='text'>Exemplos de Código e SQL e PgSQL</title><content type='html'>O site abaixo apresenta uma série de bons exemplos (e simples de reproduzir) de código SQL e PlPgSQL. São abordados assuntos como funções matemáticas, de datas, índices, tabelas, consultas, cursores, tipos de dados, entre outros recursos do banco.  Boa sugestão para a lista de favoritos de quem trabalha com o PostgreSQL:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.java2s.com/Code/PostgreSQL/CatalogPostgreSQL.htm"&gt;http://www.java2s.com/Code/PostgreSQL/CatalogPostgreSQL.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-2471219383357555498?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/2471219383357555498/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=2471219383357555498' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2471219383357555498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2471219383357555498'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/09/exemplos-de-cdigo-e-sql-e-pgsql.html' title='Exemplos de Código e SQL e PgSQL'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-2353838184474711788</id><published>2008-09-05T15:39:00.002-03:00</published><updated>2008-09-05T15:44:39.748-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><title type='text'>pgCon 2008 - Participe Você Também!</title><content type='html'>Antes tarde do que nunca, segue lembrete do maior evento de PostgreSQL nacional, a pgCon 2008!&lt;br /&gt;A expectativa dos organizadores é de um grande crescimento do número de participantes em relação ao ano passado.&lt;br /&gt;&lt;br /&gt;Site oficial: &lt;a href="http://pgcon.postgresql.org.br/"&gt;http://pgcon.postgresql.org.br/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Inscrições: &lt;a href="http://pgcon.postgresql.org.br/inscricoes.html"&gt;http://pgcon.postgresql.org.br/inscricoes.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Grade do evento:  &lt;a href="http://pgcon.postgresql.org.br/inscricoes.html"&gt;http://pgcon.postgresql.org.br/programacao.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aproveite os preços promocionais!&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-2353838184474711788?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/2353838184474711788/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=2353838184474711788' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2353838184474711788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2353838184474711788'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/09/pgcon-2008-participe-voc-tambm.html' title='pgCon 2008 - Participe Você Também!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-2675438380992604593</id><published>2008-09-05T12:43:00.002-03:00</published><updated>2008-09-05T13:56:27.527-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Templates no PostgreSQL...</title><content type='html'>Templates são uma poderosa ferramenta para a criação de bancos de dados padronizados, e uma característica estável implementada no PostgreSQL. No entanto, nem sempre é bem corretamente utilizada e entendida. Neste texto será comentado o seu funcionamento e os benefícios que podem ser obtidos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Templates de Bancos de Dados&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Templates são modelos. Criar um banco de dados com base em um template é simplesmente utilizar um banco de dados como modelo para a criação de outro. Como ganhos do uso de templates podem ser destacados:&lt;br /&gt;- Melhor padronização dos bancos de dados criados&lt;br /&gt;- Maior velocidade na criação de novos bancos de dados, evitando-se a necessidade de se rodar scripts e criar objetos após a sua criação.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Implementação no PostgreSQL&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No PostgreSQL, a criação de qualquer banco de dados se dá pela cópia de objetos e estrutura de um banco já existente para o novo a ser criado. São definidos por padrão dois bancos de dados templates: template0 e template1, no entanto qualquer banco de dados pode ser utilizado como template em um servidor PostgreSQL.&lt;br /&gt;&lt;br /&gt;O template0 é mais enxuto e deve ser predominantemente utilizado para criação de bancos que serão populados via restauração de backup. Não apresenta todos objetos e funções do template1, o qual é mais utilizado e é recomendado como principal padrão para criação de novos bancos de dados.&lt;br /&gt;&lt;br /&gt;Acrescentar funções, tabelas e outros objetos a um banco de dados template, é torná-los disponíveis a qualquer novo banco de dados que for criado posteriormente. A atualização de bancos criados anteriormente com o template que foi atualizado deve ser feita de forma manual caso seja necessária.&lt;br /&gt;&lt;br /&gt;Abaixo, a criação de bancos de dados utilizando templates:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;-- Criação sem parâmetro -T, cria banco de dados com base no template 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;C:\Program Files\PostgreSQL\8.3\bin&gt;createdb -U postgres dbtemplate "Banco de Dados Template 1"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;-- Criação de novo banco de dados com base no template 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;C:\Program Files\PostgreSQL\8.3\bin&gt;createdb -U postgres -T template0 dbtemplate2 "Banco de Dados Template 0"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;-- Criação de novo banco de dados com base no template 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;C:\Program Files\PostgreSQL\8.3\bin&gt;createdb -U postgres dbtemplate3 "Banco de Dados Template 1"&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Personalização de Template no PostgreSQL&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Personalizar um template para uso na criação de novos bancos de dados é relativamente fácil e demanda apenas algumas precauções:&lt;br /&gt;- Evitar alterar os templates padrão do PostgreSQL (template0 e template1) - Crie novos bancos de dados e personalize-os, utilizando-os posteriormente como templates.&lt;br /&gt;- Planeje que tipo de função o banco de dados template deve oferecer: banco de dados web, banco de dados para Data Warehouse, etc., criando templates específicos mais adequados.&lt;br /&gt;- Nomeie seus templates de forma distinta, para diferenciá-los de bancos de dados de aplicações.&lt;br /&gt;- Não utilizar bancos de dados de aplicações como templates. O processo de cópia do template para o novo banco de dados exige que o template não esteja sofrendo acesso por parte de outros usuários, o que pode gerar erros na criação de novos bancos.&lt;br /&gt;&lt;br /&gt;Abaixo, uma proposta de atividade para testar a personalização do banco de dados template &lt;span style="font-style: italic; font-weight: bold;"&gt;dbtemplate3&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;- Abra o banco de dados dbtemplate3.&lt;br /&gt;- Crie as rotinas CPF_formatar e CPF_validar que estão na seção de &lt;a href="http://postgresqlbr.blogspot.com/search/label/Algoritmo"&gt;algoritmos&lt;/a&gt; deste blog.&lt;br /&gt;- Feche o banco de dados.&lt;br /&gt; - Crie novo banco de dados, chamado "corporativo", utilizando como template o dbtemplate3.&lt;br /&gt;- Abra o banco de dados "corporativo" e localize as funções que você adicionou ao template.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-2675438380992604593?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/2675438380992604593/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=2675438380992604593' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2675438380992604593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2675438380992604593'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/09/templates-no-postgresql.html' title='Templates no PostgreSQL...'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-7905033533661017773</id><published>2008-08-18T11:35:00.004-03:00</published><updated>2008-08-18T12:25:03.807-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='PGSQL'/><title type='text'>DBLINK: Consultas, Comandos SQL, Transações e Funções</title><content type='html'>A realização de consultas e a execução de comandos SQL são as principais atividades realizadas com o DBLINK. Continuando os comentários iniciados no &lt;a href="http://postgresqlbr.blogspot.com/2008/08/dblink-introduo-dblinkconnect.html"&gt;post anterior&lt;/a&gt;, este tópico apresenta exemplos de aplicação desta tecnologia do PostgreSQL.&lt;br /&gt;&lt;br /&gt;As rotinas dblink e dblink_exec permitem a realização de consultas, inserção, alteração e exclusão de dados em bancos distintos. Podem ser utilizadas dentro de uma transação ou de uma função.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Consultas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As consultas são feitas com a rotina dblink e seguem uma sintaxe diferente do tradicional. Pode ser criada uma conexão para a execução da consulta ou pode ser usada uma que já tenha sido criada anbteriormente.&lt;br /&gt;&lt;br /&gt;A rotina dblink tem dois parâmetros, sendo o primeiro a conexão e o segundo o comando a ser executado. Além dos parâmetros, o dblink pede que se liste os campo e seus tipos de dados.&lt;br /&gt;&lt;br /&gt;O exemplo abaixo mostra uma consulta que utiliza a conexão "myconn", criada pela função dblink_connect:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;--Consulta em banco de dados de estoque de dentro do banco de dados de venda usando conexão criada&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;SELECT estoque_prod.* FROM dblink('myconn', 'SELECT desc_prod,  quant_estocada FROM  ESTOQUE_ITEM')&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;AS estoque_prod (desc_prod VARCHAR(50),  quant_estocada INTEGER);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O exemplo abaixo mostra uma consulta que apresenta como parâmetro uma string para conexão:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;--Consulta em banco de dados de estoque de dentro do banco de dados de venda com conexão dentro do comando&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;SELECT * FROM dblink('hostaddr=10.200.239.55 port=5432 dbname=estoque user=postgres password=post',&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;'SELECT desc_prod,  quant_estocada FROM  ESTOQUE_ITEM')&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;AS estoque_prod (desc_prod VARCHAR(50), quant_estocada INTEGER);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Inserção, Alteração e Exclusão de Dados&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Estas operações são implementadas  por meio da rotina dblink_exec. Como parâmetros são fornecidos a conexão e o comando a ser executado:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;--Inserção de registros com DBLINK_EXEC&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;--Detalhe: uso das aspas simples. As mesmas devem estar duplicadas.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;SELECT dblink_exec('myconn', 'INSERT INTO ESTOQUE_ITEM VALUES (6, ''Relogio'', 400, 110.90);');&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;--Atualização de registros com DBLINK_EXEC&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;SELECT dblink_exec('myconn', 'UPDATE ESTOQUE_ITEM VALUES SET quant_estocada = quant_estocada - 1 WHERE cod_prod = 6;');&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;--Exclusão de registros com DBLINK_EXEC&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;SELECT dblink_exec('myconn', 'DELETE FROM ESTOQUE_ITEM WHERE cod_prod = 6;');&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Dblink Dentro de uma Transação&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Comandos do dblink funcionam normalmente dentro de transações.&lt;br /&gt;&lt;br /&gt;Abaixo, um exemplo de transação de venda, sensibilidando dois bancos de dados distintos:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;BEGIN; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;INSERT INTO VENDA_ITEM (cod_prod, quant_vendida, data) VALUES (1, 1000 , DEFAULT);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;SELECT dblink_exec('myconn', 'INSERT INTO ESTOQUE_ITEM VALUES (5, ''Relogio'', 400, 110.90);');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;END;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;* Uso do Dblink Dentro de Funções&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O dblink pode ser livremente utilizado dentro de funções. Pode ainda apresentar parametrização e a chamada à função pode estar inscrita dentro de uma transação maior. &lt;br /&gt;&lt;br /&gt;Abaixo, um exemplo com dois parâmetros, simulando uma transação de compra e venda:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- Uso de dblink DENTRO de uma função&lt;br /&gt;CREATE OR REPLACE FUNCTION func_venda(cod_prd integer, quant integer) RETURNS INTEGER AS $$&lt;br /&gt;DECLARE&lt;br /&gt;   comando_venda TEXT;&lt;br /&gt;   comando_estoque TEXT;&lt;br /&gt;BEGIN&lt;br /&gt;   comando_venda := 'INSERT INTO VENDA_ITEM (cod_prod, quant_vendida, data) VALUES (' || $1 || ',' || $2 || ', DEFAULT);';&lt;br /&gt;   EXECUTE comando_venda;&lt;br /&gt;   comando_estoque := 'SELECT dblink_exec(''myconn'', ''UPDATE ESTOQUE_ITEM VALUES SET quant_estocada = quant_estocada - ' || $2 || ' WHERE cod_prod = ' || $1 || ''');';&lt;br /&gt;   EXECUTE comando_estoque;&lt;br /&gt;   RETURN 1; --Retorno com sucesso&lt;br /&gt;END;&lt;br /&gt;$$ LANGUAGE plpgsql;&lt;br /&gt;&lt;br /&gt;SELECT func_venda(1,1);&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-7905033533661017773?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/7905033533661017773/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=7905033533661017773' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7905033533661017773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/7905033533661017773'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/08/dblink-consultas-comandos-sql-transaes.html' title='DBLINK: Consultas, Comandos SQL, Transações e Funções'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-3280733527084364092</id><published>2008-08-14T13:34:00.005-03:00</published><updated>2008-08-14T17:13:00.643-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>DBLINK: Introdução, dblink_connect/  dblink_disconnect e dblink_get_connections</title><content type='html'>O dblink é um dos mais importantes &lt;span style="font-style: italic;"&gt;contribs&lt;/span&gt; do PostgreSQL. Consiste em um conjunto de métodos para acesso a outros bancos de dados do PostgreSQL em uma mesma sessão.&lt;br /&gt;&lt;br /&gt;Com esta biblioteca é possível fazer consultas, inserções, alteração e exclusão de dados em mais de um banco de dados (PostgreSQL)  sem sair da sessão corrente, o que facilita muito a comunicação entre bancos de dados.&lt;br /&gt;&lt;br /&gt;Não faz parte do núcleo deste SGBD, mas pode ser instalado sem grandes problemas e é relativamente fácil de se utilizar.&lt;br /&gt;&lt;br /&gt;As principais funções do dblink são:&lt;br /&gt;- dblink_connect&lt;br /&gt;- dblink_get_connections&lt;br /&gt;- dblink - para consultas&lt;br /&gt;- dblink_exec - utilizado na inserção, alteração e exclusão de dados&lt;br /&gt;- dblink_disconnect - liberar conexões dblink&lt;br /&gt;&lt;br /&gt;Existem alternativas ao uso desta solução para a comunicaçção entre bancos de dados, tais como cargas diárias de bancos de dados, e outros softwares, mas o dblink tem sido bastante empregado na construção da interoperabilidade de bancos de dados do PostgreSQL e se posiciona como boa alternativa.&lt;br /&gt;&lt;br /&gt;Ressalvas:&lt;br /&gt;- Este artigo não visa esgotar a sintaxe do dblink e todos os seus comandos. Apenas mostra uma visão geral do seu funcionamento.&lt;br /&gt;&lt;br /&gt;Para testar o dblink, crie dois bancos de dados distintos, chamados estoque e vendas, no mesmo servidor ou em máquinas distintas, e insira as seguintes tabelas e dados:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;--Banco de Dados VENDA&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CREATE TABLE VENDA_ITEM (&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cod_venda SERIAL PRIMARY KEY, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cod_prod INTEGER NOT NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;quant_vendida INTEGER NOT NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;data DATE DEFAULT current_date NOT NULL);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;--Banco de Dados ESTOQUE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CREATE DATABASE ESTOQUE;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DROP TABLE ESTOQUE_ITEM;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CREATE TABLE ESTOQUE_ITEM (&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cod_prod SERIAL PRIMARY KEY, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;desc_prod VARCHAR(50) NOT NULL, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;quant_estocada INTEGER NOT NULL CHECK (quant_estocada &gt; 0), &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;preco NUMERIC(10,2) CHECK (preco &gt; 0));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;INSERT INTO ESTOQUE_ITEM VALUES (1, 'Lápis Preto', 10000, 1.50);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;INSERT INTO ESTOQUE_ITEM VALUES (2, 'Borracha', 50, 0.90);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;INSERT INTO ESTOQUE_ITEM VALUES (3, 'Caderno 200 Folhas', 175, 8.90);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;INSERT INTO ESTOQUE_ITEM VALUES (4, 'Agenda do Ano', 40, 12.50);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;* &lt;span style="font-weight: bold;"&gt;dblink_connect  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A rotina dblink_connect  cria uma conexão na sessão corrente do PostgreSQL para outro banco de dados.  Antes de utiliza-la, é necessário configurar o banco de dados para aceitar a conexão, alterando o arquivo pg_hba e as permissões do usuário.&lt;br /&gt;&lt;br /&gt;Como parâmetros, devem ser fornecidos o nome da conexão e uma string de parâmetros de conexão para o banco a ser acessado:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;--Criação de Conexão com o DBLINK&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;-- Conecta com o banco de dados estoque&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;SELECT dblink_connect('myconn', 'hostaddr=10.211.239.55 port=5432 dbname=estoque user=postgres password=post');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;-- Cria nova conecxão com o banco de dados estoque, sem interferir na anterior&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;SELECT dblink_connect('myconn2', 'hostaddr=10.211.239.55 port=5432 dbname=estoque user=postgres password=post');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;-- Conecta com o banco de dados vendas&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;SELECT dblink_connect('myconn3', 'hostaddr=10.211.239.55 port=5432 dbname=vendas user=postgres password=post');&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ressalvas:&lt;br /&gt;- Evite criar muitas conexões pelo dblink. Cada conexão que for criada vai ocupar memória extra e pode impactar no desempenho do seu sistema. A execução dos exemplos anteriores vai criar três conexões ativas na memória.&lt;br /&gt;- Pode haver lentidão de acesso na conexão dblink. Se um dos bancos de dados conectados estiver com problemas de lentidão, a conexão como um todo será lenta.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; * dblink_get_connections&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esta função mostra as conexões  ativas do dblink. Não mostra as demais conexões ao banco de dados.&lt;br /&gt;&lt;br /&gt;Não apresenta parâmetros. Abaixo, a sintaxe:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;--Consultando conexões abertas com DBLINK&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;SELECT dblink_get_connections();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* dblink_disconnect &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A rotina dblink_disconnect encerra conexões criadas com o dblink, liberando a memória. Recebe como parâmetro o nome da conexão a ser encerrada. Execute este comando periodicamente para liberar recursos de hardware, evitando manter conexões ociosas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;--Desconexão&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;SELECT dblink_disconnect('myconn3');&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Os próximos posts comentarão as demais funcionalidades do dblink, apresentando exemplos.&lt;br /&gt;&lt;br /&gt;Referência:&lt;br /&gt;- &lt;a href="http://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A1tico/Replica%C3%A7%C3%A3o"&gt;Livro PostgreSQL Prático - dblink&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-3280733527084364092?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/3280733527084364092/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=3280733527084364092' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3280733527084364092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/3280733527084364092'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/08/dblink-introduo-dblinkconnect.html' title='DBLINK: Introdução, dblink_connect/  dblink_disconnect e dblink_get_connections'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-241779734285184409</id><published>2008-08-01T11:17:00.020-03:00</published><updated>2008-12-11T02:00:50.592-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Ferramentas'/><title type='text'>Aprovado! Instalador Amigável para Linux</title><content type='html'>Mês passado criei um post sobre &lt;a href="http://postgresqlbr.blogspot.com/2008/07/instalao-no-linux-e-mac-com-apenas-um.html"&gt;novos instaladores&lt;/a&gt; do PostgreSQL para Linux e Mac. Depois de um tempinho, resolvi testar no Linux.&lt;br /&gt;&lt;br /&gt;Na plataforma Linux, a instalação do PostgreSQL normalmente é feita com uma série de comandos do sistema operacional,  o que é uma boa maneira de ter maior controle dos resultados. No entanto  este processo pode ser dificultoso para neófitos e mesmo para os mais experientes. O procedimento também pode ficar difícil se algo não sair conforme o manual ou tutorial utilizado estiver indicando.&lt;br /&gt;&lt;br /&gt;O instalador novo é uma boa opção para quem quer um servidor rodando, mas não deseja perder tempo em configurações avançadas e digitação em prompts de comando.  Sua interface é gráfica, simples e agradável.&lt;br /&gt;&lt;br /&gt;Os testes foram feitos em uma máquina com Linux Fedora 2.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Preparação da Instalação&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Faça o login na estação Linux como usuário root. O próximo passo é fazer o download do instalador e copiá-lo em uma pasta do sistema de arquivos.&lt;br /&gt;&lt;br /&gt;Abra o terminal, entre no diretório em que está o instalador e use o comando exec para rodar o programa:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;exec /home/usr/postgresql-8.3.3-2-linux.bin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O sistema abrirá uma tela com um assistente amigável para a instalação do PostgreSQL como servidor na máquina.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Etapas da Instalação&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As telas são bem simples e futuras versões do instalador devem ter novos recursos. Abaixo, a tela inicial.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r2Eq58DmzTc/SJMfqUarOCI/AAAAAAAAAEk/QMvcBzWpye4/s1600-h/install+postgresql+tela+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_r2Eq58DmzTc/SJMfqUarOCI/AAAAAAAAAEk/QMvcBzWpye4/s320/install+postgresql+tela+1.png" alt="" id="BLOGGER_PHOTO_ID_5229558404202838050" border="0" /&gt;&lt;/a&gt;Em seguida aparece a tela de seleção do diretório de instalação.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r2Eq58DmzTc/SJMgJsCCHgI/AAAAAAAAAEs/o6KAAi2FTsg/s1600-h/install+postgresql+tela+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_r2Eq58DmzTc/SJMgJsCCHgI/AAAAAAAAAEs/o6KAAi2FTsg/s320/install+postgresql+tela+2.png" alt="" id="BLOGGER_PHOTO_ID_5229558943117876738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Telas de diretório de dados e de senha do superusuário. Por padrão este instalador cria um superusuário chamado POSTGRES .&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_r2Eq58DmzTc/SJMgXphwEII/AAAAAAAAAE0/0cz9UEboNCk/s1600-h/install+postgresql+tela+3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_r2Eq58DmzTc/SJMgXphwEII/AAAAAAAAAE0/0cz9UEboNCk/s320/install+postgresql+tela+3.png" alt="" id="BLOGGER_PHOTO_ID_5229559182963773570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r2Eq58DmzTc/SJMg-u7qYlI/AAAAAAAAAFE/qZ-7464ezbI/s1600-h/install+postgresql+tela+4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_r2Eq58DmzTc/SJMg-u7qYlI/AAAAAAAAAFE/qZ-7464ezbI/s320/install+postgresql+tela+4.png" alt="" id="BLOGGER_PHOTO_ID_5229559854429528658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Etapas de definição da porta de comunicação utilizada (padrão 5432) e &lt;span style="font-style: italic;"&gt;locale&lt;/span&gt; (localização geográfica associada a um conjunto de parâmetros: país, idioma, etc.).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r2Eq58DmzTc/SJMiSbaGKNI/AAAAAAAAAFM/wf5FLACzO88/s1600-h/install+postgresql+tela+5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_r2Eq58DmzTc/SJMiSbaGKNI/AAAAAAAAAFM/wf5FLACzO88/s320/install+postgresql+tela+5.png" alt="" id="BLOGGER_PHOTO_ID_5229561292297480402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r2Eq58DmzTc/SJMiz5VOZ7I/AAAAAAAAAFU/cJT-ImMVkgI/s1600-h/install+postgresql+tela+6.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_r2Eq58DmzTc/SJMiz5VOZ7I/AAAAAAAAAFU/cJT-ImMVkgI/s320/install+postgresql+tela+6.png" alt="" id="BLOGGER_PHOTO_ID_5229561867265796018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Terlas de seleção de linguagens procedurais para as funções e procedimentos e a &lt;span style="font-style: italic;"&gt;progress ba&lt;/span&gt;r de instalação. Observe que as linguagens serão instaladas no template1, geralmente utilizado como base para criação de novos bancos de dados.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_r2Eq58DmzTc/SJMjhULNdMI/AAAAAAAAAFc/huCBL2SrMlU/s1600-h/install+postgresql+tela+8.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_r2Eq58DmzTc/SJMjhULNdMI/AAAAAAAAAFc/huCBL2SrMlU/s320/install+postgresql+tela+8.png" alt="" id="BLOGGER_PHOTO_ID_5229562647565661378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r2Eq58DmzTc/SJMkBa6-TmI/AAAAAAAAAFk/p8ExuF1vVm4/s1600-h/install+postgresql+tela+9.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_r2Eq58DmzTc/SJMkBa6-TmI/AAAAAAAAAFk/p8ExuF1vVm4/s320/install+postgresql+tela+9.png" alt="" id="BLOGGER_PHOTO_ID_5229563199132421730" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Resultado da Instalação&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Imediatamente após a instalação pode-se trabalhar com o PostgreSQL.&lt;br /&gt;Abaixo, a tela de conclusão da instalação e visualização dos componentes instalados.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r2Eq58DmzTc/SJMkzrNNZPI/AAAAAAAAAFs/11vyTjhhKPk/s1600-h/install+postgresql+tela+10.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_r2Eq58DmzTc/SJMkzrNNZPI/AAAAAAAAAFs/11vyTjhhKPk/s320/install+postgresql+tela+10.png" alt="" id="BLOGGER_PHOTO_ID_5229564062497334514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r2Eq58DmzTc/SJMk5OhMuwI/AAAAAAAAAF0/TzCq34rC2s0/s1600-h/install+postgresql+tela+de+recursos+instalados.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_r2Eq58DmzTc/SJMk5OhMuwI/AAAAAAAAAF0/TzCq34rC2s0/s320/install+postgresql+tela+de+recursos+instalados.png" alt="" id="BLOGGER_PHOTO_ID_5229564157875763970" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Considerações Finais&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Espero que este instalador facilite a vida de quem está iniciando na ferramenta ou de quem tem de fazer várias instalações em curto prazo. Acredito que certas etapas poderiam ser unificadas e que novos parâmetros poderiam ser configuráveis para uma instalação mais personalizada. Apesar destas ressalvas, minha avaliação é super positiva.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-241779734285184409?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/241779734285184409/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=241779734285184409' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/241779734285184409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/241779734285184409'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/08/aprovado-instalador-amigvel-para-linux.html' title='Aprovado! Instalador Amigável para Linux'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r2Eq58DmzTc/SJMfqUarOCI/AAAAAAAAAEk/QMvcBzWpye4/s72-c/install+postgresql+tela+1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-8317383033226361973</id><published>2008-07-25T11:20:00.004-03:00</published><updated>2008-07-25T11:27:23.527-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Algoritmo'/><title type='text'>Validação de CPF - Algoritmo Sem Loops</title><content type='html'>O algoritmo para validação de CPF pode ser implementado sem loops. A solução alternativa que aparece convertida para Pl/ PgSQL foi retirada do site do &lt;a href="http://forum.clubedohardware.com.br/validacao-cpf/51717"&gt;Clube do Hardware&lt;/a&gt;, com alguns ajustes. O código ficou bem pequeno e os loops foram trocados por operações com vetores. Observe que no PostgreSQL os vetores começam a partir da posição zero.&lt;br /&gt;&lt;br /&gt;O código aparece abaixo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- Formatar CPF com vetor&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CREATE OR REPLACE FUNCTION CPF_Validar_Sem_Loop(par_cpf varchar(11)) RETURNS integer AS $$&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- ROTINA DE VALIDAÇÃO DE CPF SEM LOOP&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- Conversão para o PL/ PGSQL: Cláudio Bezera Leopoldino - http://postgresqlbr.blogspot.com/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- Algoritmo original: http://forum.clubedohardware.com.br/validacao-cpf/51717&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- Retorna 1 para CPF correto.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DECLARE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    vet_cpf integer [11]; --Recebe o CPF DIGITADO&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    dv integer; -- Primeiro número do DV (Dígito Verificador)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    dv1 integer; -- Segundo número do DV (Dígito Verificador)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    soma integer; -- Soma utilizada para o cálculo do DV&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    rest integer; -- Resto da divisão&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    IF char_length(par_cpf) = 11 THEN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    ELSE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        RAISE NOTICE 'Formato inválido: %',$1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        RETURN 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    END IF;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    -- Atribuição dos valores do Vetor&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    vet_cpf[0] := cast(substring (par_cpf FROM 1  FOR 1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    vet_cpf[1] := cast(substring (par_cpf FROM 2  FOR 1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    vet_cpf[2] := cast(substring (par_cpf FROM 3  FOR 1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    vet_cpf[3] := cast(substring (par_cpf FROM 4  FOR 1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    vet_cpf[4] := cast(substring (par_cpf FROM 5  FOR 1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    vet_cpf[5] := cast(substring (par_cpf FROM 6  FOR 1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    vet_cpf[6] := cast(substring (par_cpf FROM 7  FOR 1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    vet_cpf[7] := cast(substring (par_cpf FROM 8  FOR 1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    vet_cpf[8] := cast(substring (par_cpf FROM 9  FOR 1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    vet_cpf[9] := cast(substring (par_cpf FROM 10  FOR 1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    vet_cpf[10] := cast(substring (par_cpf FROM 11  FOR 1) as integer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    -- CÁLCULO DO PRIMEIRO NÚMERO DO DV&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    -- Soma dos nove primeiros multiplicados por 10, 9, 8 e assim por diante...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    soma:=(vet_cpf[0]*10)+(vet_cpf[1]*9)+(vet_cpf[2]*8)+(vet_cpf[3]*7)+(vet_cpf[4]*6)+(vet_cpf[5]*5)+(vet_cpf[6]*4)+(vet_cpf[7]*3)+(vet_cpf[8]*2);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    rest:=soma % 11;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    if (rest = 0) or (rest = 1) THEN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        dv:=0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    ELSE dv:=(11-rest); END IF;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    -- CÁLCULO DO SEGUNDO NÚMERO DO DV    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    -- Soma dos nove primeiros multiplicados por 11, 10, 9 e assim por diante...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    soma:=(vet_cpf[0]*11)+(vet_cpf[1]*10)+(vet_cpf[2]*9)+(vet_cpf[3]*8)+(vet_cpf[4]*7)+(vet_cpf[5]*6)+(vet_cpf[6]*5)+(vet_cpf[7]*4)+(vet_cpf[8]*3)+(dv*2);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    rest:=soma % 11;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    if (rest = 0) or (rest = 1) THEN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        dv1:=0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    ELSE dv1:=(11-rest); END IF;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    IF (dv = vet_cpf[9]) and (dv1 = vet_cpf[10])  THEN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;         RETURN 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    ELSE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;         RAISE NOTICE 'DV do CPF Inválido: %',$1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;         RETURN 0; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    END IF;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;END;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$$ LANGUAGE PLPGSQL;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sintaxe para a chamada da função criada:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SELECT CPF_Validar_Sem_Loop ('número do cpf');&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Caso queira relembrar o algoritmo com loops ou ver ais comentários sobre o cálculo de CPF, clique &lt;a href="http://postgresqlbr.blogspot.com/2008/06/validao-de-cpf-com-pl-pgsql.html"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;a href="javascript:void(0)" tabindex="10" onclick="return false;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-8317383033226361973?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/8317383033226361973/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=8317383033226361973' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8317383033226361973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/8317383033226361973'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/07/validao-de-cpf-algoritmo-sem-loops.html' title='Validação de CPF - Algoritmo Sem Loops'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-5132200830104216403</id><published>2008-07-18T11:52:00.002-03:00</published><updated>2008-07-18T11:59:55.045-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><title type='text'>Instalação no Linux e Mac com Apenas um Clique!</title><content type='html'>Estão disponíveis os betas de instaladores para Linux e Mac que permite a instalação com apenas "um clique".  A criação destes instaladores foi feita péla equipe do &lt;a href="http://www.enterprisedb.com/"&gt;EnterpriseDB&lt;/a&gt;. Espera-se que a dificuldade de instalação nestas plataformas seja minimizada.&lt;br /&gt;&lt;br /&gt;Os instaladores contém o PostgreSQL 8.3.3 com pgAdmin 1.8.4,  pl/Java e o plugin para debug da linguagem pl/pgsql.&lt;br /&gt;&lt;br /&gt;O download pode ser feito em:&lt;br /&gt;&lt;br /&gt;Linux 32 e 64 bits: &lt;a href="http://www.postgresql.org/download/linux" target="_blank"&gt;http://www.postgresql.org/download/linux&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Mac OS X 10.4: &lt;a href="http://www.postgresql.org/download/macosx" target="_blank"&gt;http://www.postgresql.org/download/macosx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-5132200830104216403?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/5132200830104216403/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=5132200830104216403' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5132200830104216403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5132200830104216403'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/07/instalao-no-linux-e-mac-com-apenas-um.html' title='Instalação no Linux e Mac com Apenas um Clique!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-2675530211868492096</id><published>2008-07-09T08:25:00.002-03:00</published><updated>2008-07-09T09:13:29.965-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Outro'/><title type='text'>PostgreSQL: Presença Fraca no Youtube</title><content type='html'>A presença do PostgreSQL entre os grandes SGBDs pode ser medida de diversas formas. Em busca de vídeos interessantes  de PostgreSQL, fiz uma busca no &lt;a href="http://www.youtube.com/results?search_query=postgresql&amp;amp;search_type=&amp;amp;aq=f"&gt;Youtube&lt;/a&gt;, e me decepcionei.  Encontrei apenas 356 vídeos. É muito pouco para cobrir todas as funcionalidades e possibilidades deste banco de dados.&lt;br /&gt;&lt;br /&gt;Considerando-se que este resultado envolve todos os idiomas, os resultados são ainda mais fracos, pois temos muito pouca coisa em Português. A qualidade da imagem também deixa a desejar, possivelmente pelo formato do Youtube, que reduz a resolução e prejudica apresentações que capturam telas do computador e as filmagens de apresentações em telões multimídia. Faltam comentários nos vídeos, a visualização ainda é pequena por parte da comunidade e muitos permanecem sem avaliação (o Youtube tem uma graduação que vai até 5 estrelas). Vi bons vídeos em italiano, mas acho que a estrada a ser trilhada pelo PostgreSQL em vídeo ainda está no seu início.&lt;br /&gt;&lt;br /&gt;Para ter uma visão comparativa, fiz outras buscas para outros SGBDs. Entre os bancos de dados livres, apesar do PostgreSQL só estar atrás do MySQL, não se pode dizer que é uma boa colocação. A abrangência, quantidade e qualidade dos vídeos pode melhorar muito. O próprio campeão MySQL teve muito mais resultados encontrados, mas bem abaixo do que poderia ser. O fato é que ainda não utilizamos vídeos como forma de aprendizado e divulgação de conhecimento como poderíamos.&lt;br /&gt;&lt;br /&gt;Mesmo os Bancos de Dados proprietários apresentam poucas opções, mas o SQL Server teve quase o dobro de vídeos que o PostgreSQL. O Oracle também decepcionou e pode ser alcançado pelo PostgreSQL com algum trabalho da comuindade.&lt;br /&gt;&lt;br /&gt;O ranking total aparece abaixo. Faltam alguns SGBDs, mas o propósito não era uma busca exaustiva. A grande surpresa foi o DB2, com a terceira colocação. Os bancos de dados livres lideram com o MySQL e o PostgreSQL ocupa apenas uma posição intermediária, com o quinto lugar.&lt;br /&gt;&lt;br /&gt;1 - MySQL: 1330&lt;br /&gt;2 - SQL Server: 674&lt;br /&gt;3 - IBM DB2: 461&lt;br /&gt;4 - Oracle  (busca por "Oracle SQL"): 406&lt;br /&gt;5 -PostgreSQL: 356&lt;br /&gt;6 - Firebird (busca por "Firebird SQL"): 171&lt;br /&gt;7 - ACCESS (busca por "ACCESS SQL"): 50&lt;br /&gt;8 - SQLite: 22&lt;br /&gt;9 - ADABAS: 5&lt;br /&gt;10 - HSQLDB: 0&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;O que podemos fazer a respeito?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bom, creio que podemos influir positivamente quanto a esta questão:&lt;br /&gt;&lt;br /&gt;- Assistir a vídeos de PostgreSQL no Youtube, dando feedback aos seus criadores, através de comentários e da colocação das estrelas, indicando os melhores. Esta ação permite que se possa estimular a produção de melhores vídeos e o reconhecimento dos autores.&lt;br /&gt;- Postar novos fragmentos de palestras e de cursos com conteúdo novo e diversificados. Muitos eventos de Software Livre, de Banco de Dados em Geral e de PostgreSQL são gravados e poderia ser feita seleção e publicação de parte deste material.&lt;br /&gt;- Produzir novos vídeos voltados para a internet. Podem ser pequenos, podem ser focados em temas específicos, indo do básico ao avançado&lt;span style="font-weight: bold;"&gt;. &lt;/span&gt;É a melhor forma de aprender a fazer mais e melhor.&lt;br /&gt;&lt;br /&gt;Quem se habilita?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Este é um problema realmente grave? &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Acredito que não,  mas que é um ponto que pode ser melhor trabalhado pela comunidade do PostgreSQL.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-2675530211868492096?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/2675530211868492096/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=2675530211868492096' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2675530211868492096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2675530211868492096'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/07/postgresql-presena-fraca-no-youtube.html' title='PostgreSQL: Presença Fraca no Youtube'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-9042693372067393482</id><published>2008-06-23T15:17:00.003-03:00</published><updated>2008-06-23T15:40:45.734-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Limitações'/><title type='text'>Limitações: Configuração de Case Sensitivity and Accent Sensitivity</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;A partir de hoje colocarei à medida que forem surgindo, limitações que encontro no PostgreSQL. A primeira limitação a ser mencionada é a falta de uma configuração para &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Case Sensitivity&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; e &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Accent Sensitivity&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; no SGBD.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Case Sensitivity&lt;/span&gt; e &lt;span style="font-style: italic;"&gt;Accent Sensitivity&lt;/span&gt; são características particularmente desejáveis nos bancos de dados atuais. A não existência de configuração para o armazenamento e/ou recuperação de dados com base nestas características é uma lacuna a ser preenchida neste banco de dados. Atualmente não há este recurso e as buscas de dados levando em conta ou não maiúsculas e minúsculas exigem alterações nas aplicações (com UPPER, LOWER, LIKE e ILIKE). &lt;br /&gt;&lt;br /&gt;Uma consulta com &lt;span style="font-style: italic;"&gt;Case Sensitivity&lt;/span&gt; (sensível ao caso) retorna valores levando em consideração se os caracteres buscados estão em maiúsculas ou minúsculas. Desta forma, a busca pelo valor 'CLA' retorna resultados diferentes da busca por 'Cla'. O não uso de sensitividade nas buscas de caracteres é chamado de &lt;span style="font-style: italic;"&gt;Case Insensitivity&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Uma consulta com &lt;span style="font-style: italic;"&gt;Accent Sensitivity&lt;/span&gt; (sensível ao acento) retorna valores levando em consideração se os caracteres buscados estão em maiúsculas ou minúsculas. Desta forma, a busca pelo valor 'CLA' retorna resultados diferentes da busca por 'Cla'. O não uso de sensitividade nas buscas de caracteres acentuados é chamado de &lt;span style="font-style: italic;"&gt;Accent Insensitivity&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Proposta: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;- A implementação de tal característica como configuração poderia ser feita para o banco todo, por tablespace, tabela ou visão, facilitando a implementação e evitando alterações nas aplicações mais complexas que necessitam destas funcionalidades.&lt;br /&gt;&lt;br /&gt;- Poderia ser feita via comando SET e na criação de objetos do banco, como na de tabelas, indicando que colunas são SENSITIVE e INSENSITIVE.&lt;br /&gt;&lt;br /&gt;- O padrão deve ser INSENSITIVE por questões de desempenho.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ressalvas: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;- Novas propostas para esta funcionalidade são bem vindas e podem ser colocadas no comentário deste post.&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-9042693372067393482?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/9042693372067393482/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=9042693372067393482' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/9042693372067393482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/9042693372067393482'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/06/limitaes-configurao-de-case-sensitivity.html' title='Limitações: Configuração de Case Sensitivity and Accent Sensitivity'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-1335450226001991238</id><published>2008-06-11T08:39:00.002-03:00</published><updated>2008-06-11T08:52:14.090-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Algoritmo'/><category scheme='http://www.blogger.com/atom/ns#' term='PGSQL'/><title type='text'>Formatação de CPF - Uma função simples</title><content type='html'>O CPF, número do Cadastro de Pessoa Física, apresenta o formato NNN.NNN.NNN-DD, onde N é número do CPF e D é dígito verificador. Uma vez que o mesmo é bastante utilizado, sua &lt;a href="http://postgresqlbr.blogspot.com/2008/06/validao-de-cpf-com-pl-pgsql.html"&gt;validação&lt;/a&gt; e apresentação são opções que podem ser implementadas dentro do banco de dados , com reuso do mesmo código para uso em vários sistemas.&lt;br /&gt;&lt;br /&gt;Neste post vamos fazer uma função simplificada para formatação e apresentação de CPF.&lt;br /&gt;&lt;br /&gt;A consulta abaixo faz a formatação de um CPF. Apresenta a desvantagem de se ter de repetir várias vezes o valor do CPF a ser apresentado.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SELECT substring('12345678912' FROM 1 FOR 3) || '.' || substring('12345678912' FROM 4 FOR 3) || '.' || substring('12345678912' FROM 7 FOR 3) || '-' || substring('12345678912' FROM 10 FOR 2);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O uso de uma função aumenta a simplicidade e facilita o reuso:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CREATE OR REPLACE FUNCTION CPF_formatar(par_cpf varchar(11)) RETURNS varchar(14) AS $$&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- ROTINA DE FORMATAÇÃO DE CPF&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- Código PL/ PGSQL: Cláudio Leopoldino - http://postgresqlbr.blogspot.com/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- Retorna o CPF formatado no formato NNN.NNN.NNN-DD, onde N é número do CPF e D é dígito verificador&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- em caso de erro retorna 'ERRO'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    IF char_length(par_cpf) != 11 THEN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        RAISE NOTICE 'Formato inválido: %',$1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        RETURN 'ERRO';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    END IF;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    RETURN substring(par_cpf FROM 1 FOR 3) || '.' || substring(par_cpf FROM 4 FOR 3) || '.' || substring(par_cpf FROM 7 FOR 3) || '-' || substring(par_cpf FROM 10 FOR 2);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;END;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$$ LANGUAGE PLPGSQL;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SELECT CPF_formatar('12345678912');&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-1335450226001991238?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/1335450226001991238/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=1335450226001991238' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/1335450226001991238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/1335450226001991238'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/06/formatao-de-cpf-uma-funo-simples.html' title='Formatação de CPF - Uma função simples'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-2855521485586088268</id><published>2008-06-08T14:05:00.004-03:00</published><updated>2008-06-08T14:20:36.941-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Algoritmo'/><title type='text'>Validação de CPF com Pl/ PgSQL</title><content type='html'>A partir de hoje passamos a divulgar algoritmos de funções e consultas que sejam de utilidade pública. A validação de CPF com Pl/ PgSQL foi escolhida em primeiro lugar por ser um algoritmo simples mas bastante útil (além disto, procurei em vários sites e não encontrei um exemplo em PL/ PGSQL).&lt;br /&gt;&lt;br /&gt;O CPF é utilizado por muitos sistemas brasileiros como identificação dos indivíduos.  Validar o CPF é  fazer a verificação dos dois últimos dígitos que são gerados a partir dos nove primeiros. O código abaixo foi uma tradução mais ou menos literal do código em javascript &lt;a href="http://webmasters.neting.com/msg07743.html"&gt;deste site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Talvez possa ser feita otimização ou melhoria neste algoritmo, mas a idéia é que vocês o melhorem e atualizem neste site. Estejam à vontade para utilizar e compartilhar este código.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CREATE OR REPLACE FUNCTION CPF_Validar(par_cpf varchar(11)) RETURNS integer AS $$&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- ROTINA DE VALIDAÇÃO DE CPF&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- Conversão para o PL/ PGSQL: Cláudio Leopoldino - http://postgresqlbr.blogspot.com/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- Algoritmo original: http://webmasters.neting.com/msg07743.html&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- Retorna 1 para CPF correto.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DECLARE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    x real;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    y real; --Variável temporária&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    soma integer;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    dig1 integer; --Primeiro dígito do CPF&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    dig2 integer; --Segundo dígito do CPF&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    len integer; -- Tamanho do CPF&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    contloop integer; --Contador para loop&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    val_par_cpf varchar(11); --Valor do parâmetro&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    -- Teste do tamanho da string de entrada&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    IF char_length(par_cpf) = 11 THEN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    ELSE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        RAISE NOTICE 'Formato inválido: %',$1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        RETURN 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    END IF;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    -- Inicialização&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    x := 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    soma := 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    dig1 := 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    dig2 := 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    contloop := 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    val_par_cpf := $1; --Atribuição do parâmetro a uma variável interna&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    len := char_length(val_par_cpf);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    x := len -1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    --Loop de multiplicação - dígito 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    contloop :=1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    WHILE contloop &lt;= (len -2) LOOP&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        y := CAST(substring(val_par_cpf  from contloop for 1) AS NUMERIC);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        soma := soma + ( y * x);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        x := x - 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        contloop := contloop +1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        END LOOP;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    dig1 := 11 - CAST((soma % 11) AS INTEGER);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    if (dig1 = 10) THEN dig1 :=0 ; END IF;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    if (dig1 = 11) THEN dig1 :=0 ; END IF;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        -- Dígito 2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    x := 11; soma :=0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    contloop :=1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    WHILE contloop &lt;= (len -1) LOOP&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        soma := soma + CAST((substring(val_par_cpf FROM contloop FOR 1)) AS REAL) * x;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        x := x - 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        contloop := contloop +1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    END LOOP;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    dig2 := 11 - CAST ((soma % 11) AS INTEGER);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    IF (dig2 = 10) THEN dig2 := 0; END IF;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    IF (dig2 = 11) THEN dig2 := 0; END IF;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    --Teste do CPF&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    IF ((dig1 || '' || dig2) = substring(val_par_cpf FROM len-1 FOR 2)) THEN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;         RETURN 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    ELSE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;         RAISE NOTICE 'DV do CPF Inválido: %',$1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;         RETURN 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    END IF;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;END;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$$ LANGUAGE PLPGSQL;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-2855521485586088268?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/2855521485586088268/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=2855521485586088268' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2855521485586088268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/2855521485586088268'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/06/validao-de-cpf-com-pl-pgsql.html' title='Validação de CPF com Pl/ PgSQL'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-1127749999810121162</id><published>2008-06-02T08:23:00.004-03:00</published><updated>2008-06-06T10:47:58.762-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notícias'/><title type='text'>PGCon 2008: Seja um palestrante!</title><content type='html'>Uma das melhores formas de colaborar com a comunidade de software livre é compartilhar os conhecimentos. A PGCon 2008 oficialmente divulgou hoje a chamada de palestras e tutoriais.&lt;br /&gt;&lt;br /&gt;A PGCon é a maior convenção brasileira, e possivelmente latino-americana de PostgreSQL. O site da edição de 2008 que ocorrerá dias 26 e 27 de Setembro de 2008 no Centro de Convenções da Unicamp em Campinas, SP, já está no ar &lt;a href="http://pgcon.postgresql.org.br/"&gt;aqui&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Esta é uma arena aberta àqueles que têm o espírito de compartilhamento e conteúdo para divulgar. Não perca esta oportunidade!&lt;br /&gt;&lt;br /&gt;===================================================&lt;br /&gt;Comunicado Oficial:&lt;br /&gt;===================================================&lt;br /&gt;&lt;br /&gt;A Comunidade Brasileira de PostgreSQL tem o prazer de convida-lo para&lt;br /&gt;participar do PGCon Brasil 2008[1]. Após a realização do PGCon Brasil&lt;br /&gt;2007[2], estamos novamente convidando a comunidade brasileira a enviar&lt;br /&gt;suas propostas de trabalho para a segunda edição deste evento. O PGCon&lt;br /&gt;Brasil 2008 será realizado nos dias 26 e 27 de setembro de 2008 na&lt;br /&gt;UNICAMP[3] (Campinas-SP).&lt;br /&gt;&lt;br /&gt;* Instruções:&lt;br /&gt;    - As palestras terão duração de 50 minutos, incluindo o tempo&lt;br /&gt;para as perguntas. Haverá também a escolha de apenas um tutorial&lt;br /&gt;que poderá ter até 120 minutos de duração.&lt;br /&gt;    - Qualquer palestrante pode enviar mais de uma proposta;&lt;br /&gt;    - O PGCon Brasil não se responsabiliza pelos gastos&lt;br /&gt;com deslocamento, hospedagem e alimentação dos palestrantes;&lt;br /&gt;    - Todas as propostas deverão ser enviadas até 22/06/2008 em&lt;br /&gt;formato texto para o e-mail; "&lt;a ymailto="mailto:pgcon@postgresql.org.br" href="http://br.mc525.mail.yahoo.com/mc/compose?to=pgcon@postgresql.org.br"&gt;pgcon@postgresql.org.br&lt;/a&gt;" contendo o&lt;br /&gt;seguinte formulário:&lt;br /&gt;&lt;br /&gt;* Formulário:&lt;br /&gt;      o Nome completo&lt;br /&gt;      o E-mail&lt;br /&gt;      o Telefones de contato&lt;br /&gt;      o Endereço completo&lt;br /&gt;      o Local de onde você virá (UF / Cidade)&lt;br /&gt;      o Mini currículo (até 500 caracteres)&lt;br /&gt;      o Título&lt;br /&gt;      o Tipo (palestra e/ou tutorial)&lt;br /&gt;      o Nível (iniciante, intermediário ou avançado)&lt;br /&gt;      o Resumo da palestra (até 500 caracteres)&lt;br /&gt;      o Descrição completa da palestra (até 3000 caracteres)&lt;br /&gt;&lt;br /&gt;* Calendário:&lt;br /&gt;      - 02/06/2008 - Publicação da chamada de trabalhos;&lt;br /&gt;      - 22/06/2008 - Última data para envio de propostas;&lt;br /&gt;      - 11/07/2008 - Última data para seleção de palestras e envio&lt;br /&gt;dos resultados aos palestrantes;&lt;br /&gt;      - 18/07/2008 - Última data para confirmação das palestras&lt;br /&gt;selecionadas e publicação do resultado;&lt;br /&gt;      - 15/08/2008 - Última data para envio do rascunho das apresentações;&lt;br /&gt;      - 24/09/2008 - Última data para envio da versão final das apresentações;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-1127749999810121162?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/1127749999810121162/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=1127749999810121162' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/1127749999810121162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/1127749999810121162'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/06/pgcon-2008-seja-um-palestrante.html' title='PGCon 2008: Seja um palestrante!'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3371915898459901668.post-5102002658321886870</id><published>2008-05-29T09:18:00.007-03:00</published><updated>2008-06-06T10:46:55.667-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='PGSQL'/><title type='text'>Uso de SET em Funções Pl/PgSQL</title><content type='html'>Na versão 8.3 do PostgreSQL foi implementado um recurso interessante, que permite a parametrização da execução de uma função utilizando o comando SET no momento da sua criação. Desta forma, a configuração é alterada apenas durante a sua execução, retornando aos valores prévios após o seu encerramento.&lt;br /&gt;&lt;br /&gt;Valores de tablespace padrão (default_tablespace), encoding do cliente (client_encoding) entre outros são definidos de forma explícita, de modo que se force o comportamento esperado da função não importando que programa faça a sua chamada de execução.&lt;br /&gt;&lt;br /&gt;Existe também a opção de utilização da cláusula FROM CURRENT para fazer com que a alteração de configuração seja mantida após a execução da função.&lt;br /&gt;&lt;br /&gt;Nem todos os parâmetros de execução podem ser alterados com o comando SET dentro de uma função. Os erros são revelados no momento de criação da função.&lt;br /&gt;&lt;br /&gt;O comando &lt;a href="http://postgresqlbr.blogspot.com/2007/08/o-comando-show.html"&gt;SHOW&lt;/a&gt; mostra a lista de parâmetros e seus valores correntes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Criação de Função com Parâmetros de Configuração&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O código abaixo mostra a criação de uma função que atualiza a tabela salário. Após o corpo da função são definidos os valores dos itens de configuração array_nulls, default_tablespace, commit_delay e client_encoding.&lt;br /&gt;&lt;br /&gt;CREATE TABLE SALARIO (cod integer PRIMARY KEY, provento real);&lt;br /&gt;INSERT INTO SALARIO VALUES (1, 1000.00);&lt;br /&gt;INSERT INTO SALARIO VALUES (2, 100.00);&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE FUNCTION salario_aumento() RETURNS BOOLEAN AS $&lt;br /&gt;BEGIN&lt;br /&gt; UPDATE SALARIO SET provento = provento * 1.1;&lt;br /&gt; RETURN true;&lt;br /&gt;END;&lt;br /&gt;$  LANGUAGE plpgsql&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;    SET array_nulls  = OFF&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;    SET default_tablespace = 'pg_default'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;    SET commit_delay TO 10&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;    SET client_encoding TO UNICODE&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mantendo Alterações na Configuração&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O código abaixo mostra a criação de uma função na qual é alterado e mantido o valor do client_encoding. A cláusula FROM CURRENT indica que parâmetro terá o valor de configuração que foi alterado mantido.&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE FUNCTION salario_parametros() RETURNS BOOLEAN AS $&lt;br /&gt;BEGIN&lt;br /&gt; UPDATE SALARIO SET provento = provento * 1.1;&lt;br /&gt;     RETURN true;&lt;br /&gt;END;&lt;br /&gt;$  LANGUAGE plpgsql&lt;br /&gt; SET client_encoding TO UNICODE&lt;br /&gt; SET client_encoding &lt;span style="font-style: italic; font-weight: bold;"&gt;FROM CURRENT&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ressalva no Uso de SET em Funções&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Alguns dos itens de configuração não são alteráveis pelo comando SET dentro de uma função. Neste caso, será retornado erro no ato da criação da função. No exemplo abaixo, tanto o log_checkpoints quanto o transaction_isolation não puderam ser alterados no escopo de uma função.&lt;br /&gt;&lt;br /&gt;-- Não funcionaram&lt;br /&gt;CREATE OR REPLACE FUNCTION salario_parametros_teste() RETURNS BOOLEAN AS $&lt;br /&gt;BEGIN&lt;br /&gt; UPDATE SALARIO SET provento = provento * 1.1;&lt;br /&gt;     RETURN true;&lt;br /&gt;END;&lt;br /&gt;$  LANGUAGE plpgsql&lt;br /&gt; SET log_checkpoints = ON&lt;br /&gt; SET transaction_isolation = SERIALIZABLE;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;ERROR:  parameter "log_checkpoints" cannot be changed now&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;********** Error **********&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;ERROR: parameter "log_checkpoints" cannot be changed now&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;SQL state: 55P02&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Meu Blog de PostgreSQL - http://postgresqlbr.blogspot.com/
- Cláudio Bezerra Leopoldino&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3371915898459901668-5102002658321886870?l=postgresqlbr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://postgresqlbr.blogspot.com/feeds/5102002658321886870/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3371915898459901668&amp;postID=5102002658321886870' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5102002658321886870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3371915898459901668/posts/default/5102002658321886870'/><link rel='alternate' type='text/html' href='http://postgresqlbr.blogspot.com/2008/05/uso-de-set-em-funes-plpgsql.html' title='Uso de SET em Funções Pl/PgSQL'/><author><name>cbleopoldino</name><uri>http://www.blogger.com/profile/16676839129160419931</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
