69.4. BKI命令
create tablename tableoid [bootstrap] [shared_relation] [without_oids] [rowtype_oid oid] (name1 = type1 [FORCE NOT NULL | FORCE NULL ] [, name2 = type2 [FORCE NOT NULL | FORCE NULL ], ...]) : 创建一个叫做**tablename,OID为tableoid**的表,它的列在圆括弧中给出。
`bootstrap.c`直接支持下列列类型:`bool`、`bytea`、`char`(1 字节)、`name`、`int2`、`int4`、`regproc`、`regclass`、`regtype`、`text`、`oid`、`tid`、`xid`、`cid`、`int2vector`、`oidvector`、`_int4`(数组)、`_text`(数组)、`_oid`(数组)、`_char`(数组)、`_aclitem`(数组)。尽管我们可以创建包含其它类型列的表, 但是我们只有在创建完`pg_type`并且填充了合适的记录之后才行(这实际上就意味着在自举目录中,只能使用这些列类型,而非自举目录可以使用任意内置类型)。
如果声明了`bootstrap`,那么该表将只在磁盘上创建;不会向`pg_class`、`pg_attribute`等表里面输入任何与该表相关的东西。因此这样的表将无法被普通的SQL操作访问,直到那些记录被用硬办法(用`insert`命令)建立。 这个选项用于创建`pg_class`等表本身。
如果声明了`shared_relation`,那么表就作为共享表创建。除非声明了`without_oids`,否则表将会有OID。表的行类型OID(`pg_type`的OID)可以有选择性地通过`rowtype_oid`子句指定。如果没有指定,会为之自产生一个OID(如果`bootstrap`被指定,则`rowtype_oid`是无效的,但不管怎样它还是被写在了文档中)。
open tablename : 打开名为**tablename**的表进行数据插入。任何当前打开的表将被关闭。
close [tablename] : 关闭打开着的表。给出的表名用于交叉检查,但并不是必须的。
insert [OID = oid_value] ( value1 value2 ... ) : 用**value1、value2** 等作为列值以及**oid_value作为其 OID向打开的表插入一条新记录。如果oid_value**为零(0)或者该子句被忽略而表可以具有OID,则会为之赋予下一个可用的OID。
NULL 可以用特殊的关键字`_null_`指定。看起来不像标识符或者数字字符串的值必须被加上双引号。
declare [unique] index indexname indexoid on tablename using amname ( opclass1 name1 [, ...] ) : 在名为**tablename的表上用amname访问方法创建一个OID为indexoid的名为indexname的索引。 索引的域被称为name1、name2等,而使用的操作符类分别是opclass1**, **opclass2**等。 该命令将会创建索引文件和适当的系统目录项,但是索引内容不会被此命令初始化。
declare toast toasttableoid toastindexoid on tablename : 为名为**tablename的表创建一个TOAST表。该TOAST表将被赋予由toasttableoid表示的OID,且它的索引将被赋予由toastindexoid**表示的OID。和declare index一样,索引的填充将被推迟。
build indices : 填充之前声明的索引。
