<!--
$Header: /usr/prj/pg/cvsroot/doc/doc/src/sgml/ref/create_database.sgml,v 1.5 2001/09/14 10:06:06 t-ishii Exp $
Postgres documentation
-->

<refentry id="SQL-CREATEDATABASE">
 <refmeta>
  <refentrytitle id="sql-createdatabase-title">
   CREATE DATABASE
  </refentrytitle>
  <refmiscinfo>SQL<!-- Language Statements -->言語</refmiscinfo>
 </refmeta>
 <refnamediv>
  <refname>
   CREATE DATABASE
  </refname>
  <refpurpose>
   <!-- Creates a new database -->
   新しいデータベースを作成します。<indexterm><primary>CREATE DATABASE</primary></indexterm><indexterm><primary>SQL</primary><secondary>CREATE DATABASE</secondary></indexterm><indexterm><primary sortas="でーたべーす">データベース</primary><secondary sortas="さくせい">作成</secondary></indexterm>
  </refpurpose>
 </refnamediv>
 <refsynopsisdiv>
  <refsynopsisdivinfo>
   <date>1999-12-11</date>
  </refsynopsisdivinfo>
<synopsis>
CREATE DATABASE <replaceable class="PARAMETER">name</replaceable>
    [ WITH [ LOCATION = '<replaceable class="parameter">dbpath</replaceable>' ]
           [ TEMPLATE = <replaceable class="parameter">template</replaceable> ]
           [ ENCODING = <replaceable class="parameter">encoding</replaceable> ] ]
</synopsis>

  <refsect2 id="R2-SQL-CREATEDATABASE-1">
   <refsect2info>
    <date>1999-12-11</date>
   </refsect2info>
   <title>
    <!-- Inputs -->入力
   </title>

    <variablelist>
     <varlistentry>
      <term><replaceable class="parameter">name</replaceable></term>
      <listitem>
       <para>
	<!-- The name of a database to create. -->
        作成するデータベースの名前です。

       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><replaceable class="parameter">dbpath</replaceable></term>
      <listitem>
       <para>
        <!-- 
	An alternate filesystem location in which to store the 
        new database, specified as a string literal;
	or <literal>DEFAULT</literal> to use the default location.
        -->

        新しいデータベースを格納するためのファイルシステムの代わりの場所で、文字列リテラルとして指定されます。もしくはデフォルトの場所を使う場合は<literal>DEFAULT</literal>です。

       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><replaceable class="parameter">template</replaceable></term>
      <listitem>
       <para>
        <!-- 
        Name of template from which to create the new database,
	or <literal>DEFAULT</literal> to use the default template
	(<literal>template1</literal>). -->

        新しいデータベースを作成するテンプレートの名前、もしくはデフォルトテンプレート（<literal>template1</literal>）を使う<literal>DEFAULT</literal>です。

       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><replaceable class="parameter">encoding</replaceable></term>
      <listitem>
       <para>
        <!-- 
        Multibyte encoding method to use in the new database.  Specify
	a string literal name (e.g., <literal>'SQL_ASCII'</literal>),
	or an integer encoding number, or <literal>DEFAULT</literal>
	to use the default encoding. -->

        新しいデータベースで使うためのマルチバイトエンコードメソッドです。文字列リテラル名（たとえば<literal>'SQL_ASCII'</literal>）、もしくは整数エンコード番号、もしくはデフォルトエンコーディングを使う<literal>DEFAULT</literal>です。

       </para>
      </listitem>
     </varlistentry>
    </variablelist>
  </refsect2>

  <refsect2 id="R2-SQL-CREATEDATABASE-2">
   <refsect2info>
    <date>1999-12-11</date>
   </refsect2info>
   <title>
    <!-- Outputs -->出力
   </title>

    <variablelist>
     <varlistentry>
      <term><computeroutput>CREATE DATABASE</computeroutput></term>
      <listitem>
       <para>
        <!-- 
	Message returned if the command completes successfully.
        -->
        コマンドが問題なく実行された場合に返されるメッセージです。
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><computeroutput>ERROR:  user '<replaceable class="parameter">username</replaceable>' is not allowed to create/drop databases</computeroutput></term>
      <listitem>
       <para>
        <!-- 
        You must have the special CREATEDB privilege to create databases.
        See <xref linkend="SQL-CREATEUSER" endterm="SQL-CREATEUSER-title">.
        -->

        データベースを作成するには特別なCREATEDB権限を持っていなければいけません。<xref linkend="SQL-CREATEUSER" endterm="SQL-CREATEUSER-title">を参照してください。

       </para>
      </listitem>
     </varlistentry>


     <varlistentry>
      <term><computeroutput>ERROR:  createdb: database "<replaceable class="parameter">name</replaceable>" already exists</computeroutput></term>
      <listitem>
       <para>
        <!-- 
	This occurs if a database with the 
        <replaceable class="parameter">name</replaceable>
        specified already exists. -->

        これは<replaceable class="parameter">name</replaceable>で指定されたデータベースがすでに存在する場合のエラーです。

       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><computeroutput>ERROR:  database path may not contain single quotes</computeroutput></term>
      <listitem>
       <para>
	<!-- The database location
        <replaceable class="parameter">dbpath</replaceable> cannot contain
        single quotes. This is required so that the shell commands that
        create the database directory can execute safely. -->

        データベースの場所<replaceable class="parameter">dbpath</replaceable>に一重引用符が含まれてはいけません。これはデータベースディレクトリを作成するshellコマンドが問題なく実行できるようにするために要求されるものです。

       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><computeroutput>ERROR:  CREATE DATABASE: may not be called in a transaction block</computeroutput></term>
      <listitem>
       <para>
        <!-- 
        If you have an explicit transaction block in progress you 
        cannot call <command>CREATE DATABASE</command>. 
        You must finish the transaction first. -->

        もし稼働中の明示的なトランザクションブロックがある場合<command>CREATE DATABASE</command>は呼び出せません。まずトランザクションを終了させてください。

       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><computeroutput>ERROR:  Unable to create database directory '<replaceable>path</replaceable>'.</computeroutput></term>
      <term><computeroutput>ERROR:  Could not initialize database directory.</computeroutput></term>
      <listitem>
       <para>
        <!-- 
        These are most likely related to insufficient permissions on 
        the data directory, a full disk, or other file system problems. 
        The user under which the database server is running must have 
        access to the location. -->

        これらはデータディレクトリに対しての無効な権限、ディスク容量不足、もしくはその他のファイルシステムの問題の可能性があります。データベースサーバーを走らせているユーザーがその場所へのアクセス権限を持っていなければいけません。

       </para>
      </listitem>
     </varlistentry>

    </variablelist>
  </refsect2>
 </refsynopsisdiv>

 <refsect1 id="R1-SQL-CREATEDATABASE-1">
  <refsect1info>
   <date>1999-12-11</date>
  </refsect1info>
  <title>
   <!-- Description -->説明
  </title>
  <para>
   <!-- <command>CREATE DATABASE</command> creates a new
   <productname>Postgres</productname> database.
   The creator becomes the owner of the new database. -->

   <command>CREATE DATABASE</command>は新しい<productname>Postgres</productname>データベースを作成します。作成者は新しいデータベースの所有者になります。

  </para>

  <para>
   <!-- 
   An alternate location can be specified in order to,
   for example, store the database on a different disk.
   The path must have been prepared with the 
   <xref linkend="APP-INITLOCATION" endterm="APP-INITLOCATION-title">
   command. -->

   たとえば別のディスクにデータベースを格納したりするために、代わりの場所を指定することができます。パスは<xref linkend="APP-INITLOCATION" endterm="APP-INITLOCATION-title">で用意しなければいけません。

  </para>
  <para>
   <!-- 
   If the path name does not contain a slash, it is interpreted
   as an environment variable name, which must be known to the
   server process. This way the database administrator can
   exercise control over locations in which databases can be created.
   (A customary choice is, e.g., '<envar>PGDATA2</envar>'.)
   If the server is compiled with <literal>ALLOW_ABSOLUTE_DBPATHS</literal>
   (not so by default), absolute path names, as identified by
   a leading slash
   (e.g., '<filename>/usr/local/pgsql/data</filename>'),
   are allowed as well. -->

   もしパス名がスラッシュ「/」を含まない場合、環境変数名として解釈され、サーバープロセスに知らせなければなりません。この方法でデータベース管理者はデータベースを作ることができる場所を管理することができます（慣習的な選択例は<envar>PGDATA2</envar>です）。もしサーバーが<literal>ALLOW_ABSOLUTE_DBPATHS</literal>でコンパイルされている場合（デフォルトではそうではありません）、スラッシュで始まることで識別される絶対パス名（たとえば、'<filename>/usr/local/pgsql/data</filename>'）も許されます。<indexterm><primary>/</primary></indexterm><indexterm><primary sortas="ぱすめい">パス名</primary></indexterm>
   

  </para>

  <para>
   <!-- 
   By default, the new database will be created by cloning the standard
   system database <literal>template1</>.  A different template can be
   specified by writing <literal>TEMPLATE =</>
   <replaceable class="parameter">name</replaceable>.  In particular,
   by writing <literal>TEMPLATE = template0</>, you can create a virgin
   database containing only the standard objects predefined by your
   version of Postgres.  This is useful if you wish to avoid copying
   any installation-local objects that may have been added to template1.
   -->

   デフォルトでは、新しいデータベースは標準システムデータベース<literal>template1</>を複製することによって作成されます。別のテンプレートは<literal>TEMPLATE =</><replaceable class="parameter">name</replaceable>と書くことで指定できます。特に、<literal>TEMPLATE = template0</>と書くことで、使用しているPostgresのバージョンによって定義済みの標準オブジェクトのみを持つ新しいデータベースを作ることができます。これはもしtemplate1に追加されたローカルインストールオブジェクトのコピーを避けたいという場合に便利です。

  </para>

  <para>
   <!-- 
   The optional encoding parameter allows selection of the database 
   encoding, if your server was compiled with multibyte encoding 
   support.  When not specified, it defaults to the encoding used 
   by the selected template database. -->

   もし使用しているサーバーがマルチバイトエンコードサポートでコンパイルされている場合、オプションのエンコードパラメータはデータベースエンコードの選択を可能にします。指定されないと、選択されたテンプレートデータベースに使われるエンコードがデフォルトになります。

  </para>

  <para>
   <!-- 
   Optional parameters can be written in any order, not only the order
   illustrated above. -->

   オプションのパラメータは上記で示された順番だけでなく、どのような順番でも書くこともできます。

  </para>

  <refsect2 id="R2-SQL-CREATEDATABASE-3">
   <refsect2info>
    <date>1999-12-11</date>
   </refsect2info>
   <title>
    <!-- Notes -->注釈
   </title>
   <para>
    <!--  
    <command>CREATE DATABASE</command> is a 
    <productname>Postgres</productname> language extension. -->

    <command>CREATE DATABASE</command>は<productname>Postgres</productname>の言語拡張です。

   </para>
   <para>
    <!-- 
    Use <xref linkend="SQL-DROPDATABASE" endterm="SQL-DROPDATABASE-title"> 
    to remove a database. -->

    データベースを削除するには<xref linkend="SQL-DROPDATABASE" endterm="SQL-DROPDATABASE-title">を使います。

   </para>
   <para>
    <!-- 
    The program <xref linkend="APP-CREATEDB" endterm="APP-CREATEDB-title"> is a
    shell script wrapper around this command, provided for convenience.
    -->

    プログラム<xref linkend="APP-CREATEDB" endterm="APP-CREATEDB-title">は利便性のために提供される、このコマンドのshellスクリプトラッパーです。

   </para>

   <para>
    <!-- There are security and data integrity issues
    involved with using alternate database locations
    specified with absolute path names, and by default
    only an environment variable known to the backend may be
    specified for an alternate location.
    See the Administrator's Guide for more information. -->

    これらは絶対パス名で指定される代わりのデータベースの場所の使用と関連するセキュリティとデータの完全性の問題があり、デフォルトではバックエンドに認識される環境変数のみが代わりの場所として指定できます。さらに詳しいことは<citetitle>&admin-guide;</citetitle>を参照してください。

   </para>

<!--
comment from Olly; response from Thomas...
  <comment>
   initlocation does not create a PG_VERSION file in the specified location.
   How will Postgres handle the situation if it is upgraded to an 
   incompatible database version?
  </comment>
   Hmm. This isn't an issue since the upgrade would do
   a dump/reload from the main database area also.
   Not sure if the dump/reload would guarantee that
   the alternate data area gets refreshed though...
-->

  <para>
   <!-- 
   Although it is possible to copy a database other than template1 by
   specifying its name as the template, this is not (yet) intended as
   a general-purpose COPY DATABASE facility.  In particular, it is
   essential that the source database be idle (no data-altering transactions
   in progress)
   for the duration of the copying operation.  CREATE DATABASE will check
   that no backend processes (other than itself) are connected to
   the source database at the start of the operation, but this does not
   guarantee that changes cannot be made while the copy proceeds.  Therefore,
   we recommend that databases used as templates be treated as read-only.
   -->

   template1以外のデータベースの名前をテンプレートに指定することによってコピーすることは可能ですが、これは（まだ）一般的な目的のCOPY DATABASE機能として意図されているわけではありません。特に、ソースデータベースがアイドル状態（データ変更トランザクションが動いていない状態）であることがこのコピー操作の持続には欠かせません。CREATE DATABASEは操作の開始において（自分以外の）バックエンドプロセスがソースとなるデータベースに接続していないことを確認しますが、コピーの進行が行われている間変更をできないというような保証はしません。したがって、テンプレートとして使われるデータベースは読み込みのみとして扱うことをお勧めします。

  </para>

  <para>
   <!-- 
   Two useful flags exist in <literal>pg_database</literal> for each
   database: <literal>datistemplate</literal> and
   <literal>datallowconn</literal>.  <literal>datistemplate</literal>
   may be set to indicate that a database is intended as a template for
   CREATE DATABASE.  If this flag is set, the database may be cloned by
   any user with CREATEDB privileges; if it is not set, only superusers
   and the owner of the database may clone it.
   If <literal>datallowconn</literal> is false, then no new connections
   to that database will be allowed (but existing sessions are not killed
   simply by setting the flag false).  The <literal>template0</literal>
   database is normally marked this way to prevent modification of it.
   -->

   それぞれのデータベースに便利な2つのフラグが<literal>pg_database</literal>の中にあります。<literal>datistemplate</literal>と<literal>datallowconn</literal>です。データベースがCREATE DATABASEのテンプレートとして意図されていることを示すために<literal>datistemplate</literal>を設定することができます。もしこのフラグが設定されると、データベースはCREATEDB権限を持つどのユーザーでも複製できます。これが設定されていないと、スーパーユーザーとデータベースの所有者のみが複製することができます。もし<literal>datallowconn</literal>がfalseの場合、そのデータベースへの新しい接続が許されません（しかし既存のセッションはフラグを偽にするだけでは中断されません）。<literal>template0</literal>データベースは通常このように変更を防ぐために識別されています。

  </para>
  </refsect2>
 </refsect1>

 <refsect1 id="R1-SQL-CREATEDATABASE-2">
  <title>
   <!-- Usage -->使用方法
  </title>
  <para>
   <!-- To create a new database: -->
   新しいデータベースを作成するには以下のようにします。
</para>

<programlisting>
<prompt>olly=></prompt> <userinput>create database lusiadas;</userinput>
</programlisting>

  <para>
   <!-- To create a new database in an alternate area 
   <filename>~/private_db</filename>: -->

   デフォルト以外の場所に新しいデータベースを作る方法については<citetitle>&admin-guide;</citetitle><xref linkend="managing-databases">の<xref linkend="sect2-alternative-locations">を参照してください。

  </para>
 </refsect1>

 <refsect1 id="R1-SQL-CREATEDATABASE-4">
  <title>
   <!-- Compatibility -->互換性
  </title>

  <refsect2 id="R2-SQL-CREATEDATABASE-4">
   <refsect2info>
    <date>1998-04-15</date>
   </refsect2info>
   <title>
    SQL92
   </title>
   <para>
    <!-- 
    There is no <command>CREATE DATABASE</command> statement in SQL92.
    Databases are equivalent to catalogs whose creation is 
    implementation-defined. -->

    SQL92には<command>CREATE DATABASE</command>はありません。データベースは実装で生成が定義されるカタログと同等のものです。

   </para>
  </refsect2>
 </refsect1>
</refentry>

<!-- 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:
-->
