当我尝试使用 PQnfelds 时,PostgreSQL 显示 'symbol not found'

PostgreSQL says 'symbol not found' when I try to use PQnfelds

我编写了一个要从 PostgreSQL 中执行的 C 函数(使用 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 从函数查询数据库...因此,如果您知道如何做或导致此错误消息的原因,我很乐意听取您的意见。

您必须将包含 libpq.so.* 的目录放在 PostgreSQL 的共享库路径中,方法是在服务器环境中设置 LD_LIBRARY_PATH 或将 -Wl,-rpath,/path/to/so 添加到编译行。

您是否使用 PGXS 框架构建共享库?这会自动为您提供大部分正确的标志。

查看 postgres_fdwMakefile 以获得灵感,它也与 libpq 链接。

退后一步:您确定需要一个名为 crossdb 的函数来调用客户端吗?我会调查外国 table 或 dblink 是否可以完成您想要实现的目标。