PostgreSQL говорит «символ не найден», когда я пытаюсь использовать PQnfelds - PullRequest
0 голосов
/ 10 июля 2019

Я написал функцию C, которая будет выполняться из PostgreSQL (с помощью команды CREATE FUNCTION ... LANGUAGE C;), но когда я это сделаю, она ответит «PQnfields: symbol not found». Я попытался указать путь к библиотеке libpq при компиляции, например:

 gcc -lpq -fpic -c crossdb.c -I`pg_config --includedir-server` -I /usr/include/ -std=c99

Но это не сработало. Я думаю, что просто невозможно использовать libpq для запроса базы данных из функции ... Так что, если вы знаете, как это сделать или что вызывает это сообщение об ошибке, я был бы рад получить от вас сообщение.

1 Ответ

0 голосов
/ 10 июля 2019

Вам нужно будет поместить каталог, содержащий libpq.so.*, в путь к общей библиотеке PostgreSQL, либо установив LD_LIBRARY_PATH в среде сервера, либо добавив -Wl,-rpath,/path/to/so в строку компиляции.

Выиспользуя каркас PGXS для создания общей библиотеки?Это дает вам большинство правильных флагов автоматически.

Смотрите postgres_fdw Makefile для вдохновения, оно также связано с libpq.

Делаете шаг назад: вы?уверены, что вам нужна функция с именем crossdb, которая вызывает клиента?Я бы выяснил, может ли иностранная таблица или dblink сделать то, что вы пытаетесь достичь.

...