PostgreSql: установить переменные среды
Я установил плагин oracle_fdw для postgreSql и достиг точки, где я мог создать стороннюю таблицу. Но когда я пытаюсь запросить эту таблицу, я получаю следующую ошибку:
ERROR: error connecting to Oracle: OCIEnvCreate failed to create environment handle
Я прошел следующую ветку, где обсуждается именно эта проблема:
OCIEnvCreate не удалось создать дескриптор среды. # 133
Дело в том, что я не могу установить переменную env для 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=/
Я пытался экспортировать эту переменную во всех возможных местах, но безрезультатно. Я сослался на следующие темы:
Таким образом, я добавил переменные env в следующие файлы: (после входа в систему как postgres с помощью sudo su 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
1 ответ
Все места, в которые вы добавили переменную, используются только оболочками, поэтому она будет работать только в том случае, если вы запустите PostgreSQL из командной строки.
Лучше всего зависит от вашей процедуры запуска: с помощью сценариев инициализации System V вы можете редактировать сценарий, а с помощью systemd в служебном файле есть специальное ключевое слово. Для некоторых дистрибутивов Linux могут быть и другие способы.
Для решения вашей реальной проблемы вам нужно только ORACLE_HOME
Если вы не используете Instant Client, я не уверен, что это ваша проблема.
К сожалению, это общее сообщение об ошибке, если у Oracle возникают проблемы с инициализацией, поэтому диагностировать ее очень сложно. Это может быть плохой переменной среды Oracle, но я также видел это, если на одном компьютере установлено несколько продуктов Oracle, поэтому постарайтесь избежать этого.
Это может быть хорошей идеей, чтобы проследить процесс бэкэнда с strace
так что вы можете увидеть, к каким файлам Oracle пытается получить доступ.
Если у вас есть исходный код Oracle, отладчик может помочь (только шутки).