PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 60. BKI后端接口 | 下一页

# 60.2. BKI 命令

`create` `tablename` `tableoid` [`bootstrap`] [`shared_relation`] [`without_oids`] [`rowtype_oid` `oid`] (`name1` = `type1` [, `name2` = `type2`, ...])

  创建一个名为`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` ... `)`

  如果`oid_value`为零，那么用 `value1`, `value2`等作为字段值以及 `oid_value`作为其 OID(对象标识)向打开的表插入一条新记录， 否则省略子句，而表则拥有 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 的 OID 是`toasttableoid`， 其索引的 OID 是`toastindexoid`。 与`declare index`一样，索引的填充会被推迟。

`build indices`

  填充前面声明的索引。

上一页 | 起始页 | 下一页
BKI 文件格式 | 上一级 | 系统初始化的BKI文件的结构