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

<channel>
	<title>Jota Comm</title>
	<atom:link href="http://jotacomm.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jotacomm.wordpress.com</link>
	<description>SQL and Linux</description>
	<lastBuildDate>Sat, 26 Sep 2009 14:43:25 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='jotacomm.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/51ecaaca138447eb9f5fe22a9937fe0d?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Jota Comm</title>
		<link>http://jotacomm.wordpress.com</link>
	</image>
			<item>
		<title>PGCon 2009 &#8211; Inscrições abertas</title>
		<link>http://jotacomm.wordpress.com/2009/09/26/pgcon-2009-inscricoes-abertas/</link>
		<comments>http://jotacomm.wordpress.com/2009/09/26/pgcon-2009-inscricoes-abertas/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 14:24:12 +0000</pubDate>
		<dc:creator>jotacomm</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[PGCon]]></category>

		<guid isPermaLink="false">http://jotacomm.wordpress.com/?p=117</guid>
		<description><![CDATA[Estão abertas as inscrições para o PGCon 2009.
Não perca tempo e faça já sua inscrição e aproveite o maior de todos os eventos sobre PostgreSQL. Clique  aqui  e confira:
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=117&subd=jotacomm&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Estão abertas as inscrições para o PGCon 2009.</p>
<p>Não perca tempo e faça já sua inscrição e aproveite o maior de todos os eventos sobre PostgreSQL. Clique <a href="http://pgcon.postgresql.org.br/2009/inscr/"> aqui </a> e confira:</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jotacomm.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jotacomm.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jotacomm.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jotacomm.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jotacomm.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jotacomm.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jotacomm.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jotacomm.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jotacomm.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jotacomm.wordpress.com/117/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=117&subd=jotacomm&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jotacomm.wordpress.com/2009/09/26/pgcon-2009-inscricoes-abertas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfb239ee298072577ce037dc7ee7bfc0?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">jotacomm</media:title>
		</media:content>
	</item>
		<item>
		<title>Usando o DBLink para interligar dois bancos PostgreSQL</title>
		<link>http://jotacomm.wordpress.com/2009/08/16/usando-o-dblink-para-interligar-dois-bancos-postgresql/</link>
		<comments>http://jotacomm.wordpress.com/2009/08/16/usando-o-dblink-para-interligar-dois-bancos-postgresql/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 18:56:23 +0000</pubDate>
		<dc:creator>jotacomm</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[comunicando bancos PostgreSQL distintos]]></category>
		<category><![CDATA[dblink]]></category>

		<guid isPermaLink="false">http://jotacomm.wordpress.com/?p=100</guid>
		<description><![CDATA[Pessoal,
Hoje vou apresentar como é possível trocar informações entre bancos de dados PostgreSQL. Apresentarei como isso é possível através do uso do DBLink.
O primeiro passo é instalar o DBLink no banco. Aqui vou considerar que a instalação do PostgreSQL foi realizada de forma compilada e para isso será necessário fazer uso dos arquivos da instalação. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=100&subd=jotacomm&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Pessoal,</p>
<p>Hoje vou apresentar como é possível trocar informações entre bancos de dados PostgreSQL. Apresentarei como isso é possível através do uso do DBLink.</p>
<p>O primeiro passo é instalar o DBLink no banco. Aqui vou considerar que a instalação do PostgreSQL foi realizada de forma compilada e para isso será necessário fazer uso dos arquivos da instalação. Dentro do diretório existe um diretório denominado <strong>contrib</strong> e dentro deste diretório existe um subdiretório chamado <strong>dblink</strong>. Para instalar o dblink é necessário realizar a compilação e posteriormente adiciona-lo ao banco desejado.</p>
<p>Para compilar é necessário executar o seguinte comando:</p>
<p><strong>make</strong></p>
<p><strong>make install</strong></p>
<p>Após a execução dos comandos acima será gerado um arquivo chamado <strong>dblink.sql</strong>. Este arquivo deve ser carregado (importado) no banco desejado. Para demonstrar o seu uso trabalharei com os bancos: banco01 e banco02.</p>
<p>O banco banco01 possui um tabela chamada tabela01 e o banco02 possui uma tabela chamada tabela02. Cada tabela possui um atributo código do tipo inteiro e ambas as tabelas contém 10 registros.</p>
<p>Carregando o arquivo dblink.sql no banco01.</p>
<p><strong>psql banco01 -f dblink.sql</strong></p>
<p>Com o dblink carregado no banco01, o próximo passo é realizar a conexão entre o banco01 e o banco02.</p>
<p>No exemplo, será considerado que estando conectado no banco01 será requisitada uma conexão com o banco02 para ai sim possibilitar a troca de informações entre os dois bancos de dados.</p>
<p>Então vamos a prática:</p>
<p>banco01=# <strong>SELECT dblink_connect(&#8216;conexao&#8217;,'host=localhost port=9999 user=postgres dbname=banco02&#8242;);</strong><br />
dblink_connect<br />
&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
OK<br />
(1 row)</p>
<p>Alguns parâmetros são informados. O primeiro é um nome para a conexão, e o restante parâmetros normais de uma conexão: hostname, porta, usuário, senha (opcional) e o nome do banco. Como para este exemplo a autenticação esta usando o método <strong>trust,</strong> o parâmetro password foi omitido.</p>
<p>Com a conexão OK agora é só realizar uma operação qualquer.</p>
<p>Por exemplo, um join entre a tabela01 que pertence ao banco01 e a tabela02 que pertence ao banco02.</p>
<p>banco01=# <strong>SELECT tab01.codigo,tab02.codigo FROM tabela01 tab01 INNER JOIN (SELECT * FROM dblink(&#8216;conexao&#8217;,'SELECT codigo FROM tabela02&#8242;) AS resultado(codigo integer)) tab02 ON tab01.codigo=tab02.codigo;</strong></p>
<p>Um outro exemplo pode ser feito com uma operação de escrita (INSERT, UPDATE OU DELETE).</p>
<p>A partir do banco01 fazendo uma chamada de inserção na tabela02 que está no banco02.</p>
<p>banco01=# <strong>SELECT dblink_exec(&#8216;conexao&#8217;,'INSERT INTO tabela02 VALUES (generate_series(11,20))&#8217;);</strong><br />
dblink_exec<br />
&#8212;&#8212;&#8212;&#8212;-<br />
INSERT 0 10<br />
(1 row)</p>
<p>Conferindo:</p>
<p>banco01=# <strong>SELECT * FROM dblink(&#8216;conexao&#8217;,'SELECT codigo FROM tabela02&#8242;) AS resultado(codigo integer);</strong><br />
codigo<br />
&#8212;&#8212;&#8211;<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
10<br />
11<br />
12<br />
13<br />
14<br />
15<br />
16<br />
17<br />
18<br />
19<br />
20<br />
(20 rows)</p>
<p>Para operações de UPDATE e DELETE o procedimento transcorre da mesma maneira do que do comando INSERT.</p>
<p>Por fim, para encerrar a conexão é necessário executar a seguinte função:</p>
<p>banco01=# <strong>SELECT dblink_disconnect(&#8216;conexao&#8217;);</strong><br />
dblink_disconnect<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
OK<br />
(1 row)</p>
<p>Espero que a dica seja útil. Até uma próxima oportunidade <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Abraços</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jotacomm.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jotacomm.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jotacomm.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jotacomm.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jotacomm.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jotacomm.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jotacomm.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jotacomm.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jotacomm.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jotacomm.wordpress.com/100/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=100&subd=jotacomm&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jotacomm.wordpress.com/2009/08/16/usando-o-dblink-para-interligar-dois-bancos-postgresql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfb239ee298072577ce037dc7ee7bfc0?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">jotacomm</media:title>
		</media:content>
	</item>
		<item>
		<title>PostgreSQL 8.4 &#8211; Agora com GRANT/REVOKE por coluna</title>
		<link>http://jotacomm.wordpress.com/2009/08/15/postgresql-8-4-agora-com-grantrevoke-por-coluna/</link>
		<comments>http://jotacomm.wordpress.com/2009/08/15/postgresql-8-4-agora-com-grantrevoke-por-coluna/#comments</comments>
		<pubDate>Sat, 15 Aug 2009 19:02:21 +0000</pubDate>
		<dc:creator>jotacomm</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[GRANT]]></category>
		<category><![CDATA[Permissões de acesso]]></category>
		<category><![CDATA[PostgreSQL 8.4]]></category>
		<category><![CDATA[Privilégio por coluna]]></category>
		<category><![CDATA[REVOKE]]></category>

		<guid isPermaLink="false">http://jotacomm.wordpress.com/?p=94</guid>
		<description><![CDATA[Olá, pessoal
Após um período de inatividade estou voltando com força total e neste retorno aproveito para falar de uma das funcionalidades que entraram no core do PostgreSQL na versão 8.4.
Alguns bancos de dados como o Oracle já possuiam esta característica e o PostgreSQL ainda não, porém a partir da versão 8.4 é possível conceder e [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=94&subd=jotacomm&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Olá, pessoal</p>
<p>Após um período de inatividade estou voltando com força total e neste retorno aproveito para falar de uma das funcionalidades que entraram no core do PostgreSQL na versão 8.4.</p>
<p>Alguns bancos de dados como o Oracle já possuiam esta característica e o PostgreSQL ainda não, porém a partir da versão 8.4 é possível conceder e retirar privilégios a colunas específicas de uma tabela.</p>
<p>Segue um exemplo bem simples:</p>
<p>Criação de um banco de dados para o exemplo.</p>
<p>postgres=# CREATE DATABASE exemplo_grant_revoke;</p>
<p>Após criado o banco é realizada uma conexão a ele.</p>
<p>postgres=# \c exemplo_grant_revoke<br />
psql (8.4.0)<br />
You are now connected to database &#8220;exemplo_grant_revoke&#8221;.</p>
<p>Criação de uma tabela para exemplificar a funcionalidade.</p>
<p>exemplo_grant_revoke=# CREATE TABLE tabela01(codigo int PRIMARY KEY,nome varchar(30));<br />
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index &#8220;tabela01_pkey&#8221; for table &#8220;tabela01&#8243;<br />
CREATE TABLE</p>
<p>Inserção de dois registros na tabela.</p>
<p>exemplo_grant_revoke=# INSERT INTO tabela01 VALUES (1,&#8217;Jota.Comm&#8217;),(2,&#8217;PostgreSQL&#8217;);<br />
INSERT 0 2<br />
exemplo_grant_revoke=# SELECT * FROM tabela01;<br />
codigo |    nome<br />
&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;<br />
1 | Jota.Comm<br />
2 | PostgreSQL<br />
(2 rows)</p>
<p>Criação de um usuário para conceder e revocar privilégios.</p>
<p>exemplo_grant_revoke=# CREATE ROLE usuario_grant_revoke LOGIN;<br />
CREATE ROLE</p>
<p>Conexão ao banco de dados com o usuário criado.</p>
<p>exemplo_grant_revoke=# \c exemplo_grant_revoke usuario_grant_revoke<br />
psql (8.4.0)<br />
You are now connected to database &#8220;exemplo_grant_revoke&#8221; as user &#8220;usuario_grant_revoke&#8221;.</p>
<p>Realização uma operação de SELECT na tabela criada.</p>
<p>Neste caso ocorrerá um erro pois o usuário usuario_grant_revoke não tem permissão de acesso ao objeto.</p>
<p>exemplo_grant_revoke=&gt; SELECT * FROM tabela01;<br />
ERROR:  permission denied for relation tabela01</p>
<p>Verificando as permissões de acesso. Observa-se que o usuário usuario_grant_revoke não possui nenhuma permissão no objeto tabela01.</p>
<p>exemplo_grant_revoke=&gt; \z tabela01<br />
Access privileges<br />
Schema |   Name   | Type  | Access privileges | Column access privileges<br />
&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;-+&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
public | tabela01 | table |                   |<br />
(1 row)</p>
<p>Conexão com o superuser (postgres).</p>
<p>exemplo_grant_revoke=&gt; \c exemplo_grant_revoke postgres<br />
psql (8.4.0)<br />
You are now connected to database &#8220;exemplo_grant_revoke&#8221; as user &#8220;postgres&#8221;.</p>
<p>Concessão do privilégio de SELECT em todas as colunas da tabela.</p>
<p>exemplo_grant_revoke=# GRANT SELECT ON tabela01 TO usuario_grant_revoke;<br />
GRANT</p>
<p>Concessão do privilégio de UPDATE na coluna nome da tabela tabela01.</p>
<p>exemplo_grant_revoke=# GRANT UPDATE(nome) ON tabela01 TO usuario_grant_revoke;<br />
GRANT</p>
<p>Conexão ao banco com o usuário usuario_grant_revoke.</p>
<p>exemplo_grant_revoke=# \c exemplo_grant_revoke usuario_grant_revoke<br />
psql (8.4.0)<br />
You are now connected to database &#8220;exemplo_grant_revoke&#8221; as user &#8220;usuario_grant_revoke&#8221;.</p>
<p>Tentativa da operação de UPDATE sobre a coluna código da tabela tabela01. Um erro será exibido visto que o usuário não tem permissão de UPDATE na coluna código. O privilégio foi concedido apenas para a coluna nome.</p>
<p>exemplo_grant_revoke=&gt; UPDATE tabela01 SET codigo=10 WHERE codigo=1;<br />
ERROR:  permission denied for relation tabela01</p>
<p>Operação de UPDATE na coluna nome da tabela tabela01.</p>
<p>exemplo_grant_revoke=&gt; UPDATE tabela01 SET nome=&#8217;Jota&#8217; WHERE codigo=1;<br />
UPDATE 1</p>
<p>Operação de SELECT em toda a tabela tabela01.</p>
<p>exemplo_grant_revoke=&gt; SELECT * FROM tabela01;<br />
codigo |    nome<br />
&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;<br />
2 | PostgreSQL<br />
1 | Jota<br />
(2 rows)</p>
<p>Vefiricando as permissões do usuário usuario_grant_revoke na tabela tabela01.</p>
<p>exemplo_grant_revoke=&gt; \x<br />
Expanded display is on.<br />
exemplo_grant_revoke=&gt; \z tabela01<br />
Access privileges<br />
-[ RECORD 1 ]&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Schema                   | public<br />
Name                     | tabela01<br />
Type                     | table<br />
Access privileges        | postgres=arwdDxt/postgres<br />
: usuario_grant_revoke=r/postgres<br />
Column access privileges | nome:<br />
:   usuario_grant_revoke=w/postgres</p>
<p>O usuário usuario_grant_revoke possui privilégio de SELECT na tabela (usuario_grant_revoke=r/postgres) e possui privilégio de UPDATE na coluna nome (usuario_grant_revoke=w/postgres).</p>
<p>Conexão ao banco.</p>
<p>exemplo_grant_revoke=&gt; \c exemplo_grant_revoke postgres<br />
psql (8.4.0)<br />
You are now connected to database &#8220;exemplo_grant_revoke&#8221; as user &#8220;postgres&#8221;.</p>
<p>Remoção dos privilégios concedidos.</p>
<p>exemplo_grant_revoke=# REVOKE SELECT ON tabela01 FROM usuario_grant_revoke;<br />
REVOKE<br />
exemplo_grant_revoke=# REVOKE UPDATE(nome) ON tabela01 FROM usuario_grant_revoke;<br />
REVOKE</p>
<p>Conexão ao banco com o usuário usuario_grant_revoke.</p>
<p>exemplo_grant_revoke=# \c exemplo_grant_revoke usuario_grant_revoke<br />
psql (8.4.0)<br />
You are now connected to database &#8220;exemplo_grant_revoke&#8221; as user &#8220;usuario_grant_revoke&#8221;.</p>
<p>A partir de agora o usuario usuario_grant_revoke não possui mais nenhum privilégio na tabela tabela01.</p>
<p>exemplo_grant_revoke=&gt; SELECT * FROM tabela01;<br />
ERROR:  permission denied for relation tabela01</p>
<p>exemplo_grant_revoke=&gt; UPDATE tabela01 SET nome=&#8217;Jota.Comm&#8217; WHERE codigo=1;<br />
ERROR:  permission denied for relation tabela01</p>
<p>Verificando os privilégios.</p>
<p>exemplo_grant_revoke=&gt; \z tabela01<br />
Access privileges<br />
Schema |   Name   | Type  |     Access privileges     | Column access privileges<br />
&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;-+&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
public | tabela01 | table | postgres=arwdDxt/postgres |<br />
(1 row)</p>
<p>Espero que tenha sido claro e didático no exemplo. Até a próxima.</p>
<p>Abraços</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jotacomm.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jotacomm.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jotacomm.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jotacomm.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jotacomm.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jotacomm.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jotacomm.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jotacomm.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jotacomm.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jotacomm.wordpress.com/94/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=94&subd=jotacomm&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jotacomm.wordpress.com/2009/08/15/postgresql-8-4-agora-com-grantrevoke-por-coluna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfb239ee298072577ce037dc7ee7bfc0?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">jotacomm</media:title>
		</media:content>
	</item>
		<item>
		<title>PGCon 2009 &#8211; Grade oficial do evento</title>
		<link>http://jotacomm.wordpress.com/2009/08/11/pgcon-2009-grade-oficial-do-evento/</link>
		<comments>http://jotacomm.wordpress.com/2009/08/11/pgcon-2009-grade-oficial-do-evento/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 21:31:46 +0000</pubDate>
		<dc:creator>jotacomm</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PGCon]]></category>

		<guid isPermaLink="false">http://jotacomm.wordpress.com/?p=86</guid>
		<description><![CDATA[Maior evento sobre PostgreSQL da América Latina acontece em Campinas.
A Unicamp já se prepara para receber a “3ª Conferência Brasileira de PostgreSQL” ou simplesmente PGCon Brasil 2009.
Nos dias 23 e 24 de outubro, centenas de estudantes e profissionais de TI participarão do maior evento latino-americano sobre o mais poderoso sistema gerenciador de banco de dados [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=86&subd=jotacomm&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:left;"><strong>Maior evento sobre PostgreSQL da América Latina acontece em Campinas.</strong></p>
<p>A Unicamp já se prepara para receber a “3ª Conferência Brasileira de PostgreSQL” ou simplesmente PGCon Brasil 2009.</p>
<p>Nos dias 23 e 24 de outubro, centenas de estudantes e profissionais de TI participarão do maior evento latino-americano sobre o mais poderoso sistema gerenciador de banco de dados de código livre do mundo, o PostgreSQL.</p>
<p>A programação completa da Conferência já foi confirmada. O evento contará com palestras, tutoriais e os já consagrados Hacker Talks e Lightning Talks. Estarão presentes desenvolvedores nacionais do PostgreSQL como Euler Taveira e Francisco Figueiredo Jr, internacionais como Bruce Momjian, Magnus Hagander além de profissionais reconhecidos no Brasil como Fernando Ike, Roberto Mello, Leandro Dutra entre outros.</p>
<p style="text-align:left;">Na programação, estarão temas como as últimas novidades da versão 8.4 do PostgreSQL, técnicas de monitoramento, segurança, ajustes de desempenho e muito mais.</p>
<p style="text-align:left;">Mais informações sobre o evento, podem ser obtidas no site oficial em: <a href="http://pgcon.postgresql.org.br/2009/index.php" target="_blank">http://pgcon.postgresql.org.br/2009/index.php</a></p>
<p style="text-align:left;">Abraços</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jotacomm.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jotacomm.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jotacomm.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jotacomm.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jotacomm.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jotacomm.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jotacomm.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jotacomm.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jotacomm.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jotacomm.wordpress.com/86/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=86&subd=jotacomm&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jotacomm.wordpress.com/2009/08/11/pgcon-2009-grade-oficial-do-evento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfb239ee298072577ce037dc7ee7bfc0?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">jotacomm</media:title>
		</media:content>
	</item>
		<item>
		<title>Descobrindo a definição de chave primária (primary key) e chave estrangeira (foreign key)</title>
		<link>http://jotacomm.wordpress.com/2009/03/23/descobrindo-a-definicao-de-chave-primaria-primary-key-e-chave-estrangeira-foreign-key/</link>
		<comments>http://jotacomm.wordpress.com/2009/03/23/descobrindo-a-definicao-de-chave-primaria-primary-key-e-chave-estrangeira-foreign-key/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 00:44:04 +0000</pubDate>
		<dc:creator>jotacomm</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Foreign Key]]></category>
		<category><![CDATA[pg_class]]></category>
		<category><![CDATA[pg_constraint]]></category>
		<category><![CDATA[Primary Key]]></category>

		<guid isPermaLink="false">http://jotacomm.wordpress.com/?p=77</guid>
		<description><![CDATA[Olá, pessoal
Na última semana surgiu uma pergunta na lista pgbr-geral sobre como descobrir a definição das  restrições  (constraints) de chave primária (primary key)  e chave estrangeira (foreign key).  Então aproveito para escrever um pouquinho sobre o assunto.

Essa informação não é encontrada diretamente nas tabelas e visões do catálogo do PostgreSQL, mas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=77&subd=jotacomm&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Olá, pessoal</p>
<p>Na última semana surgiu uma pergunta na lista <span class="gI"><em>pgbr-geral</em> sobre como descobrir a definição das  restrições  (constraints) de chave primária (primary key)  e chave estrangeira (foreign key).  Então aproveito para escrever um pouquinho sobre o assunto.<br />
</span></p>
<p><span class="gI">Essa informação não é encontrada diretamente nas tabelas e visões do catálogo do PostgreSQL, mas sim através de uma função chamada pg_get_constraintdef(oid), onde o parâmetro oid é o oid da constraint e que pode ser encontrado na tabela pg_constraint. Por exemplo, existe uma visão chamada pg_indexes que mostra as definições dos índices, porém se pararmos para analisar esta consulta veremos que para apresentar a definição dos índices é utilizada uma função chamada pg_get_indexdef(oid) semelhante a função usada para extrair a definição das restrições (constraints).<br />
</span></p>
<p><span class="gI">Abaixo segue a consulta para identificar o nome da tabela e suas definições de chave primária (primary key) e chave estrangeira (foreing key). Para encontrar essa informação é necessário o uso das tabelas de sistema pg_class e pg_constraint. Coloquei também a tabela pg_namespace que é onde são armazenados os esquemas existentes do PostgreSQL.<br />
</span></p>
<p>SELECT pg_class.relname AS nome_da_tabela,</p>
<p>pg_get_constraintdef(pg_constraint.oid) AS definicao_da_restricao</p>
<p>FROM pg_namespace JOIN pg_class ON pg_namespace.oid=pg_class.relnamespace</p>
<p>JOIN pg_constraint ON pg_class.oid=pg_constraint.conrelid</p>
<p>WHERE pg_namespace.nspname=&#8217;public&#8217;</p>
<p>AND pg_class.relkind=&#8217;r&#8217;</p>
<p>ORDER BY pg_class.relname;</p>
<p>O resultado desta consulta apresenta o nome da tabela e a sua respectiva definição de chave primária (primary key) e chave estrangeira (foreign key). Caso a tabela não possua chave primária e/ou chave estrangeira a mesma não será retornada por esta consulta. Neste caso seria necessário substituir o INNER JOIN por um LEFT OUTER JOIN. A palavra OUTER no LEFT OUTER JOIN é opcional.</p>
<p>E a sua implementação ficaria assim:</p>
<p>SELECT pg_class.relname AS nome_da_tabela,</p>
<p>pg_get_constraintdef(pg_constraint.oid) AS definicao_da_restricao</p>
<p>FROM pg_namespace JOIN pg_class ON pg_namespace.oid=pg_class.relnamespace</p>
<p>LEFT OUTER JOIN pg_constraint ON pg_class.oid=pg_constraint.conrelid</p>
<p>WHERE pg_namespace.nspname=&#8217;public&#8217;</p>
<p>AND pg_class.relkind=&#8217;r&#8217;</p>
<p>ORDER BY pg_class.relname;</p>
<p>Na cláusula <strong>WHERE</strong> existem duas restrições: <strong>pg_namespace.nspname=&#8217;public&#8217;</strong> restringe em qual esquema serão procurados os objetos, neste caso apenas no esquema public. Se for necessário procurar em mais de um esquema pode-se substituir a condição <strong>pg_namespace.nspname=&#8217;public&#8217;</strong> por <strong>pg_namespace.nspname IN (&#8216;public&#8217;, &#8216;outro_esquema&#8217;)</strong>. A condição <strong>pg_class.relkind=&#8217;r&#8217;</strong> restringe que só serão pesquisados os objetos do tipo tabela. Esta restrição é importante pois a tabela pg_class armazena outros objetos como: índices, seqüências, visões, tipos compostos e tabelas toast. Esta condição é necessária devido ao join com a tabela pg_namespace. Se essa junção for retirada não é necessária esta restrição.</p>
<p>Se for de interesse é possível mostrar o nome da restrição (constraint) através do atributo conname  que está armazenado na tabela pg_constraint.</p>
<p>Era isso. Fiquem a vontade para comentários.</p>
<p>Abraços</p>
<p><span class="gI"><br />
</span></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jotacomm.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jotacomm.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jotacomm.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jotacomm.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jotacomm.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jotacomm.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jotacomm.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jotacomm.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jotacomm.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jotacomm.wordpress.com/77/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=77&subd=jotacomm&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jotacomm.wordpress.com/2009/03/23/descobrindo-a-definicao-de-chave-primaria-primary-key-e-chave-estrangeira-foreign-key/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfb239ee298072577ce037dc7ee7bfc0?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">jotacomm</media:title>
		</media:content>
	</item>
		<item>
		<title>Problema com o PAM</title>
		<link>http://jotacomm.wordpress.com/2009/03/04/problema-com-o-pam/</link>
		<comments>http://jotacomm.wordpress.com/2009/03/04/problema-com-o-pam/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 00:03:17 +0000</pubDate>
		<dc:creator>jotacomm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PAM]]></category>

		<guid isPermaLink="false">http://jotacomm.wordpress.com/?p=63</guid>
		<description><![CDATA[Olá, pessoal
Estes dias me deparei com um problema um tanto curioso: Estava logado em um servidor com o usuário root e quando tentava fazer o seguinte comando: su postgres ou su para qualquer outro usuário era solicitada a senha para o usuário, o que de passagem é muito estranho, visto que logado como usuário root [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=63&subd=jotacomm&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Olá, pessoal</p>
<p>Estes dias me deparei com um problema um tanto curioso: Estava logado em um servidor com o usuário <strong>root</strong> e quando tentava fazer o seguinte comando: <strong>su postgres</strong> ou <strong>su</strong> para qualquer outro usuário era solicitada a senha para o usuário, o que de passagem é muito estranho, visto que logado como usuário <strong>root</strong> é possível assumir a identidade de qualquer outro usuário.</p>
<p>Quebrei um pouco a cabeça e nada da solução, foi então que resolvi consultar o Sr. Fernando Ike (Fike) e ele me disse que isso deveria ser problema do PAM, dito e feito. O problema é que a seguinte linha:</p>
<p><strong>auth sufficient pam_rootok.so</strong> do arquivo <strong>/etc/pam.d/su</strong> estava comentada. Foi descomentar a linha e já era possível assumir a identidade de qualquer usuário sem que a senha fosse solicitada.</p>
<p>Aproveito para agradecer o Fike pela ajuda <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Abraços</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jotacomm.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jotacomm.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jotacomm.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jotacomm.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jotacomm.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jotacomm.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jotacomm.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jotacomm.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jotacomm.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jotacomm.wordpress.com/63/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=63&subd=jotacomm&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jotacomm.wordpress.com/2009/03/04/problema-com-o-pam/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfb239ee298072577ce037dc7ee7bfc0?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">jotacomm</media:title>
		</media:content>
	</item>
		<item>
		<title>Monitorando o tamanho do banco de dados</title>
		<link>http://jotacomm.wordpress.com/2008/11/18/monitorando-o-tamanho-do-banco-de-dados/</link>
		<comments>http://jotacomm.wordpress.com/2008/11/18/monitorando-o-tamanho-do-banco-de-dados/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 01:33:21 +0000</pubDate>
		<dc:creator>jotacomm</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[pg_database]]></category>
		<category><![CDATA[pg_database_size]]></category>
		<category><![CDATA[pg_size_pretty]]></category>

		<guid isPermaLink="false">http://jotacomm.wordpress.com/?p=61</guid>
		<description><![CDATA[Olá, pessoal
Apresento aqui uma maneira de descobrir o tamanho de cada banco de dados de um servidor PostgreSQL. Para esse calcúlo são usadas as funções pg_database_size e pg_size_pretty.
SELECT pg_database.datname,
pg_size_pretty(pg_database_size(pg_database.datname))
FROM pg_database
ORDER BY pg_database_size(pg_database.datname) DESC,
pg_database.datname;
Fiquem a vontade para comentários.
[]s
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=61&subd=jotacomm&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Olá, pessoal</p>
<p>Apresento aqui uma maneira de descobrir o tamanho de cada banco de dados de um servidor PostgreSQL. Para esse calcúlo são usadas as funções pg_database_size e pg_size_pretty.</p>
<p>SELECT pg_database.datname,<br />
pg_size_pretty(pg_database_size(pg_database.datname))<br />
FROM pg_database<br />
ORDER BY pg_database_size(pg_database.datname) DESC,<br />
pg_database.datname;</p>
<p>Fiquem a vontade para comentários.</p>
<p>[]s</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jotacomm.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jotacomm.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jotacomm.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jotacomm.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jotacomm.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jotacomm.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jotacomm.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jotacomm.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jotacomm.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jotacomm.wordpress.com/61/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=61&subd=jotacomm&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jotacomm.wordpress.com/2008/11/18/monitorando-o-tamanho-do-banco-de-dados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfb239ee298072577ce037dc7ee7bfc0?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">jotacomm</media:title>
		</media:content>
	</item>
		<item>
		<title>Identificando índices duplicados</title>
		<link>http://jotacomm.wordpress.com/2008/11/18/identificando-indices-duplicados/</link>
		<comments>http://jotacomm.wordpress.com/2008/11/18/identificando-indices-duplicados/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 00:50:35 +0000</pubDate>
		<dc:creator>jotacomm</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Índices]]></category>
		<category><![CDATA[ORDER BY]]></category>

		<guid isPermaLink="false">http://jotacomm.wordpress.com/?p=54</guid>
		<description><![CDATA[Olá, pessoal
O assunto de hoje é sobre a identificação de índices duplicados. Um problema que tenho visto em alguns clientes que tenho trabalhado é a quantidade de índices duplicados que existem nas tabelas, então posto aqui uma maneira de indentificar estes índices. Junto a isso apresento uma maneira interessante do uso da claúsula ORDER BY.
SELECT [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=54&subd=jotacomm&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Olá, pessoal</p>
<p>O assunto de hoje é sobre a identificação de índices duplicados. Um problema que tenho visto em alguns clientes que tenho trabalhado é a quantidade de índices duplicados que existem nas tabelas, então posto aqui uma maneira de indentificar estes índices. Junto a isso apresento uma maneira interessante do uso da claúsula ORDER BY.</p>
<p>SELECT pg_stat_user_indexes.schemaname AS nome_do_esquema,<br />
pg_stat_user_indexes.relname AS nome_da_tabela,<br />
pg_attribute.attname AS nome_do_atributo,<br />
pg_stat_user_indexes.indexrelname AS nome_do_indice,<br />
CASE pg_index.indisprimary<br />
WHEN &#8216;t&#8217; THEN &#8216;Sim&#8217;<br />
ELSE &#8216;Nao&#8217;<br />
END AS indice_na_chave_primaria<br />
FROM pg_index JOIN pg_stat_user_indexes USING (indexrelid)<br />
JOIN<br />
(SELECT pg_index.indrelid,<br />
pg_index.indkey,<br />
count(*)<br />
FROM pg_index JOIN pg_stat_user_indexes USING (indexrelid)<br />
GROUP BY pg_index.indrelid,<br />
pg_index.indkey<br />
HAVING count(*)&gt;1) ind_dup ON pg_index.indrelid=ind_dup.indrelid<br />
AND pg_index.indkey=ind_dup.indkey<br />
JOIN pg_attribute ON pg_attribute.attrelid=ind_dup.indrelid<br />
AND pg_attribute.attnum=SOME(pg_index.indkey)<br />
ORDER BY pg_stat_user_indexes.schemaname,<br />
pg_stat_user_indexes.relname,<br />
pg_index.indisprimary=&#8217;t&#8217; DESC;</p>
<p>O SQL acima apresenta como resultado o nome do esquema que a tabela pertence, o nome da tabela, o atributo indexado, o nome do índice e se o índice está associado a uma chave primária.</p>
<p>Uma questão interessante que acabei descobrindo é poder fazer uma comparação na claúsula ORDER BY. No exemplo acima a ordenação é pelo nome do esquema, nome da tabela e pelo atributo pg_index.indisprimary=&#8217;t&#8217; que ordena primeiramente pelo índice que está associado a uma chave primária.</p>
<p>Eu sabia que era possível usar operadores na claúsula ORDER BY mas imaginava que só era possível usar a seguinte estrutura:</p>
<p>ORDER BY atributo USING &lt;; para ordenação crescente e  ORDER BY atributo USING &gt;; para ordenação decrescente.</p>
<p>Era isso. Fiquem a vontade para comentários.</p>
<p>[]s</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jotacomm.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jotacomm.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jotacomm.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jotacomm.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jotacomm.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jotacomm.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jotacomm.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jotacomm.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jotacomm.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jotacomm.wordpress.com/54/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=54&subd=jotacomm&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jotacomm.wordpress.com/2008/11/18/identificando-indices-duplicados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfb239ee298072577ce037dc7ee7bfc0?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">jotacomm</media:title>
		</media:content>
	</item>
		<item>
		<title>Comentários em objetos</title>
		<link>http://jotacomm.wordpress.com/2008/10/26/comentarios-em-objetos/</link>
		<comments>http://jotacomm.wordpress.com/2008/10/26/comentarios-em-objetos/#comments</comments>
		<pubDate>Sun, 26 Oct 2008 21:40:15 +0000</pubDate>
		<dc:creator>jotacomm</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[comentários em objetos]]></category>
		<category><![CDATA[COMMENT ON]]></category>

		<guid isPermaLink="false">http://jotacomm.wordpress.com/?p=47</guid>
		<description><![CDATA[Olá, pessoal
No PostgreSQL temos um recurso muito bacana e pelo que tenho visto muito pouco utilizado que é o comentário em objetos. A idéia é bem simples. É ser um comentário (descrição) do objeto. Um comentário pode ser adicionado em colunas de tabelas, tabelas, seqüências, esquemas, tablespaces, rules, funções, gatilhos (triggers) dentro outros.
Por exemplo: Supondo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=47&subd=jotacomm&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Olá, pessoal</p>
<p>No PostgreSQL temos um recurso muito bacana e pelo que tenho visto muito pouco utilizado que é o comentário em objetos. A idéia é bem simples. É ser um comentário (descrição) do objeto. Um comentário pode ser adicionado em colunas de tabelas, tabelas, seqüências, esquemas, tablespaces, rules, funções, gatilhos (triggers) dentro outros.</p>
<p>Por exemplo: Supondo a seguinte estrutura de tabela:</p>
<p>postgres=# \d funcionarios<br />
Table &#8220;public.funcionarios&#8221;<br />
Column       |          Type          | Modifiers<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8211;<br />
codigo_funcionario | integer                | not null<br />
nome               | character varying(50)  | not null<br />
salario            | numeric(10,2)          | not null<br />
auxiliar1          | character varying(100) |<br />
Indexes:<br />
&#8220;funcionarios_pkey&#8221; PRIMARY KEY, btree (codigo_funcionario)</p>
<p>Os campos codigo_funcionario, nome e salário são de fácil interpretação e o campo auxiliar1 o que ele representa na tabela? Ele pode ser por exemplo, um campo para informações adicionais do funcionário ou derrepente armazenar uma outra informação. Se por exemplo, o campo auxiliar1 tivesse um comentário seria muita mais rápido e fácil descobrir qual o objetivo deste campo e que informações ele armazena.</p>
<p>Na teoria é bonito mas como funciona na prática o comentário sobre objetos e qual comando eu devo utilizar para adicionar um comentário? E depois, como eu visualizo o comentário?</p>
<p>Para adicionar um comentário sobre um objeto faz-se uso do comando COMMENT ON.</p>
<p>Sintaxe completa:</p>
<p>COMMENT ON<br />
{<br />
TABLE object_name |<br />
COLUMN table_name.column_name |<br />
AGGREGATE agg_name (agg_type [, ...] ) |<br />
CAST (sourcetype AS targettype) |<br />
CONSTRAINT constraint_name ON table_name |<br />
CONVERSION object_name |<br />
DATABASE object_name |<br />
DOMAIN object_name |<br />
FUNCTION func_name ( [ [ argmode ] [ argname ] argtype [, ...] ] ) |<br />
INDEX object_name |<br />
LARGE OBJECT large_object_oid |<br />
OPERATOR op (leftoperand_type, rightoperand_type) |<br />
OPERATOR CLASS object_name USING index_method |<br />
OPERATOR FAMILY object_name USING index_method |<br />
[ PROCEDURAL ] LANGUAGE object_name |<br />
ROLE object_name |<br />
RULE rule_name ON table_name |<br />
SCHEMA object_name |<br />
SEQUENCE object_name |<br />
TABLESPACE object_name |<br />
TEXT SEARCH CONFIGURATION object_name |<br />
TEXT SEARCH DICTIONARY object_name |<br />
TEXT SEARCH PARSER object_name |<br />
TEXT SEARCH TEMPLATE object_name |<br />
TRIGGER trigger_name ON table_name |<br />
TYPE object_name |<br />
VIEW object_name<br />
} IS &#8216;text&#8217;</p>
<p>Exemplo: Adicionando um comentário a tabela de funcionários.</p>
<p>postgres=# COMMENT ON TABLE funcionarios IS &#8216;Tabela de Funcionários&#8217;;<br />
COMMENT</p>
<p>Pronto. Adicionamos um comentário a tabela de funcionários.</p>
<p>Para verificar o comentário sobre uma tabela utiliza-se o meta-comando \dd seguido do nome da tabela.</p>
<p>postgres=# \dd funcionarios<br />
Object descriptions<br />
Schema |     Name     | Object |      Description<br />
&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
public | funcionarios | table  | Tabela de Funcionários<br />
(1 row)</p>
<p>Pronto. Ai está a tabela e o seu respectivo comentário.</p>
<p>Exemplo: Adicionando comentário nas colunas da tabela.</p>
<p>postgres=# COMMENT ON COLUMN funcionarios.codigo_funcionario IS &#8216;Código do funcionário.&#8217;;<br />
COMMENT<br />
postgres=# COMMENT ON COLUMN funcionarios.nome IS &#8216;Nome do funcionário.&#8217;;<br />
COMMENT<br />
postgres=# COMMENT ON COLUMN funcionarios.salario IS &#8216;Salário do funcionário.&#8217;;<br />
COMMENT<br />
postgres=# COMMENT ON COLUMN funcionarios.auxiliar1 IS &#8216;Informações adicionais do funcionário.&#8217;; COMMENT</p>
<p>Feito. Os comentários sobre as colunas da tabela estão prontos. Para visualizar faz-se uso do meta-comando \d+ e o nome da tabela.</p>
<p>postgres=# \d+ funcionarios<br />
Table &#8220;public.funcionarios&#8221;<br />
Column       |          Type          | Modifiers |              Description<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
codigo_funcionario | integer                | not null  | Código do funcionário.<br />
nome               | character varying(50)  | not null  | Nome do funcionário.<br />
salario            | numeric(10,2)          | not null  | Salário do funcionário.<br />
auxiliar1          | character varying(100) |           | Informações adicionais do funcionário.<br />
Indexes:<br />
&#8220;funcionarios_pkey&#8221; PRIMARY KEY, btree (codigo_funcionario)<br />
Has OIDs: no</p>
<p>Rápido e fácil e tem-se um comentário sobre as colunas da tabela o que facilita a interpretação do que estas colunas estão representando.</p>
<p>Fiquem a vontade para comentários.</p>
<p>[]s</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jotacomm.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jotacomm.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jotacomm.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jotacomm.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jotacomm.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jotacomm.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jotacomm.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jotacomm.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jotacomm.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jotacomm.wordpress.com/47/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=47&subd=jotacomm&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jotacomm.wordpress.com/2008/10/26/comentarios-em-objetos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfb239ee298072577ce037dc7ee7bfc0?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">jotacomm</media:title>
		</media:content>
	</item>
		<item>
		<title>Removendo roles no PostgreSQL</title>
		<link>http://jotacomm.wordpress.com/2008/10/25/removendo-roles-no-postgresql/</link>
		<comments>http://jotacomm.wordpress.com/2008/10/25/removendo-roles-no-postgresql/#comments</comments>
		<pubDate>Sat, 25 Oct 2008 19:59:24 +0000</pubDate>
		<dc:creator>jotacomm</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[DROP OWNED]]></category>
		<category><![CDATA[DROP ROLE]]></category>
		<category><![CDATA[REASSIGN OWNED]]></category>
		<category><![CDATA[Roles]]></category>

		<guid isPermaLink="false">http://jotacomm.wordpress.com/?p=42</guid>
		<description><![CDATA[Olá, pessoal
Vou falar um pouco sobre a remoção de roles no PostgreSQL. Para remover um role conteiner ou login usamos o comando DROP ROLE.
Sintaxe completa: DROP ROLE [ IF EXISTS ] name [, ...].
Observação: A opção IF EXISTS está disponível a partir da versão 8.2 e é opcional.
Quando queremos remover uma role ou uma lista [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=42&subd=jotacomm&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:left;">Olá, pessoal</p>
<p style="text-align:left;">Vou falar um pouco sobre a remoção de roles no PostgreSQL. Para remover um role conteiner ou login usamos o comando DROP ROLE.</p>
<p style="text-align:left;">Sintaxe completa: DROP ROLE [ IF EXISTS ] name [, ...].</p>
<p style="text-align:left;">Observação: A opção IF EXISTS está disponível a partir da versão 8.2 e é opcional.</p>
<p style="text-align:left;">Quando queremos remover uma role ou uma lista de roles podemos fazer:</p>
<p style="text-align:left;">DROP ROLE IF EXISTS role1;</p>
<p style="text-align:left;">ou</p>
<p style="text-align:left;">DROP ROLE role1;</p>
<p style="text-align:left;">DROP ROLE IF EXISTS role1,role2,role3;</p>
<p style="text-align:left;">ou</p>
<p style="text-align:left;">DROP ROLE role1,role2,role3;</p>
<p style="text-align:left;">O IF EXISTS verifica se a role existe. Se sim, remove a role. Caso contrário apresenta uma mensagem informando que a role não existe. Sem essa verificação seria apresentada uma mensagem de erro.</p>
<p style="text-align:left;">Vamos a prática:</p>
<p style="text-align:left;">foo=# DROP ROLE jotacomm;<br />
DROP ROLE</p>
<p style="text-align:left;">Porém, em alguns casos pode ser gerado o seguinte erro:</p>
<p style="text-align:left;">DROP ROLE foo;</p>
<p style="text-align:left;">ERROR:  role &#8220;foo&#8221; cannot be dropped because some objects depend on it<br />
DETAIL:  owner of table tabela2<br />
owner of table tabela1</p>
<p style="text-align:left;">O erro apresentado acima indica que a role não pode ser excluída pois existem objetos que ela é dona (OWNER).</p>
<p style="text-align:left;">E como proceder nesta situação? Uma solução seria atribuir a propriedade do objeto para outra role. Por exemplo:</p>
<p style="text-align:left;">ALTER TABLE tabela1 OWNER TO bar;</p>
<p style="text-align:left;">ALTER TABLE tabela2 OWNER TO bar;</p>
<p style="text-align:left;">Depois da alteração é possível remover a role. No entanto, essa solução não é a mais adequada pelo fato de que se a role possuir vários objetos como: tabelas, seqüências, funções, esquemas dentre outros objetos este processo deve ser realizado para todos estes objetos.</p>
<p style="text-align:left;">Então podemos utilizar os comandos DROP OWNED ou REASSIGN OWNED. O DROP OWNED remove todos os objetos de propriedade de uma ou mais roles enquanto que o comando REASSIGN OWNED transfere a propriedade dos objetos de uma ou mais roles para uma outra role.</p>
<p style="text-align:left;">Os comandos DROP OWNED e REASSIGN OWNED estão disponíveis a partir da versão 8.2.</p>
<p style="text-align:left;">Sintaxe completa:</p>
<p style="text-align:left;">DROP OWNED BY name [, ...] [ CASCADE | RESTRICT ]</p>
<p style="text-align:left;">REASSIGN OWNED BY old_role [, ...] TO new_role</p>
<p style="text-align:left;">Dessa forma o processo fica mais fácil e rápido. Tá, mas como funciona isso na prática?</p>
<p style="text-align:left;">Exemplo do uso do DROP OWNED.</p>
<p style="text-align:left;">foo=# DROP OWNED BY foo;<br />
DROP OWNED</p>
<p style="text-align:left;">Como a execução do comando DROP OWNED todos os objetos da role foo foram deletados.</p>
<p style="text-align:left;">Então agora eu posso usar o DROP ROLE para remover a role.</p>
<p style="text-align:left;">foo=# DROP ROLE foo;<br />
DROP ROLE</p>
<p style="text-align:left;">Exemplo do uso do REASSIGN OWNED.</p>
<p style="text-align:left;">foo=# REASSIGN OWNED BY bar TO postgres;<br />
REASSIGN OWNED</p>
<p style="text-align:left;">Como a execução do comando REASSIGN OWNED todos os objetos de propriedade da role bar foram transferidos para a role postgres.</p>
<p style="text-align:left;">Então agora eu posso usar o DROP ROLE para remover a role.</p>
<p style="text-align:left;">foo=# DROP ROLE bar;<br />
DROP ROLE</p>
<p style="text-align:left;">
<p style="text-align:left;">Fiquem a vontade para comentários.</p>
<p style="text-align:left;">[]s</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jotacomm.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jotacomm.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jotacomm.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jotacomm.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jotacomm.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jotacomm.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jotacomm.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jotacomm.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jotacomm.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jotacomm.wordpress.com/42/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jotacomm.wordpress.com&blog=5266308&post=42&subd=jotacomm&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jotacomm.wordpress.com/2008/10/25/removendo-roles-no-postgresql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfb239ee298072577ce037dc7ee7bfc0?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">jotacomm</media:title>
		</media:content>
	</item>
	</channel>
</rss>