PostgreSQL上的$ libdir问题

Joe*_*ska 12 postgresql postgis pg-dump

简而言之,我的问题是"为什么$ libdir不能在我的PSQL安装上运行."

CREATE FUNCTION st_box2d_in(cstring) RETURNS box2d
    AS '$libdir/liblwgeom', 'BOX2DFLOAT4_in'
    LANGUAGE c IMMUTABLE STRICT;
Run Code Online (Sandbox Code Playgroud)

产生错误

could not access file "$libdir/liblwgeom": No such file or directory
Run Code Online (Sandbox Code Playgroud)

CREATE FUNCTION st_box2d_in(cstring) RETURNS box2d
    AS '/usr/local/pgsql/lib/liblwgeom', 'BOX2DFLOAT4_in'
    LANGUAGE c IMMUTABLE STRICT;
Run Code Online (Sandbox Code Playgroud)

工作正常.

的输出

% pg_config --pkglibdir
/usr/local/pgsql/lib
Run Code Online (Sandbox Code Playgroud)

似乎是正确的.

小智 6

我也在努力解决这个错误.我通过手动将PostGIS lib链接到liblwgeom文件解决了这个问题,如下所示:

ln -s /usr/lib/postgis/1.5.1/postgres/8.4/lib/postgis-1.5.so 
    /usr/lib/postgresql/8.4/lib/liblwgeom
Run Code Online (Sandbox Code Playgroud)

我不知道为什么PostGIS会将自己安装在'错误'目录中,或者为什么PostgreSQL会查找一个名为文件的文件,liblwgeom当它看起来与PostGIS调用的文件相同时postgis-1.5.so

我所知道的是,这似乎解决了我的问题.


Mic*_*ker 1

原来的回复有误,删掉了

现在我已经查找了 postgresql 代码,我不得不承认这个字符串应该从 2001 年开始扩展;-)。但扩展非常有限。它仅扩展$libdir后跟目录分隔符。尽管如此,您的输出表明该字符串未扩展,因为此处报告的字符串是实际用于加载库的字符串。

这意味着替换失败。仔细观察,我可以发现只有目标文件确实存在时扩展才会成功。假设你的目录分隔符是/and DLSUFFIXis.so并且文件/usr/local/pgsql/lib/liblwgeom.so确实存在,我不知道为什么它会失败;-)