PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

34.10. 处理嵌入式 SQL 源程序 #

现在你已经了解了如何编写嵌入式 SQL C 程序,接下来你可能想知道 如何编译它们。在编译之前,你要先让文件通过嵌入式 SQL C(C 语言嵌入式 SQL) 预处理器的处理,它会把其中使用的 SQL 语句转换为特殊的函数调用。编译之后,你还必须与一个包含所需函数的 特殊库链接。这些函数从参数中获取信息,通过 libpq 接口执行 SQL 命令,并把结果放入指定为输出的参数中。

预处理器程序名为 ecpg,包含在正常的 PostgreSQL 安装中。嵌入式 SQL 程序通常以 .pgc 扩展名命名。如果你有一个名为 prog1.pgc 的程序文件,只需简单调用即可对它 进行预处理:

ecpg prog1.pgc

这会创建一个名为 prog1.c 的文件。如果你的 输入文件没有遵循建议的命名模式,可以使用 -o 选项显式指定输出文件。

预处理后的文件可以正常编译,例如:

cc -c prog1.c

生成的 C 源文件会包含来自 PostgreSQL 安装的头文件,因此如果你把 PostgreSQL 安装在默认搜索路径之外的位置,就必须在编译命令行上添加诸如 -I/usr/local/pgsql/include 这样的选项。

要链接一个嵌入式 SQL 程序,你需要包含 libecpg 库,如下所示:

cc -o myprog prog1.o prog2.o ... -lecpg

同样,你可能需要在该命令行上添加诸如 -L/usr/local/pgsql/lib 这样的选项。

你可以使用 pg_config 或 pkg-config(包名为 libecpg) 来获取你的安装所对应的路径。

如果你使用 make 管理较大项目的构建 过程,那么在你的 makefile 中加入以下隐式规则可能会很方便:

ECPG = ecpg

%.c: %.pgc
        $(ECPG) $<

ecpg 命令的完整语法在 ecpg 中有详细说明。

ecpg 库默认是线程安全的。不过, 编译你的客户端代码时可能需要使用某些线程相关的命令行选项。