PostgreSQL7.0手册-开发者手册 -67. 后端接口
内容
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,那么当前打开的表被关闭.
打印当前打开的表.
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)
close pg_opclass
--------------------------------------------------------------------------------