Postgresql 中文操作指南

36.10. Processing Embedded SQL Programs #

现在您已经了解如何形成嵌入式 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 库是线程安全的。但是,你可能需要使用一些线程命令行选项来编译客户端代码。