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

尽管

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

似乎是正确的。

4

2 回答 2

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

我不知道为什么 PostGIS 将自身安装在“错误”目录中,或者为什么 PostgreSQL 会查找一个名为liblwgeomPostGIS 调用的文件的文件postgis-1.5.so

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

于 2011-06-20T08:27:55.217 回答
1

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

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

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

于 2009-08-31T13:46:08.597 回答