The open command cannot be used until the tables it uses exist and have entries for the table that is to be opened. (These minimum tables are pg_class, pg_attribute, pg_proc, and pg_type.) To allow those tables themselves to be filled, create with the bootstrap option implicitly opens the created table for data insertion.
Thus, the structure of the postgres.bki file has to be:
-
create bootstrap one of the critical tables
-
insert data describing at least the critical tables
-
close
-
Repeat for the other critical tables.
-
create (without bootstrap) a noncritical table
-
open
-
insert desired data
-
close
-
Repeat for the other noncritical tables.
-
Define indexes.
-
build indices
There are doubtless other, undocumented ordering dependencies.