我已经成功安装了 oracle_fdw。创建扩展名oracle_fdw
和外部表后,它显示以下错误。这是服务器配置问题吗?
--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:
您必须为用户 postgresql 设置环境
LD_LIBRARY_PATH
变量ORACLE_HOME
。然后您必须在文件 tnsname.ora 中将服务设置为连接,您必须使用 dbserver=Service 创建一个外部服务器(您应该在文件 `tnsname.ora 中定义了服务我将我在 Debian 中的文件配置发送给您:
我添加到
/etc/profile
(适用于所有系统用户),但您只能.bashrc
为一个用户使用或另一个。甲骨文
Postgresql 路径
该变量
TNS_ADMIN
将是您安装的目录tnsnames.ora
tnsnames.ora:
oracle_fdw
然后为with 选项创建一个外部服务器dbserver=ORA11
我能够在 Postgresql 和 Oracle 之间安装 oracle_fdw。我已经在 Linux 机器上安装了 Oracle Instant 客户端。
在 Postgresql 服务器上,我安装了 Oracle 客户端,并将其配置为连接到 Oracle 数据库。sqlplus name/password@ORCL 正在命令行上工作。
我的 tnsnames.ora 是:
我已将 tnsnames.ora 复制到 $ORACLE_HOME/network/admin/tnsnames.ora
我的环境变量是:
在 postgresql 初始化脚本 /etc/init.d/postgresql 上,我还设置了变量:
我还更改了文件 /etc/ld.so.conf.d/postgresql-9.1-libs.conf
要使用 oracle_fdw,我使用了:
我已经在 Oracle 中有一个名为“zonas”的小表。要在 Postgresql 中使用“zonas”,我已经完成了:
我希望它有所帮助。
如果这对其他人有任何帮助(此答案与 OP 问题没有直接关系),我在尝试连接 PostgrSQL 64 位(及其插入的 64 位版本)时也遇到了完全相同的消息
oracle_fdw
) 到32 位版本的Oracle Database
. 我的心在哪里?但其他人可能会犯同样的错误......这是一个更完整的文档:wiki page。