我编写了一个要在PostgreSQL内部执行的C函数(使用CREATE FUNCTION ... LANGUAGE C;
命令),但是当我这样做时,它会响应“ PQnfields:找不到符号”。
我试图在编译时包括libpq库所在的路径,如下所示:
gcc -lpq -fpic -c crossdb.c -I`pg_config --includedir-server` -I /usr/include/ -std=c99
但是没有用。 我认为根本不可能使用libpq从函数中查询数据库...因此,如果您知道怎么做或导致此错误消息的原因,我很乐意向您倾听。 >
答案 0 :(得分:0)
您必须将包含libpq.so.*
的目录放置在PostgreSQL的共享库路径上,方法是在服务器环境中设置LD_LIBRARY_PATH
或在编译行中添加-Wl,-rpath,/path/to/so
。
您是否使用PGXS框架来构建共享库?这会自动为您提供大多数适当的标志。
查看postgres_fdw
的{{1}}以获得灵感,它也与Makefile
链接。
退后一步:确定要调用客户端的名为libpq
的函数吗?我将调查一个外国表或crossdb
是否可以完成您想实现的目标。