<!-- $Header: /usr/prj/pg/cvsroot/doc/doc/src/sgml/bki.sgml,v 1.10 2001/09/07 11:26:49 i-kaori Exp $ -->

<chapter id="bki">
<!-- <title><acronym>BKI</acronym> Backend Interface</title>-->
 <title>
   <acronym>BKI</acronym>――バックエンドインターフェイス
 </title>
<indexterm><primary>BKI</primary></indexterm><indexterm><primary>PostgreSQL</primary><secondary>BKI</secondary></indexterm><indexterm><primary sortas="ばっくえんどいんたーふぇいす">バックエンドインターフェイス</primary></indexterm>
<!-- <para>
  Backend Interface (<acronym>BKI</acronym>) files are scripts in a
  special language that are input to the
  <productname>Postgres</productname> backend running in the special
  <quote>bootstrap</quote> mode that allows it to perform database
  functions without a database system already existing.
  <acronym>BKI</acronym> files can therefore be used to create the
  database system in the first place.  (And they are probably not
  useful for anything else.)
 </para>-->

 <para>
  バックエンドインターフェイス（<acronym>BKI</acronym>）ファイルは特別な言語で書かれていて、<quote>bootstrap</quote>モードといわれる、すでに存在しているデータベースシステムを使用せずにデータベース機能を実行する特別なモードで実行されている<productname>Postgres</productname>のバックエンドに働きかけます。したがって、<acronym>BKI</acronym>ファイルはデータベースシステムを初めて作成するときに使用します（つまりそれ以外のときにはあまり有効ではありません）。
 </para>

<!-- <para>
  <application>initdb</application> uses <acronym>BKI</acronym> files
  to do part of its job when creating a new database cluster.  The
  input files used by <application>initdb</application> are created as
  part of building and installing <productname>Postgres</productname>
  by a program named <filename>genbki.sh</filename> from some
  specially formatted C header files in the source tree.  The created
  BKI files are called <filename>global.bki</filename> (for global
  catalogs) and <filename>template1.bki</filename> (for the catalogs
  initially stored in the template1 database and then duplicated in
  every created database) and are normally installed in the
  <filename>share</filename> subdirectory of the installation tree.
 </para>-->

 <para>

  <application>initdb</application>は、新しいデータベースクラスタを作成する際に<acronym>BKI</acronym>ファイルを使用します。<application>initdb</application>が使う入力ファイルは<productname>Postgres</productname>の構築時に<filename>genbki.sh</filename>というプログラムによって、ソースツリー内にある特別にフォーマットされたCのヘッダーファイルから作成されます。作成されたグローバルカタログのBKIファイルは<filename>global.bki</filename>と呼ばれます。また、template1データベースに格納されたカタログで、ほかに作成されたデータベースに複製されたものは<filename>template1.bki</filename>と呼ばれ、インストールツリーの<filename>share</filename>というサブディレクトリに通常インストールされます。
 </para>

<!-- <para>
  Related information may be found in the documentation for
  <application>initdb</application>.
 </para>-->

 <para>
  関連情報は<application>initdb</application>のドキュメントでも参照できます。
 </para>

 <sect1 id="bki-format">
<!--<title><acronym>BKI</acronym> File Format</title>-->
  <title><acronym>BKI</acronym>ファイルフォーマット</title>
<indexterm><primary>BKI</primary><secondary sortas="ふぁいるふぉーまっと">ファイルフォーマット</secondary></indexterm>
<!--  <para>
   This section describes how the <productname>Postgres</productname>
   backend interprets <acronym>BKI</acronym> files.  This description
   will be easier to understand if the <filename>global.bki</filename>
   file is at hand as an example.  You should also study the source
   code of <application>initdb</application> to get an idea of how the
   backend is invoked.
  </para>-->

  <para>
   このセクションでは<productname>Postgres</productname>のバックエンドがどのようにして<acronym>BKI</acronym>ファイルを解釈するのかを説明します。例として<filename>global.bki</filename>ファイルが手元にあると、この説明文は一層理解し易くなるでしょう。また、バックエンドがどのように起動されるかを理解するために<application>initdb</application>のソースコードを参照することもお勧めします。
  </para>

<!--<para>
   BKI input consists of a sequence of commands.  Commands are made up
   of a number of tokens, depending on the syntax of the command.
   Tokens are usually separated by whitespace, but need not be if
   there is no ambiguity.  There is not special command separator; the
   next token that syntactically cannot belong to the preceeding
   command starts a new one.  (Usually you would put a new command on
   a new line, for clarity.)  Tokens can be certain key words, special
   characters (parentheses, commas, etc.), numbers, or double-quoted
   strings.  Everything is case sensitive.
  </para>-->

  <para>
   BKIインプットはコマンドのシーケンスで構成されます。コマンドはいくつものトークンから構成されていて、コマンドのシンタックスに依存しています。トークンは通常スペースで分離されていますが、曖昧性がなければその必要性はありません。特別なコマンドセパレーターはありません。したがって、次のコマンドに統語論的に属せないトークンは新たなコマンドとなります（通常、わかりやすくするために、新しいコマンドは新しい行に書きます）。トークンはある一定のキーワードや特別な文字（かっこやカンマなど）、数字、二重引用符で囲まれた文字列などが使用できます。大文字/小文字はすべて区別されます。
  </para>

<!--<para>
   Lines starting with a <literal>#</literal> are ignored.
  </para>-->

  <para>
  <literal>#</literal>から始まる行は無視されます。
  </para>

 </sect1>

 <sect1 id="bki-commands">
<!--<title>BKI Commands</title>-->

  <title>BKIコマンド</title>
<indexterm><primary>BKI</primary><secondary sortas="こまんど">コマンド</secondary></indexterm>
  <variablelist>
   <varlistentry>
    <term>
     open <replaceable class="parameter">tablename</replaceable>
    </term>


    <listitem>
    <!-- <para>
      Open the table called
      <replaceable class="parameter">tablename</replaceable>
      for further manipulation.
     </para>-->

     <para>
      より詳細な取り扱いを表示させるために<replaceable class="parameter">tablename</replaceable>テーブルを開きます。
     </para>

    </listitem>
   </varlistentry>



   <varlistentry>
    <term>
     close <optional><replaceable class="parameter">tablename</replaceable></optional>
    </term>


    <listitem>
  <!--<para>
      Close the open table called <replaceable
      class="parameter">tablename</replaceable>.  It is an error if
      <replaceable class="parameter">tablename</replaceable> is not
      already opened.  If no <replaceable
      class="parameter">tablename</replaceable> is given, then the
      currently open table is closed.
     </para>-->

     <para>
      <replaceable class="parameter">tablename</replaceable>テーブルを閉じます。<replaceable class="parameter">tablename</replaceable>テーブルが開いていない場合にはエラーとなります。<replaceable class="parameter">tablename</replaceable>が指定されていない場合は、現在開かれているテーブルを閉じます。
     </para>

    </listitem>
   </varlistentry>

   <varlistentry>
  <term>
     create <replaceable class="parameter">tablename</replaceable>
     (<replaceable class="parameter">name1</replaceable> =
     <replaceable class="parameter">type1</replaceable> <optional>,
     <replaceable class="parameter">name2</replaceable> = <replaceable
     class="parameter">type2</replaceable>, ...</optional>)
    </term>


    <listitem>
  <!-- <para>
      Create a table named <replaceable
      class="parameter">tablename</replaceable> with the columns given
      in parentheses.
     </para>-->

     <para>
      <replaceable class="parameter">tablename</replaceable>というテーブルを作成します。その際、かっこ内にはカラム情報を入れます。
     </para>

   <!--<para>
      The <replaceable>type</replaceable> is not necessarily the data
      type that the column will have in the SQL environment; that is
      determined by the <structname>pg_attribute</structname> system
      catalog.  The type here is essentially only used to allocate
      storage.  The following types are allowed: <type>bool</type>,
      <type>bytea</type>, <type>char</type> (1 byte),
      <type>name</type>, <type>int2</type>, <type>int2vector</type>,
      <type>int4</type>, <type>regproc</type>, <type>text</type>,
      <type>oid</type>, <type>tid</type>, <type>xid</type>,
      <type>cid</type>, <type>oidvector</type>, <type>smgr</type>,
      <type>_int4</type> (array), <type>_aclitem</type> (array).
      Array types can also be indicated by writing
      <literal>[]</literal> after the name of the element type.
     </para>-->

     <para>
      <replaceable>type1</replaceable>は必ずしもSQL環境でカラムが持ちうるものではありません。それらは<structname>pg_attribute</structname>システムカタログで決められます。ここでの型はただ単に保管場所を確保するためにあります。使用可能な型は<type>bool</type>、<type>bytea</type>、<type>char</type>（1バイト）、<type>name</type>、<type>int2</type>、<type>int2vector</type>、<type>int4</type>、<type>regproc</type>、<type>text</type>、<type>oid</type>、<type>tid</type>、<type>xid</type>、<type>cid</type>、<type>oidvector</type>、<type>smgr</type>、<type>_int4</type>（配列）、<type>_aclitem</type>（配列）です。配列型は要素型名の後に<literal>[]</literal>のように書くこともできます。
     </para>

     <note>
      <!--<para>
       The table will only be created on disk, it will not
       automatically be registered in the system catalogs and will
       therefore not be accessible unless appropriate rows are
       inserted in <structname>pg_class</structname>,
       <structname>pg_attribute</structname>, etc.
      </para>-->

      <para>
       テーブルはディスク上でのみ作成され、システムカタログには自動的には登録されません。したがって、<structname>pg_class</structname>や<structname>pg_attribute</structname>などに適切な行が挿入されるまではアクセスすることができません。
      </para>

     </note>
    </listitem>
   </varlistentry>

   <varlistentry>
  <term>
     insert <optional>OID = <replaceable class="parameter">oid_value</replaceable></optional> (<replaceable class="parameter">value1</replaceable> <replaceable class="parameter">value2</replaceable> ...)
    </term>


    <listitem>
    <!-- <para>
      Insert a new row into the open table using <replaceable
      class="parameter">value1</replaceable>, <replaceable
      class="parameter">value2</replaceable>, etc., for its column
      values and <replaceable
      class="parameter">oid_value</replaceable> for its OID.  If
      <replaceable class="parameter">oid_value</replaceable> is zero
      (0) or the clause is ommitted, then the next available OID is
      used.
     </para>-->

     <para>
      <replaceable class="parameter">value1</replaceable>や <replaceable class="parameter">value2</replaceable>などをカラム値として、<replaceable class="parameter">oid_value</replaceable>をOIDとして用い、新しいテーブルに行を挿入します。また、<replaceable class="parameter">oid_value</replaceable>は新しいテーブルのOIDとします。もし<replaceable class="parameter">oid_value</replaceable>がゼロ（0）、またはOIDの指定が省略された場合は次の有効なOIDが割り当てられます。
     </para>

     <!--<para>
      NULL values can be specified using the special key word
      <literal>_null_</literal>.  Values containing spaces should be
      double quoted.
     </para>-->

     <para>
      NULLは特別なキーワード、<literal>_null_</literal>を使うことにより使用できます。スペースを含む値は二重引用符で囲みます。
     </para>

    </listitem>
   </varlistentry>

   <varlistentry>
    <term>
     declare <optional>unique</optional> index <replaceable
     class="parameter">indexname</replaceable> on <replaceable
     class="parameter">tablename</replaceable> using <replaceable
     class="parameter">amname</replaceable> (<replaceable
     class="parameter">opclass1</replaceable> <replaceable
     class="parameter">name1</replaceable> <optional>, ...</optional>)
    </term>

    <listitem>
  <!--<para>
      Create an index named <replaceable
      class="parameter">indexname</replaceable> on the table named
      <replaceable class="parameter">tablename</replaceable> using the
      <replaceable class="parameter">amname</replaceable> access
      method.  The fields to index are called <replaceable
      class="parameter">name1</replaceable>, <replaceable
      class="parameter">name2</replaceable> etc., and the operator
      classes to use are <replaceable
      class="parameter">opclass1</replaceable>, <replaceable
      class="parameter">opclass2</replaceable> etc., respectively.
     </para>-->

     <para>
      インデックスを<replaceable class="parameter">indexname</replaceable>という名前で<replaceable class="parameter">tablename</replaceable>に作成し、アクセスメソッドとして<replaceable class="parameter">amname</replaceable>を使用します。フィールドのインデックスは<replaceable class="parameter">name1</replaceable>、<replaceable class="parameter">name2</replaceable>などと呼ばれ、また、使用されるオペレータクラスは<replaceable class="parameter">opclass1</replaceable>、<replaceable class="parameter">opclass2</replaceable>などとそれぞれ呼ばれます。
     </para>

    </listitem>
   </varlistentry>

   <varlistentry>
    <!--<term>build indices</term>-->

    <term>インデックスの作成</term>

    <listitem>
  <!--<para>
      Build the indices that have previously been declared.
     </para>-->

     <para>
      宣言済みのインデックスを作成します。
     </para>

    </listitem>
   </varlistentry>
  </variablelist>

 </sect1>

 <sect1 id="bki-example">
  <!--<title>Example</title>-->

  <title>BKIの例</title>
<indexterm><primary>BKI</primary><secondary sortas="れい">例</secondary></indexterm>
  <!--<para>
   The following sequence of commands will create the
   <literal>test_table</literal> table with the two columns
   <literal>cola</literal> and <literal>colb</literal> of type
   <type>int4</type> and <type>text</type>, respectively, and insert
   two rows into the table.-->

  <para>
   下記の一連のコマンドは、2つのカラム（<type>int4</type>型の<literal>cola</literal>と<type>text</type>型の<literal>colb</literal>）で構成されるテーブル<literal>test_table</literal>を作成し、テーブルに2つの行を挿入します。
</para>

<programlisting>
create test_table (cola = int4, colb = text)
open test_table
insert OID=421 ( 1 "value1" )
insert OID=422 ( 2 _null_ )
close test_table
</programlisting>
 </sect1>
</chapter>

<!-- Keep this comment at the end of the file
Local variables:
mode:sgml
sgml-omittag:nil
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"./reference.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:("/usr/lib/sgml/catalog")
sgml-local-ecat-files:nil
End:
-->
