Backend Interface (BKI) files are
scripts that are input to the Postgres backend running in the special
"bootstrap" mode that allows it to perform database functions
without a database system already existing. BKI files can therefore be used to create the
database system in the first place. initdb uses BKI
files to do just that: to create a database system. However,
initdb's BKI files are generated internally. It generates
them using the files global1.bki.source
and local1.template1.bki.source, which it
finds in the Postgres "library"
directory. They get installed there as part of installing
Postgres. These .source files get
build as part of the Postgres
build process, by a build program called genbki. genbki takes as input Postgres source files that double as
genbki input that builds tables
and C header files that describe those tables.

Related information may be found in documentation for
initdb, createdb, and the SQL command CREATE
DATABASE.

The Postgres backend interprets
BKI files as described below. This
description will be easier to understand if the global1.bki.source file is at hand as an example.
(As explained above, this .source file isn't quite a BKI file, but you'll be able to guess what the
resulting BKI file would be
anyway).

Commands are composed of a command name followed by space
separated arguments. Arguments to a command which begin with a "$"
are treated specially. If "$$" are the first two characters, then
the first "$" is ignored and the argument is then processed
normally. If the "$" is followed by space, then it is treated as a
NULL value. Otherwise, the characters following the "$" are
interpreted as the name of a macro causing the argument to be
replaced with the macro's value. It is an error for this macro to
be undefined.