PostgreSql:设置环境变量

时间:2017-10-27 09:47:58

标签: postgresql oracle-fdw

我已经为postgreSql安装了oracle_fdw插件,并且已经达到了我可以创建外表的程度。但是当我尝试查询此表时,我收到以下错误:

ERROR: error connecting to Oracle: OCIEnvCreate failed to create environment handle

我讨论了以下问题:

OCIEnvCreate failed to create environment handle. #133

问题是我无法为 ORACLE_HOME 设置env变量。下面是检查env和运行postgres进程的相应输出的命令:

:$ sudo cat /proc/4885/environ | xargs -0 -n 1 echo | sort
LANG=en_IN
PGDATA=/var/lib/postgresql/9.6/main
PG_GRANDPARENT_PID=4880
PGLOCALEDIR=/usr/share/locale
PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
PGSYSCONFDIR=/etc/postgresql-common
PWD=/

我试图在所有可能的地方导出这个变量,但无济于事。我引用了以下主题:

https://unix.stackexchange.com/questions/117467/how-to-permanently-set-environmental-variables/117470

http://www.linuxtopia.org/online_books/database_guides/Practical_PostgreSQL_database/PostgreSQL_x486_007.htm

因此我在以下文件中添加了env变量: (使用 sudo su postgres 登录postgres后)

~/.bashrc
~/.bash_profile
~/.bash_login
~/.login
~/.profile
/etc/profile

在所有这些文件中,我有以下一行:

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe/

我在这里错过了什么吗?

PS:我使用的是Postgres 9.6的Ubuntu 17.10

1 个答案:

答案 0 :(得分:1)

添加变量的所有位置仅由shell使用,因此只有从命令行启动PostgreSQL才能使用。

这取决于您的启动过程最佳位置:使用System V init脚本可以编辑脚本,使用systemd,服务文件中有一个特殊的关键字。某些Linux发行版可能还有其他方法。

要解决您的实际问题,如果您 使用Instant Client,则只需ORACLE_HOME,因此我不确定这是您的问题。

不幸的是,如果Oracle初始化有问题,那么这是 一般性错误消息,因此非常难以诊断。 可以是一个糟糕的Oracle环境变量,但是如果在一台机器上安装了几个Oracle产品,我也会看到它,所以尽量避免这种情况。

使用strace跟踪后端流程可能是个好主意,这样您就可以看到Oracle尝试访问哪些文件。

如果你有Oracle的源代码,调试器可以帮助(只是开玩笑)。