33.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_config 或者pkg-config以及包名libecpg以 获得安装目录。

如果你使用make管理大对象编译过程, 它可能方便地包含下面你的makefiles中的隐式规则:

ECPG = ecpg

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

ecpg命令完整语法在ecpg中有详细描述。

ecpg库缺省是线程安全的。然而,你可能需要 使用一些线程命令行选项来编译你的客户端代码。