Em breve teremos novidades por aqui, pois comecarei um trabalho de traducao dos posts do blog http://www.depesz.com/ do amigo Hubert Depesz Lubaczewski, da Polonia.O blog do Hubert e bem ativo e possui inumeros posts interessantes e conversando com ele achamos valida a ideia de ter uma versao em PT-BR do mesmo.Logo teremos o primeiro post aqui... aguardem... Pessoal, este blog e seu conteudo ate o momento foram migrados para o octopress e estamos em novo endereco:http://fabriziomello.github.ioObrigado pela compreensao. Apartir da release 9.1 o PostgreSQL adicionou suporte a foreign tables, viabilizando assim uma forma simples de gerenciar fontes de dados externas dentro do PostgreSQL.Atraves dessa infraestrutura e possivel a implementacao dos FDW (Foreign Data Wrapper), que sao uma especie de driver para acessar uma fonte de dados externa. Ja existem diversos FDW implementados que permitem acessar outros bancos de dados (oracle, mysql, etc), arquivos (texto, csv, etc), bases NoSQL (mongodb, couchdb, redis, etc) e outras fontes de dados diferentes, tais como: twitter, ldap, www, etc.Hoje foi commitado no git do PostgreSQL um FDW especifico para acessar bases PostgreSQL, chamado "postgres_fdw", entao vou demonstrar como instalar/configurar de uma forma muito simples.1) Instalar o "postgres_fdw" apartir do gitNesse exemplo vou mostrar como instalar/compilar o PostgreSQL apartir do git oficial, mas se vc tiver uma conta no github pode usar tb o nosso clone do repositorio oficial.git clone git://git.postgresql.org/git/postgresql.gitcd postgresql./configure --prefix=$HOME/pgsqlmakemake installcd contrib/postgres_fdwmakemake install2) Inicializar um novo cluster e colocar o PostgreSQL para executar$ cd $HOME/pgsql$ mkdir data$ chmod 700 data$ ./bin/initdb -D data $ ./bin/pg_ctl -D data -l startup.log start3) Criar bases e tabela para testes$ cd $HOME/pgsql$ ./bin/createdb bd1$ ./bin/createdb bd2$ ./bin/psql bd2 -c "create table foo(bar integer);"$ ./bin/psql bd2 -c "insert into foo(bar) select * from generate_series(1, 10);"Para explicar, criamos 2 (duas) bases de dados "bd1" e "bd2", e no "bd2" criamos uma tabela chamada "foo" a qual iremos acessar apartir do "bd1" criando uma foreign table como explicarei em seguida.4) Criar a extensao "postgres_fdw" no "bd1"$ ./bin/psql bd1psql (9.3devel)Type "help" for help.bd1=# CREATE EXTENSION postgres_fdw ;CREATE EXTENSIONbd1=# \dx List of installed extensions Name | Version | Schema | Description --------------+---------+------------+---------------------------------------------------- plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language postgres_fdw | 1.0 | public | foreign-data wrapper for remote PostgreSQL servers(2 rows)5) Criar conexao com "bd2" no "bd1"bd1=# CREATE SERVER conexao_bd2 FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname 'bd2');CREATE SERVERbd1=# \des+ List of foreign servers Name | Owner | Foreign-data wrapper | Access privileges | Type | Version | FDW Options | Description -------------+----------+----------------------+-------------------+------+---------+----------------+------------- conexao_bd2 | fabrizio | postgres_fdw | | | | (dbname 'bd2') | (1 row)bd1=# CREATE USER MAPPING FOR current_user SERVER conexao_bd2 ;CREATE USER MAPPINGbd1=# \deu+ List of user mappings Server | User name | FDW Options -------------+-----------+------------- conexao_bd2 | fabrizio | (1 row)6) Acessar a tabela "foo" do "bd2" apartir do "bd1"bd1=# CREATE FOREIGN TABLE foo (bar integer) SERVER conexao_bd2 ;CREATE FOREIGN TABLEbd1=# \d List of relations Schema | Name | Type | Owner --------+------+---------------+---------- public | foo | foreign table | fabrizio(1 row)bd1=# SELECT * FROM foo; bar ----- 1 2 3 4 5 6 7 8 9