PostgreSQL中$libdir的问题

12

简而言之,我的问题是"为什么$libdir在我的PSQL安装中不起作用。"

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

产生了一个错误

could not access file "$libdir/liblwgeom": No such file or directory
< p >当...时

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

正常工作。

输出为

% pg_config --pkglibdir
/usr/local/pgsql/lib

看起来是正确的。


这应该可以工作。也许您正在混合不同的安装? - Peter Eisentraut
2个回答

6

我也曾遇到过这个错误。我通过手动将PostGIS库链接到liblwgeom文件中来解决它,像这样:

ln -s /usr/lib/postgis/1.5.1/postgres/8.4/lib/postgis-1.5.so 
    /usr/lib/postgresql/8.4/lib/liblwgeom

我不知道为什么PostGIS会被安装在“错误”的目录中,或者为什么PostgreSQL要寻找名为liblwgeom的文件,而它似乎是PostGIS调用的postgis-1.5.so文件。我只知道这似乎解决了我的问题。

做得非常好,我为我的安装执行了 ln -s /Library/PostgreSQL/9.1/lib/postgis-1.5.so /Library/PostgreSQL/9.1/lib/postgresql/postgis-1.5 - Aram Kocharyan

1

我编辑了原始回复,因为它是错误的

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

这意味着替换失败了。仔细看一下,我可以看到,只有当目标文件实际存在时,扩展才会成功。假设您的目录分隔符是/DLSUFFIX.so,并且文件/usr/local/pgsql/lib/liblwgeom.so实际上存在,我就不知道它为什么会失败了;-)


你为什么这么说?这似乎是完全标准的用法。 - Joe Germuska
Joe,你的问题让我感到惊讶,我已经改变了答案;-) - Michael Krelin - hacker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接