我试图在没有root访问权限的linux服务器上运行PL/R。使用以下命令安装本身可以正常工作:
LD_INCLUDE_PATH="$HOME/pgsql/include" LD_LIBRARY_PATH="$HOME/pgsql/lib:$HOME/lib/R/lib" PGDATA="$HOME/usr/pgsql/data" PG_LIB_DIR="$HOME/pgsql/lib" R_HOME="$HOME/lib/R" USE_PGXS=1 make
当我尝试使用CREATE EXTENSION plr;
将plr扩展名添加到数据库时,我收到以下错误:
ERROR: could not load library "~/lib/postgresql/plr.so": libR.so: cannot open shared object file: No such file or directory
我在install documentation page的底部读到我应该将库路径添加到LD配置文件/etc/ld.so.conf
,但是我没有root访问权限,我无法更改此文件。
有解决方法吗?
提前致谢
答案 0 :(得分:1)
您需要在PostgreSQL服务器环境中的运行时设置LD_LIBRARY_PATH="$HOME/pgsql/lib:$HOME/lib/R/lib"
。由于您似乎在您自己的用户ID下运行PostgreSQL,这应该像在导出pg_ctl
之前导出环境变量一样简单,例如:
LD_LIBRARY_PATH="$HOME/pgsql/lib:$HOME/lib/R/lib" pg_ctl -D the_datadir start
或者,您可以看到是否可以在启用了rpath链接的情况下重新编译PL / R,因此plr.so
在编译时由链接器嵌入了libR.so
的路径。通过-rpath
中的LDFLAGS
选项或-Wl,-rpath
中的CFLAGS
。请参阅-rpath
中的man ld
和-Wl
中的man gcc
。