Los ficheros de interfaces (BKI) son scripts que sirven de entrada para los backend de Postgres ejecutandose en un mode especial "bootstrap" permite realizar funciones de base de datos sin que exista todavia el sistema de la base de datos. Los ficheros BKI pueden por lo tanto ser usados para crear el sistema de base de datos al inicio. initdb usa ficheros BKI para hacer exactamente eso: crear el sistema de base de datos. De cualquier manera, los ficheros BKI de initdb son generalmente internos. Los genera usando los ficheros global1.bki.source y local1.template1.bki.source, que se encuentran en el directorio de "librerias" de Postgres. Estos se instalan aquí como parte de la instalación de Postgres. Estos ficheros .source se generan como parte del proceso de construcción de Postgres, construido por un programa llamado genbki. genbki toma como entrada los ficheros fuente de Postgres que sirven como entrada de genbki que construye tablas y ficheros de cabecera de C que describen estas tablas.
Información relacionada se puede encontrar en la documentación de initdb, createdb, y en el comando de SQL CREATE DATABASE.
Los backend de Postgres interpretan los ficheros BKI como se describe abajo. Esta descripción será más fácil de entender si cogemos el fichero global1.bki.source como ejemplo. (como se explica arriba, este fichero .source no es exactamente un fichero BKI, pero de todos modos serás capaz de suponer el resultado si fuese un fichero BKI).
Los comandos estan compuestos por el nombre del comando seguido por argumentos separados por espacios. Los argumentos de los comandos que comienzan por "$" se tratan de forma especial.. Si "$$" son los primeros dos caracteres, entonces el primer "$" se ignora y el argumento se procesa normalmente . Si el "$" va seguido por espacio, entonces se trata como un valor NULL. De otro modo, los caracteres seguidos de "$" se interpretan como el nombre de una macro esto provoca que el argumento se reemplace por el valor de la macro. Es un error que la macro no este definida.
Las macros se definen usando
define macro macro_name = macro_valuey se quita la definición usando
undefine macro macro_namey se redefine usando la misma sintaxis que en la definición.
Seguidamente se listan los comandos generales y los comandos de macro.