<!--
$Header: /usr/prj/pg/cvsroot/doc/doc/src/sgml/manage-ag.sgml,v 1.9 2001/09/04 09:04:10 i-kaori Exp $
-->

<chapter id="managing-databases">
 <!--<title>Managing Databases</title>-->
 <title>データベース管理</title>
<indexterm><primary sortas="でーたべーすかんり">データベース管理</primary></indexterm>
<indexterm><primary>PostgreSQL</primary><secondary sortas="でーたべーすかんり">データベース管理</secondary></indexterm>

 <para>
  <!--A database is a named collection of SQL objects (<quote>database
  objects</quote>); every database object (tables, function, etc.)
  belongs to one and only one database. An application that connects
  to the database server specifies with its connection request the
  name of the database it wants to connect to. It is not possible to
  access more than one database per connection. (But an application
  is not restricted in the number of connections it opens to the same
  or other databases.)-->

  データベースとは、SQLオブジェクト（<quote>database objects</quote>）の名称集合（named collection）です。すべてのデータベースオブジェクト（テーブル、関数など）は1つのデータベースに所有されています。データベースサーバーに接続するアプリケーションは、接続したいデータベース名を特定して接続します。1つの接続で2つ以上のデータベースに接続することはできません（しかし、アプリケーションとデータベースとの接続数は制限がありません）。
 </para>

 <note>
  <para>
   <!--<acronym>SQL</> calls databases <quote>catalogs</>, but there is no
   difference in practice.-->

   <acronym>SQL</>では、データベースを<quote>カタログ</>（catalogs）と呼ぶこともありますが、違いはありません。
  </para>
 </note>

 <para>
  <!--In order to create or drop databases, the <productname>Postgres</>
  <application>postmaster</> must be up and running (see <xref
  linkend="postmaster-start">).-->

  データベースを作成、もしくは削除する場合、<productname>Postgres</>の<application>postmaster</>が起動している必要があります（<xref linkend="postmaster-start">を参照してください）。
 </para>

 <sect1 id="manage-ag-createdb">
  <!--<title>Creating a Database</title>-->
  <title>データベースの作成</title>
<indexterm><primary sortas="でーたべーす">データベース</primary><secondary sortas="さくせい">作成</secondary></indexterm>
<indexterm><primary>PostgreSQL</primary><secondary sortas="でーたべーすのさくせい">データベースの作成</secondary></indexterm>
  <para>
   <!--Databases are created with the query language command
   <command>CREATE DATABASE</command>:-->
   問い合わせ言語コマンドの<command>CREATE DATABASE</command>でデータベースを作成することができます。<indexterm><primary>CREATE DATABASE</primary></indexterm><indexterm><primary>SQL</primary><secondary>CREATE DATABASE</secondary></indexterm>
</para>

<synopsis>
CREATE DATABASE <replaceable>name</>
</synopsis>

<para>
   <!--where <replaceable>name</> can be chosen freely. (Depending on the
   current implementation, certain characters that are special to the
   underlying operating system might be prohibited. There will be
   run-time checks for that.) The current user automatically becomes
   the owner of the new database. It is the privilege of the owner of
   a database to remove it later on (which also removes all the
   objects in it, even if they have a different owner).-->

   <replaceable>name</>は自由に変更することができます（現在の実装では、OS環境下の特定の文字は使用することができないことがあります。その場合、実行時に検証が行われます）。現在のユーザーは自動的に新しいデータベースの所有者となります。作成後、データベースを削除する権限はこの所有者にあります（この作業はそのデータベースに属している、所有者のものではないオブジェクトでも、すべて削除されます）。
  </para>

  <para>
   <!--The creation of databases is a restricted operation. See <xref
   linkend="user-attributes"> how to grant permission.-->

   データベースの作成は限定された作業です。権限の承諾に関する詳細は<xref linkend="user-attributes">を参照してください。
  </para>

  <formalpara>
   <!--<title>Bootstrapping</title>-->
   <title>ブートストラッピング（Bootstrapping）</title>
<indexterm><primary sortas="ぶーとすとらっぷ">ブートストラップ</primary></indexterm>
   <para>
    <!--Since you need to be connected to the database server in order to
    execute the <command>CREATE DATABASE</command> command, the
    question remains how the <emphasis>first</> database at any given
    site can be created. The first database is always created by the
    <command>initdb</> command when the data storage area is
    initialized. (See <xref linkend="creating-cluster">.) This
    database is called <literal>template1</> and cannot be deleted. So
    to create the first <quote>real</> database you can connect to
    <literal>template1</>.-->

    <command>CREATE DATABASE</command>コマンドを実行するためには、データベースサーバーに接続している必要があります。そこで、まず<emphasis>最初の</>データベースはどのようにして作成するのかということが問題となります。最初のデータベースは<command>initdb</>コマンドでデータの格納スペースが初期化されるときに必ず<literal>template1</>という名前で作成されます。<literal>template1</>データベースは削除することはできません。したがって、最初の<quote>本当の</>データベースを作成するには<literal>template1</>に接続してください。<indexterm><primary>template1</primary></indexterm><indexterm><primary>PostgreSQL</primary><secondary>template1</secondary></indexterm>
   </para>
  </formalpara>

  <para>
   <!--The name <quote>template1</quote> is no accident: When a new
   database is created, the template database is essentially cloned.
   This means that any changes you make in <literal>template1</> are
   propagated to all subsequently created databases. This implies that
   you should not use the template database for real work, but when
   used judiciously this feature can be convenient.-->

   <quote>template1</quote>という名前はたまたまではありません。新しいデータベースが作成されたら、実際にテンプレートデータベースが複製されます。したがって、<literal>template1</>に変更を与えるとその後に作成されるデータベースすべてにその変更が反映されます。つまり、実際の作業で、その効果が有効である場合以外はテンプレートデータベースを実際に使用することは避けてください。</para>

  <para>
   <!--As an extra convenience, there is also a program that you can
   execute from the shell to create new databases,
   <filename>createdb</>.-->

   また、便利にするために、シェルから<filename>createdb</>を実行して、新しいデータベースを作成することができます。<indexterm><primary>createdb</primary></indexterm><indexterm><primary>PostgreSQL</primary><secondary>createdb</secondary></indexterm>
</para>

<synopsis>
createdb <replaceable class="parameter">dbname</replaceable>
</synopsis>

<para>
   <!--<filename>createdb</> does no magic. It connects to the template1
   database and executes the <command>CREATE DATABASE</> command,
   exactly as described above. It uses <application>psql</> program
   internally. The reference page on createdb contains the invocation
   details. In particular, createdb without any arguments will create
   a database with the current user name, which may or may not be what
   you want.-->

   <filename>createdb</>は、template1データベースに接続し、先に解説した<command>CREATE DATABASE</>コマンドを実行します。内部的に<application>psql</>プログラムを使用しています。createdbのリファレンスページに起動の詳細が書かれています。また、引数のないcreatedbは現在のユーザー名のデータベースを作成しますので、注意してください。
  </para>

  <sect2 id="sect2-alternative-locations">
   <!--<title>Alternative Locations</title>-->
   <title>データベースの代替領域</title>
<indexterm><primary sortas="でーたべーす">データベース</primary><secondary sortas="だいたいりょういき">代替領域</secondary></indexterm>
   <para>
    <!--It is possible to create a database in a location other than the
    default. Remember that all database access occurs through the
    database server backend, so that any location specified must be
    accessible by the backend.-->

    データベースをデフォルトの領域以外の場所に作成することも可能です。データベースへの接続はデータベースサーバーバックエンドを通じて行われるので、それらの領域はバックエンドから接続可能である必要があります。
   </para>

   <para>
    <!--Alternative database locations are referenced by an environment
    variable which gives the absolute path to the intended storage
    location. This environment variable must have been defined before
    the backend was started. Any valid environment variable name may
    be used to reference an alternative location, although using
    variable names with a prefix of <literal>PGDATA</> is recommended
    to avoid confusion and conflict with other variables.-->

    データベースの代替領域は環境変数内の絶対パスを使って参照されます。この環境変数はバックエンドが起動する前に定義されている必要があります。代替領域の環境変数名として特に使用しなければいけない名はありませんが、混乱を避けるために<literal>PGDATA</>を名前の先頭に付けて使うのがよいでしょう。
   </para>

   <para>
    <!--To create the variable in the environment of the server process
    you must first shut down the server, define the variable,
    initialize the data area, and finally restart the server. (See
    <xref linkend="postmaster-shutdown"> and <xref
    linkend="postmaster-start">.) To set an environment variable, type-->

    サーバープロセスの環境変数を作成するには、まずサーバーを停止させ、変数を定義してからデータ領域を初期化し、サーバーを再起動させます（<xref linkend="postmaster-shutdown">と<xref linkend="postmaster-start">を参照してください）。環境変数を設定するには、Bournシェルでは以下のように入力してください。</para>

    <informalexample>
<programlisting>
PGDATA2=/home/postgres/data
export PGDATA2
</programlisting>
    </informalexample>

    <!--in Bourne shells, or-->
<para>また、csh、tcshでは以下のように入力してください。</para>

    <informalexample>
<programlisting>
setenv PGDATA2 /home/postgres/data
</programlisting>

    </informalexample>
    <!--in csh or tcsh. You have to make sure that this environment
    variable is always defined in the server environment, otherwise
    you won't be able to access that database. Therefore you probably
    want to set it in some sort of shell start-up file or server
    start-up script.-->

<para>環境変数がサーバーの環境内で定義されていることを必ず確認してください。正しく設定されていなければデータベースに接続することはできません。したがって、環境変数はシェルの起動ファイルやサーバーの起動スクリプト内に定義することをお勧めします。
   </para>

   <para>
    <!--To create a data storage area in <envar>PGDATA2</>, ensure that
    <filename>/home/postgres</filename> already exists and is writable
    by the user account that runs the server (see <xref
    linkend="postgres-user">). Then from the command line, type-->

    <envar>PGDATA2</>にデータ記憶領域を作成する際、<filename>/home/postgres</filename>がすでに存在することを確認し、サーバーを起動させているユーザーが書き込めるようになっていることを確認してください（<xref linkend="postgres-user">を参照してください）。コマンドラインで以下のように入力してください。</para>

    <informalexample>
<programlisting>
initlocation PGDATA2
</programlisting>
    </informalexample>

<para>これでサーバーを再起動できます。
    <!--The you can restart the server.-->
   </para>

   <para>
    <!--To create a database at the new location, use the command-->
    データベースを新たな領域に作成するには、以下のコマンドを実行してください。
</para>

<synopsis>
CREATE DATABASE <replaceable>name</> WITH LOCATION = '<replaceable>location</>'
</synopsis>

<para>
    <!--where <replaceable>location</> is the environment variable you
    used, <envar>PGDATA2</> in this example. The <command>createdb</>
    command has the option <option>-D</> for this purpose.-->

    <replaceable>location</>には使用する環境変数（この場合は<envar>PGDATA2</>）をを入力します。<command>createdb</>の<option>-D</>オプションはこのためにあります。
   </para>

   <para>
    <!--Database created at alternative locations using this method can be
    accessed and dropped like any other database.-->

    代替領域に作成されたデータベースも他のデータベースと同様に接続したり、削除したりできます。
   </para>

   <note>
    <para>
     <!--It can also be possible to specify absolute paths directly to the
     <command>CREATE DATABASE</> command without defining environment
     variables. This is disallowed by default because it is a security
     risk. To allow it, you must compile <productname>Postgres</> with
     the C preprocessor macro <literal>ALLOW_ABSOLUTE_DBPATHS</>
     defined. One way to do this is to run the compilation step like
     this: <userinput>gmake CPPFLAGS=-DALLOW_ABSOLUTE_DBPATHS all</>.-->

    環境変数に絶対パスを定義しないで、<command>CREATE DATABASE</>コマンドに直接指定することも可能です。しかし、これはセキュリティの関係でデフォルトでは使用できないようになっています。可能にするには<productname>Postgres</>をコンパイルするときにCプリプロセッサのマクロ<literal>ALLOW_ABSOLUTE_DBPATHS</>を定義する必要があります。これの一例として、コンパイルのときに<userinput>gmake CPPFLAGS=-DALLOW_ABSOLUTE_DBPATHS all</>とする方法があります。
    </para>
   </note>

  </sect2>
 </sect1>

 <sect1 id="manage-ag-accessdb">
  <!--<title>Accessing a Database</title>-->
  <title>データベースへの接続</title>
<indexterm><primary sortas="でーたべーす">データベース</primary><secondary sortas="せつぞく">接続</secondary></indexterm>
<indexterm><primary>PostgreSQL</primary><secondary sortas="でーたべーすへのせつぞく">データベースへの接続</secondary></indexterm>
  <para>
   <!--Once you have constructed a database, you can access it by:-->
    データベースが作成されたら、以下の方法で接続することができます。
</para>

   <itemizedlist spacing="compact" mark="bullet">
    <listitem>
     <para>
      <!--running the <productname>Postgres</productname>  terminal  monitor  program 
      (<application>psql</application>) which allows you to interactively
      enter, edit, and execute <acronym>SQL</acronym> commands.-->

      <productname>Postgres</productname>のターミナルモニタプログラム（<application>psql</application>）を起動して、対話的に<acronym>SQL</acronym>コマンドを入力、編集、実行する。<indexterm><primary>psql</primary></indexterm><indexterm><primary>PostgreSQL</primary><secondary>psql</secondary></indexterm>
     </para>
    </listitem>

    <listitem>
     <para>
      <!--writing a  C  program  using  the  <literal>libpq</literal>  subroutine
      library.   This  allows  you  to submit <acronym>SQL</acronym> commands
      from C and get answers and status messages  back  to
      your  program.   This interface is discussed further
      in the <citetitle>PostgreSQL Programmer's Guide</citetitle>.-->

      <literal>libpq</literal>サブルーチンライブラリを使用してCプログラムを書く。これは<acronym>SQL</acronym>コマンドをCプログラムから受け取り、プログラムに結果とステータスメッセージを返す。このインターフェイスの詳細は<citetitle>&programmer-guide;</citetitle>を参照してください。<indexterm><primary>libpq</primary></indexterm><indexterm><primary>PostgreSQL</primary><secondary>libpq</secondary></indexterm>
     </para>
    </listitem>
   </itemizedlist>

<para>
   <!--You might want to start up <application>psql</application>, 
   to try out  the  examples  in  this manual. It can be activated for the
   <replaceable class="parameter">dbname</replaceable> database by typing the command:-->

   このマニュアルでは、いくつかの例の検証として<Application>psql</Application>をを起動しています。データベース<Database>mydb</Database>の起動には、以下のようにと入力します。
</para>

<programlisting>
psql <replaceable class="parameter">dbname</replaceable>
</programlisting>

<para>
   <!--You will be greeted with the following message:-->
    すると次のように表示されます。
</para>

<programlisting>
Welcome to psql, the PostgreSQL interactive terminal.

Type:  &bsol;copyright for distribution terms
       &bsol;h for help with SQL commands
       &bsol;? for help on internal slash commands
       &bsol;g or terminate with semicolon to execute query
       &bsol;q to quit

<replaceable>dbname</replaceable>=&gt;
</programlisting>

   <para>
    <!--This prompt indicates that the terminal monitor is listening  
    to you and that you can type <acronym>SQL</acronym> queries into a
    workspace maintained by the terminal monitor.
    The <application>psql</application> program responds to escape
    codes  that  begin
    with  the  backslash  character, "&bsol;".  For example, you
    can get help on the syntax of various 
    <productname>Postgres</productname> <acronym>SQL</acronym> commands by typing:-->

    このプロンプトは、ターミナルモニタは入力待ち状態で、ターミナルモニタが維持している作業スペースに<Acronym>SQL</Acronym>文を入力できることを示しています。<Application>psql</Application>プログラムはバックスラッシュ文字、「<literal>&bsol;</literal>」で始まるエスケープコードに応答します。<ProductName>PostgreSQL</ProductName> <Acronym>SQL</Acronym>文の文法のヘルプは、以下のように入力することで得ることができます。<indexterm><primary>SQL</primary><secondary sortas="へるぷ">ヘルプ</secondary></indexterm></para>

<programlisting>
<replaceable>dbname</replaceable>=> &bsol;h
</programlisting>

    <!--Once  you  have finished entering your queries into the
    workspace, you can pass the contents of  the  workspace
    to the <productname>Postgres</productname> server by typing:-->

<para>作業スペースへの問い合わせの入力が終了したら、次のように入力することで、作業スペースの内容を<ProductName>Postgres</ProductName>サーバーに渡すことができます。</para>

<programlisting>
<replaceable>dbname</replaceable>=> &bsol;g
</programlisting>

    <!--This  tells  the  server  to process the query.  If you
    terminate your query with a semicolon, the  backslash-g is  not
    necessary.   <application>psql</application> will automatically 
    process semicolon terminated queries.
    To read queries from a file,  instead  of
    entering them interactively, type:-->

<para>これは、サーバーに問い合わせの処理を督促します。問い合わせをセミコロンで終わらせた場合には、「<literal>&bsol;g</literal>」は必要ありません。<Application>psql</Application>は、セミコロンで終わった問い合わせを自動的に処理します。対話的に入力するのではなく、ファイルから問い合わせを読み込ませたい場合は以下のように入力します。</para>

<programlisting>
<replaceable>dbname</replaceable>=> &bsol;i <replaceable class="parameter">filename</replaceable>
</programlisting>

    <!--To get out of <application>psql</application> and return to Unix, type-->

<para><Application>psql</Application>から抜けてUNIXに戻るには下記のように入力します。</para>

<programlisting>
<replaceable>dbname</replaceable>=&gt; &bsol;q
</programlisting>

    <!--and  <application>psql</application>  will  quit  and  return  
    you to your command shell. (For more escape codes, type
    backslash-h at  the  monitor prompt.)
    White  space  (i.e.,  spaces, tabs and newlines) may be
    used freely in <acronym>SQL</acronym> queries.  
    Single-line comments  are  denoted  by two dashes-->

<para><Application>psql</Application>は終了し、コマンドシェルに戻ります（その他のエスケープコードについては、モニタのプロンプトで<Command>&bsol;?</Command>と入力してください）。空白（スペース、タブ、改行）は<Acronym>SQL</Acronym>文の中で自由に使うことができます。1行のコメントはハイフン2つ（"<literal>--</literal>"）で表します。
<!--
    Everything  after the dashes up to the end of the
    line is ignored. Multiple-line comments, and comments within a line,
    are denoted by "<literal>/* ... */</literal>", a convention borrowed
    from <productname>Ingres</productname>.
-->
ハイフンの後の行の最後まではすべて無視されます。複数行のコメントと、行の中にいれるコメントは<productname>Ingres</productname>の規約から拝借した「<literal>/* ... */</literal>」で表します。

   </para>
 </sect1>
     
 <sect1 id="manage-ag-dropdb">
  <!--<title>Destroying a Database</title>-->
      <Title>データベースの削除</Title>
<indexterm><primary sortas="でーたべーす">データベース</primary><secondary sortas="さくじょ">削除</secondary></indexterm>
<indexterm><primary>PostgreSQL</primary><secondary sortas="でーたべーすのさくじょ">データベースの削除</secondary></indexterm>
  <para>
   <!--Databases are destroyed with the command <command>DROP DATABASE</command>:-->

   データベースの削除には<command>DROP DATABASE</command>コマンドを使用します。<indexterm><primary>DROP DATABASE</primary></indexterm><indexterm><primary>SQL</primary><secondary>DROP DATABASE</secondary></indexterm>
</para>

<synopsis>
DROP DATABASE <replaceable>name</>
</synopsis>

<para>
   <!--Only the owner of the database (i.e., the user that created it) can
   drop databases. Dropping a databases removes all objects that were
   contained within the database. The destruction of a database cannot
   be undone.-->

   データベースの所有者（データベースを作成した人）のみがデータベースを削除することができます。データベースの削除はそのデータベースに付随/関連するすべてのオブジェクトを削除します。また、削除されたデータベースは復元ができません。
  </para>

  <para>
   <!--You cannot execute the <command>DROP DATABASE</command> command
   while connected to the victim database. You can, however, be
   connected to any other database, including the template1 database,
   which would be the only option for dropping the last database of a
   given cluster.-->

   削除しようとしているデータベースに接続しているときには削除はできません。しかし、その他のデータベースに接続したり、そのクラスタの最後のデータベースを削除するときにtemplate1データベースに接続していても問題ありません。
  </para>

  <para>
   <!--For convenience, there is also a shell program to drop databases:-->

   dropdbを使ってシェルからデータベースを削除することも可能です（<command>createdb</>と違って、デフォルトで現在のユーザー名のデータベースを削除するようにはなっていません）。<indexterm><primary>dropdb</primary></indexterm><indexterm><primary>PostgreSQL</primary><secondary>dropdb</secondary></indexterm>
</para>

<synopsis>
dropdb <replaceable class="parameter">dbname</replaceable>
</synopsis>

   <!--(Unlike <command>createdb</>, it is not the default action to drop
   the database with the current user name.)-->

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