codecamp

PostgreSQL ecpg

ecpg — 嵌入式 SQL C 预处理器

大纲

ecpg [option...] file...

描述

ecpg是用于 C 程序的嵌入式 SQL 预处理器。它通过将 SQL 调用替换为特殊函数调用把带有嵌入式 SQL 语句的 C 程序转换为普通 C 代码。输出文件可以被任何 C 编译器工具链处理。

ecpg将把命令行中给出的每一个输入文件转换为相应的 C 输出文件。 如果输入文件名没有任何扩展名,则假定为.pgc。文件扩展名将由 .c替换以构造输出文件名。 但是输出文件名可以使用-o选项覆盖。

如果输入文件名只是-ecpg从标准输入 读取程序(并写入标准输出,除非用-o重写)。

这个参考页没有描述嵌入式 SQL 语言。关于该主题请参考第 35 章

选项

ecpg接受下列命令行参数:

-c

自动从 SQL 代码生成确定的 C 代码。当前,这对EXEC SQL TYPE起效。

-C mode

设置一个兼容性模式。mode可以是INFORMIXINFORMIX_SEORACLE

-D symbol

定义一个 C 预处理器符号。

-h

处理头文件。指定此选项后,输出文件扩展名变为.h而不是 .c,默认输入文件扩展名为.pgh 而不是.pgc。此外,将强制启用-c选项。

-i

分析系统也包括文件。

-I directory

指定一个额外的包括路径,用来寻找通过EXEC SQL INCLUDE包括的文件。默认值是.(当前目录)、/usr/local/include、在编译时定义的PostgreSQL包括目录(默认:/usr/local/pgsql/include)以及 /usr/include

-o filename

指定ecpg应该将它的所有输出写到给定的filename。 写-o-将所有输出发送到标准输出。

-r option

选择运行时行为。option可以是下列之一:

no_indicator

不使用指示器而使用特殊值来表示空值。历史上曾有数据库使用这种方法。

prepare

在使用所有语句之前准备它们。libecpg 将保持一个预备语句的缓冲并当语句再被执行时重用该语句。如果缓冲满了,libecpg 将释放最少使用的语句。

questionmarks

为兼容性原因允许使用问号作为占位符。在很久以前这被用作默认值。

-t

打开事务的自动提交。在这种模式下,每一个 SQL 命令会被自动提交,除非它位于一个显式事务块中。在默认模式中,命令只有当EXEC SQL COMMIT被发出时才被提交。

-v

打印额外信息,包括版本和“包括”路径。

--version

打印ecpg版本并退出。

-?
--help

显示关于ecpg命令行参数的帮助并退出。

注解

在编译预处理好的 C 代码文件时,编译器需要能够找到PostgreSQL包括目录中的ECPG头文件。因此,在调用编译器时,你可能必须使用-I选项(例如,-I/usr/local/pgsql/include)。

使用带有嵌入式 SQL 的 C 代码的程序必须被链接到libecpg库,例如使用链接器选项-L/usr/local/pgsql/lib -lecpg

适合于安装的这些目录的值可以使用pg_config找到。

例子

如果你有一个名为prog1.pgc的嵌入式 SQL C 源文件,你可以使用下列命令序列创建一个可执行程序:

ecpg prog1.pgc
cc -I/usr/local/pgsql/include -c prog1.c
cc -o prog1 prog1.o -L/usr/local/pgsql/lib -lecpg


PostgreSQL dropuser
PostgreSQL pg_basebackup
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

PostgreSQL SQL语言

PostgreSQL 服务器管理

PostgreSQL 客户端接口

PostgreSQL 服务器编程

PostgreSQL 参考

PostgreSQL 内部

PostgreSQL 附录

PostgreSQL 参考书目

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }