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库缺省是线程安全的。然而,你可能需要 使用一些线程命令行选项来编译你的客户端代码。