codekingpro/portable-devtools
115k
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 75. System Catalog Declarations and Initial Contents</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><link rev="made" href="pgsql-docs@lists.postgresql.org" /><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><link rel="prev" href="two-phase.html" title="74.4. Two-Phase Transactions" /><link rel="next" href="system-catalog-declarations.html" title="75.1. System Catalog Declaration Rules" /></head><body id="docContent" class="container-fluid col-10"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="5" align="center">Chapter 75. System Catalog Declarations and Initial Contents</th></tr><tr><td width="10%" align="left"><a accesskey="p" href="two-phase.html" title="74.4. Two-Phase Transactions">Prev</a> </td><td width="10%" align="left"><a accesskey="u" href="internals.html" title="Part VII. Internals">Up</a></td><th width="60%" align="center">Part VII. Internals</th><td width="10%" align="right"><a accesskey="h" href="index.html" title="PostgreSQL 16.3 Documentation">Home</a></td><td width="10%" align="right"> <a accesskey="n" href="system-catalog-declarations.html" title="75.1. System Catalog Declaration Rules">Next</a></td></tr></table><hr /></div><div class="chapter" id="BKI"><div class="titlepage"><div><div><h2 class="title">Chapter 75. System Catalog Declarations and Initial Contents</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="system-catalog-declarations.html">75.1. System Catalog Declaration Rules</a></span></dt><dt><span class="sect1"><a href="system-catalog-initial-data.html">75.2. System Catalog Initial Data</a></span></dt><dd><dl><dt><span class="sect2"><a href="system-catalog-initial-data.html#SYSTEM-CATALOG-INITIAL-DATA-FORMAT">75.2.1. Data File Format</a></span></dt><dt><span class="sect2"><a href="system-catalog-initial-data.html#SYSTEM-CATALOG-OID-ASSIGNMENT">75.2.2. OID Assignment</a></span></dt><dt><span class="sect2"><a href="system-catalog-initial-data.html#SYSTEM-CATALOG-OID-REFERENCES">75.2.3. OID Reference Lookup</a></span></dt><dt><span class="sect2"><a href="system-catalog-initial-data.html#SYSTEM-CATALOG-AUTO-ARRAY-TYPES">75.2.4. Automatic Creation of Array Types</a></span></dt><dt><span class="sect2"><a href="system-catalog-initial-data.html#SYSTEM-CATALOG-RECIPES">75.2.5. Recipes for Editing Data Files</a></span></dt></dl></dd><dt><span class="sect1"><a href="bki-format.html">75.3. <acronym class="acronym">BKI</acronym> File Format</a></span></dt><dt><span class="sect1"><a href="bki-commands.html">75.4. <acronym class="acronym">BKI</acronym> Commands</a></span></dt><dt><span class="sect1"><a href="bki-structure.html">75.5. Structure of the Bootstrap <acronym class="acronym">BKI</acronym> File</a></span></dt><dt><span class="sect1"><a href="bki-example.html">75.6. BKI Example</a></span></dt></dl></div><p>3 <span class="productname">PostgreSQL</span> uses many different system catalogs4 to keep track of the existence and properties of database objects, such as5 tables and functions. Physically there is no difference between a system6 catalog and a plain user table, but the backend C code knows the structure7 and properties of each catalog, and can manipulate it directly at a low8 level. Thus, for example, it is inadvisable to attempt to alter the9 structure of a catalog on-the-fly; that would break assumptions built into10 the C code about how rows of the catalog are laid out. But the structure11 of the catalogs can change between major versions.12 </p><p>13 The structures of the catalogs are declared in specially formatted C14 header files in the <code class="filename">src/include/catalog/</code> directory of15 the source tree. For each catalog there is a header file16 named after the catalog (e.g., <code class="filename">pg_class.h</code>17 for <code class="structname">pg_class</code>), which defines the set of columns18 the catalog has, as well as some other basic properties such as its OID.19 </p><p>20 Many of the catalogs have initial data that must be loaded into them21 during the <span class="quote">“<span class="quote">bootstrap</span>”</span> phase22 of <span class="application">initdb</span>, to bring the system up to a point23 where it is capable of executing SQL commands. (For24 example, <code class="filename">pg_class.h</code> must contain an entry for itself,25 as well as one for each other system catalog and index.) This26 initial data is kept in editable form in data files that are also stored27 in the <code class="filename">src/include/catalog/</code> directory. For example,28 <code class="filename">pg_proc.dat</code> describes all the initial rows that must29 be inserted into the <code class="structname">pg_proc</code> catalog.30 </p><p>31 To create the catalog files and load this initial data into them, a32 backend running in bootstrap mode reads a <acronym class="acronym">BKI</acronym>33 (Backend Interface) file containing commands and initial data.34 The <code class="filename">postgres.bki</code> file used in this mode is prepared35 from the aforementioned header and data files, while building36 a <span class="productname">PostgreSQL</span> distribution, by a Perl script37 named <code class="filename">genbki.pl</code>.38 Although it's specific to a particular <span class="productname">PostgreSQL</span>39 release, <code class="filename">postgres.bki</code> is platform-independent and is40 installed in the <code class="filename">share</code> subdirectory of the41 installation tree.42 </p><p>43 <code class="filename">genbki.pl</code> also produces a derived header file for44 each catalog, for example <code class="filename">pg_class_d.h</code> for45 the <code class="structname">pg_class</code> catalog. This file contains46 automatically-generated macro definitions, and may contain other macros,47 enum declarations, and so on that can be useful for client C code that48 reads a particular catalog.49 </p><p>50 Most PostgreSQL developers don't need to be directly concerned with51 the <acronym class="acronym">BKI</acronym> file, but almost any nontrivial feature52 addition in the backend will require modifying the catalog header files53 and/or initial data files. The rest of this chapter gives some54 information about that, and for completeness describes55 the <acronym class="acronym">BKI</acronym> file format.56 </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="two-phase.html" title="74.4. Two-Phase Transactions">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="internals.html" title="Part VII. Internals">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="system-catalog-declarations.html" title="75.1. System Catalog Declaration Rules">Next</a></td></tr><tr><td width="40%" align="left" valign="top">74.4. Two-Phase Transactions </td><td width="20%" align="center"><a accesskey="h" href="index.html" title="PostgreSQL 16.3 Documentation">Home</a></td><td width="40%" align="right" valign="top"> 75.1. System Catalog Declaration Rules</td></tr></table></div></body></html>