Eu instalei o oracle_fdw com sucesso. Depois de criar a extensão oracle_fdw
e a tabela estrangeira, ele mostra o seguinte erro. Isso é um problema de configuração do servidor?
--env
Oracle : 10.2.0.1
PostgreSQL: 9.1.3
--create foreign server
skytf=# CREATE SERVER oracle_srv
skytf-# FOREIGN DATA WRAPPER oracle_fdw
skytf-# OPTIONS (dbserver '//192.168.1.30:1521/MANUA');
CREATE SERVER
skytf=# grant usage on foreign server oracle_srv to skytf;
GRANT
--create mapping user
skytf=# CREATE USER MAPPING FOR skytf
skytf-# SERVER oracle_srv
skytf-# OPTIONS (user 'read_only', password 'read_only');
CREATE USER MAPPING
--create foreign table
skytf=# CREATE FOREIGN TABLE ft_test_1 (
skytf(# id integer,
skytf(# name character varying(20)
skytf(# ) SERVER oracle_srv
skytf-# OPTIONS (schema 'ocp', table 'test_1');
CREATE FOREIGN TABLE
skytf=# \c skytf skytf
skytf=> select * from ft_test_1;
ERROR: error connecting to Oracle: OCIEnvCreate failed to create environment handle
DETAIL:
Você tem que definir as variáveis de ambiente
LD_LIBRARY_PATH
eORACLE_HOME
para o usuário postgresql. Então você tem que configurar o serviço para conectar no arquivo tnsname.ora, então você tem que criar um servidor estrangeiro com dbserver=Service (você deve ter definido o serviço no arquivo `tnsname.oraEnvio para vocês minhas configurações de arquivos no Debian:
Eu adicionei
/etc/profile
(aplica para todos os usuários do sistema), mas você pode usar.bashrc
ou outro para apenas um usuário.Oráculo
Caminho do Postgresql
A variável
TNS_ADMIN
será um diretório onde você instala umtnsnames.ora
tnsnames.ora:
Em seguida, crie um servidor estrangeiro para
oracle_fdw
com a opçãodbserver=ORA11
Consegui instalar o oracle_fdw, entre o Postgresql e o Oracle. Instalei o cliente Oracle Instant na máquina Linux.
No servidor Postgresql, instalei o Oracle Client e o configurei para se conectar ao banco de dados Oracle. sqlplus nome/senha@ORCL está funcionando na linha de comando.
Meu tnsnames.ora é:
Copiei tnsnames.ora para $ORACLE_HOME/network/admin/tnsnames.ora
Minhas variáveis de ambiente são:
No script de inicialização do postgresql, /etc/init.d/postgresql, também configurei as variáveis:
Também alterei o arquivo /etc/ld.so.conf.d/postgresql-9.1-libs.conf
Para usar o oracle_fdw, usei:
Já tenho uma pequena tabela no Oracle chamada 'zonas'. Para usar 'zonas' no Postgresql, fiz:
Espero que ajude.
Se isso puder ser útil para outra pessoa (esta resposta não está diretamente relacionada à pergunta do OP), também recebi exatamente a mesma mensagem ao tentar conectar o PostgrSQL de 64 bits (e sua versão de 64 bits conectada de
oracle_fdw
) para uma versão de 32 bitsOracle Database
do . Onde estava minha mente? Mas outras pessoas poderiam ter cometido o mesmo erro...Aqui está uma documentação mais completa sobre isso: página wiki .