Подтвердить что ты не робот

Проблемы с $libdir на PostgreSQL

Короче говоря, мой вопрос: "Почему не работает $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

кажется правильным.

4b9b3361

Ответ 1

Я тоже боролся с этой ошибкой. Я решил его, связав в 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 ищет файл с именем liblwgeom, когда он кажется тем же файлом, который PostGIS вызывает postgis-1.5.so

Все, что я знаю, это то, что, похоже, исправила мою проблему.

Ответ 2

Отредактированный оригинальный ответ за неправильное

Теперь, когда я просмотрел код postgresql, я должен признать, что эта строка должна быть расширена с 2001 года;-). Однако расширение очень ограничено. Он только расширяет $libdir, за которым следует разделитель каталога. Тем не менее, ваш вывод указывает, что строка не была расширена, поскольку указанная строка здесь является строкой, фактически используемой для загрузки библиотеки.

Это означает, что замена не удалась. Посмотрев на него ближе, я вижу, что расширение только успешно, если файл цели действительно существует. Предполагая, что ваш разделитель каталогов / и DLSUFFIX есть .so, и файл /usr/local/pgsql/lib/liblwgeom.so действительно существует, у меня нет ни малейшего понятия, почему, черт возьми, он терпит неудачу; -)