Skip to content

BKI Commands

BKI Commands

create tablename tableoid [bootstrap] [shared_relation] [rowtype_oid oid] (name1 = type1 [FORCE NOT NULL | FORCE NULL ] [, name2 = type2 [FORCE NOT NULL | FORCE NULL ], ...]) : Create a table named tablename, and having the OID tableoid, with the columns given in parentheses.

 The following column types are supported directly by `bootstrap.c`: `bool`, `bytea`, `char` (1 byte), `int2`, `int4`, `int8`, `float4`, `float8`, `name`, `regproc`, `text`, `jsonb`, `oid`, `pg_node_tree`, `int2vector`, `oidvector`, `_int4` (array), `_text` (array), `_oid` (array), `_char` (array), `_aclitem` (array). Although it is possible to create tables containing columns of other types, this cannot be done until after `pg_type` has been created and filled with appropriate entries. (That effectively means that only these column types can be used in bootstrap catalogs, but non-bootstrap catalogs can contain any built-in type.)


 When `bootstrap` is specified, the table will only be created on disk; nothing is entered into `pg_class`, `pg_attribute`, etc., for it. Thus the table will not be accessible by ordinary SQL operations until such entries are made the hard way (with `insert` commands). This option is used for creating `pg_class` etc. themselves.


 The table is created as shared if `shared_relation` is specified. The table's row type OID (`pg_type` OID) can optionally be specified via the `rowtype_oid` clause; if not specified, an OID is automatically generated for it. (The `rowtype_oid` clause is useless if `bootstrap` is specified, but it can be provided anyway for documentation.)

open tablename : Open the table named tablename for insertion of data. Any currently open table is closed.

close tablename : Close the open table. The name of the table must be given as a cross-check.

insert ( value1 value2 ... ) : Insert a new row into the open table using value1, value2, etc., for its column values.

 NULL values can be specified using the special key word `_null_`. Values that do not look like identifiers or digit strings must be single-quoted. (To include a single quote in a value, write it twice. Escape-string-style backslash escapes are allowed in the string, too.)


 In most cases a *value* string is simply fed to the datatype input routine for the column's data type, after de-quoting if needed. However there are exceptions for certain fields, as detailed previously.

declare [unique] index indexname indexoid on tablename using amname ( opclass1 name1 [, ...] ) : Create an index named indexname, having OID indexoid, on the table named tablename, using the amname access method. The fields to index are called name1, name2 etc., and the operator classes to use are opclass1, opclass2 etc., respectively. The index file is created and appropriate catalog entries are made for it, but the index contents are not initialized by this command.

declare toast toasttableoid toastindexoid on tablename : Create a TOAST table for the table named tablename. The TOAST table is assigned OID toasttableoid and its index is assigned OID toastindexoid. As with declare index, filling of the index is postponed.

build indices : Fill in the indices that have previously been declared.