2024 年 9 月 26 日: PostgreSQL 17 发布!
支持版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持版本:11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3

34.10. 处理嵌入式 SQL 程序 #

现在您已经了解了如何构建嵌入式 SQL C 程序,您可能想知道如何编译它们。在编译之前,您需要运行文件通过嵌入式SQL C预处理器,它将您使用的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_configpkg-config,包名为 libecpg,来获取安装路径。

如果您使用 make 管理大型项目的构建过程,那么将以下隐式规则包含在您的 makefile 中可能很方便

ECPG = ecpg

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

ecpg 命令的完整语法在 ecpg 中详细介绍。

ecpg 库默认情况下是线程安全的。但是,您可能需要使用一些线程命令行选项来编译您的客户端代码。

提交更正

如果您在文档中发现任何不正确的地方,与您对特定功能的体验不符或需要进一步澄清,请使用 此表格 报告文档问题。