PostgreSQL7.0手冊-開發者手冊 -67. 后端接口
2019-09-08 23:34:04
供稿:網友
第六十七章. 后端接口
內容
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
--------------------------------------------------------------------------------