PostgreSQL7.0手册-开发者手册 -67. 后端接口

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 13:45:14
第六十七章. 后端接口
内容 
BKI 文件格式 
通用命令 
宏命令 
调试命令 
例子 
后端接口(BKI)文件是一些脚本,这些脚本输入到 Postgres 后端以特殊的 "bootstrap"(引导)模式运行,这种模式允许在不存在数据库系统的情况下执行数据库函数.BKI 文件因此可以在第一时间用于创建数据库系统.initdb 使用 BKI 文件来做一件事:创建一个数据库.不过 initdb 的 BKI 文件是内部生成的.它用文件 global1.bki.source 和local1.template1.bki.source 生成,这些文件放在 Postgres "library" 目录.这些文件是做为 Postgres 安装的一部分安装的.这些 .source 文件是作为 Postgres 制作过程的一部分制作的,是用一个叫 genbki 的制作程序制作的.genbki把一个 Postgres 源文件作为输入,把这个输入分成两份作为 genbki 输入来制作描述那些表的表和 C 头文件. 
相关的信息可以在有关 initdb,createdb,以及 SQL 命令 CREATE DATABASE 的文档中找到. 

BKI 文件格式
Postgres 后端按下面描述的方法理解 BKI 文件.如果把 global1.bki.source 文件拿来做为例子,这些描述会变得容易理解些.(像我们上面解释的,这些 .source 文件并不是一个 BKI 文件,但你能够通过它们推导出它们生成的BKI 文件是什么). 
命令是由命令名称后面跟着用空白隔开的参数组成的.用 “$” 开头的命令参数被特殊对待.如果“$$” 是头两个字符,那么第一个 “$” 被忽略,并且参数正常处理.如果 “$” 后跟着空白,那么它被当成空(NULL)值.否则跟在 “$” 后面的字符被解释成宏的名称,并因此而导致用宏的值替换参数.如果这个宏没有定义则是一个错误. 

宏是用下面语法定义的 

define macro macro_name = macro_value
并且用下面语法取消定义 
undefine macro macro_name
重新定义用的语法和定义时是一样的. 
通用命令和宏命令的列表在后面.


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

General Commands
OPEN classname 
打开一个名为 classname 的表,准备进一步操作. 
CLOSE [classname] 
关闭名为 classname 的表.如果 classname 还没有打开,则产生一个错误.如果没有给出 classname,那么当前打开的表被关闭. 
PRINT 
打印当前打开的表. 
INSERT [OID=oid_value] (value1 value2 ...) 
用 value1, value2,等作为字段值以及 oid_value 作为其 OID(对象标识)向打开的表插入一条新记录,如果 oid_value 不为零那么这个值将被用为记录的对象标识.否则,就是一个错误. 
INSERT (value1 value2 ...) 
类似上面那条命令,但是系统产生一个唯一的对象标识. 
CREATE classname (name1 = type1 [,name2 = type2[,...]]) 
用圆括号里面给出的字段创建一个名为 classname 的表. 
OPEN (name1 = type1 [,name2 = type2[,...]]) AS classname 
打开一个名为 classname 的表用于写,但是在系统表里面不记录该表的存在.(这个主要是为了在"初始化" (bootstrapping)过程中协助工作.)
DESTROY classname 
删除名为 classname 的表. 
DEFINE INDEX indexname ON class_name USING amname (opclass attr  (function(attr)) 
在名为 classname 的表上用 amname 访问模式创建一个索引名为 indexname 的索引.要索引的字段叫 name1,name2 等,并且所用的对应的操作符集合是 collection_1, collection_2 等. 
注意:这最后一句话在例子中不引用任何东西.今后应做些修改,令其有实际意义.- Thomas 1998-08-04

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

宏命令
DEFINE FUNCTION macro_name AS rettype function_name(args) 
定义一个函数原形,函数名为 macro_name,其值类型为 rettype,该值是通过执行带有类 C 定义参数的参数列表 args 的 function_name 获得的. 
DEFINE MACRO macro_name FROM FILE filename 
定义一个宏,名为 macro_name,其值是从文件 filename 里读取的. 

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

调试命令
注意:这一节关于调试命令的信息在最早的文档里面是被注释掉了的.Thomas 1998-08-05
r 
随机打印打开的表. 
m -1 
打开时间信息的输出. 
m 0 
设置检索为当前. 
m 1 Jan 1 01:00:00 1988 
设置检索为声明的时间的快照. 
m 2 Jan 1 01:00:00 1988, Feb 1 01:00:00 1988 
设置检索为声明的时间范围.如果需要一个无界的时间,两个时间都可能被空白代替. 
&A classname natts name1type1 name2 type2 ... 
向表 classname 增加 natts 字段,字段名为 name1,name2等,而类型为 type1,type2等. 
&RR oldclassname newclassname 
将旧表 oldclassname 改名为 newclassname. 
&RA classname oldattname newattname classnameoldattnamenewattname 
把表 classname 里的字段 oldattname 改名为 newattname. 

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

例子
下面的命令集将创建名为“pg_opclass” 的表,表中包含 int_ops 集合做为一个具有 421 对象标识(OID)的对象,打印出表,然后关闭之. 
create pg_opclass (opcname=name)
open pg_opclass
insert oid=421 (int_ops)
print
close pg_opclass

--------------------------------------------------------------------------------

Tags:

作者:佚名
分享到: 微信 更多