💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 59.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` 填充前面声明的索引。