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=/

Я пытался экспортировать эту переменную во всех возможных местах, но безрезультатно. Я сослался на следующие темы:

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 в следующие файлы: (после входа в систему как 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, отладчик может помочь (только шутки).

Другие вопросы по тегам