Los ficheros de interfaces (BKI) son scripts que sirven de entrada para los backend de Postgres ejecutándose en un modo 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.
Se puede encontrar información al respecto 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 le servirá para comprender el resultado si lo fuese.
Los comandos estan compuestos por un identificador 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, lo que provoca que el argumento se reemplace por el valor de la macro. Si la macro no está definida se genera un error.
Las macros se definen usando
define macro macro_name = macro_value |
undefine macro macro_name |
Seguidamente se listan los comandos generales y los comandos de macro.