PostgreSql:设置环境变量
PostgreSql: Set environment variables
我已经为 postgreSql 安装了 oracle_fdw 插件,并且已经达到了可以创建外部 table 的程度。但是当我尝试查询此 table 时,出现以下错误:
ERROR: error connecting to Oracle: OCIEnvCreate failed to create environment handle
我浏览了以下线程,其中讨论了这个确切的问题:
OCIEnvCreate failed to create environment handle. #133
问题是我无法为 ORACLE_HOME 设置环境变量。下面是检查 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=/
我已尝试在所有可能的地方导出此变量,但无济于事。我提到了以下主题:
因此我在以下文件中添加了环境变量:
(使用 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:我在 Ubuntu 17.10 使用 Postgres 9.6
您添加变量的所有位置仅供 shell 使用,因此只有从命令行启动 PostgreSQL 时它才会起作用。
这取决于你的启动程序最好的地方是什么:使用System V init脚本你可以编辑脚本,使用systemd在服务文件中有一个特殊的关键字。某些 Linux 发行版可能还有其他方法。
要解决您的实际问题,如果您不使用 Instant Client,您只需要 ORACLE_HOME
,所以我不确定那是您的问题。
不幸的是,如果 Oracle 在初始化时出现问题,这是 一般错误消息,因此 非常 很难诊断。它可能是一个错误的 Oracle 环境变量,但我也看到如果在一台机器上混合安装了多个 Oracle 产品,所以尽量避免这种情况。
使用 strace
跟踪后端进程可能是个好主意,这样您就可以看到 Oracle 试图访问哪些文件。
如果您有 Oracle 的源代码,调试器可以提供帮助(开玩笑)。
我已经为 postgreSql 安装了 oracle_fdw 插件,并且已经达到了可以创建外部 table 的程度。但是当我尝试查询此 table 时,出现以下错误:
ERROR: error connecting to Oracle: OCIEnvCreate failed to create environment handle
我浏览了以下线程,其中讨论了这个确切的问题:
OCIEnvCreate failed to create environment handle. #133
问题是我无法为 ORACLE_HOME 设置环境变量。下面是检查 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=/
我已尝试在所有可能的地方导出此变量,但无济于事。我提到了以下主题:
因此我在以下文件中添加了环境变量: (使用 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:我在 Ubuntu 17.10 使用 Postgres 9.6
您添加变量的所有位置仅供 shell 使用,因此只有从命令行启动 PostgreSQL 时它才会起作用。
这取决于你的启动程序最好的地方是什么:使用System V init脚本你可以编辑脚本,使用systemd在服务文件中有一个特殊的关键字。某些 Linux 发行版可能还有其他方法。
要解决您的实际问题,如果您不使用 Instant Client,您只需要 ORACLE_HOME
,所以我不确定那是您的问题。
不幸的是,如果 Oracle 在初始化时出现问题,这是 一般错误消息,因此 非常 很难诊断。它可能是一个错误的 Oracle 环境变量,但我也看到如果在一台机器上混合安装了多个 Oracle 产品,所以尽量避免这种情况。
使用 strace
跟踪后端进程可能是个好主意,这样您就可以看到 Oracle 试图访问哪些文件。
如果您有 Oracle 的源代码,调试器可以提供帮助(开玩笑)。