<Chapter Id="arch">
<!--	<TITLE>Architecture</TITLE> -->
	<TITLE><ProductName>Postgres</ProductName>の構造</TITLE>
<indexterm><primary>PostgreSQL</primary><secondary sortas="こうぞう">構造</secondary></indexterm>

<Sect1 id="arch-concepts">
<!-- <Title><ProductName>Postgres</ProductName> Architectural Concepts</Title> -->
<Title><ProductName>Postgres</ProductName>の構造的概念</Title>

<para>
     <!-- Before we begin, you  should  understand  the  basic
     <ProductName>Postgres</ProductName>  system  architecture.   
     Understanding how the parts of <ProductName>Postgres</ProductName> 
     interact will make the  next  chapter somewhat clearer.
     In  database  jargon,  <ProductName>Postgres</ProductName> uses a simple 
     "process per-user" client/server model.  A <ProductName>Postgres</ProductName> 
     session consists of the following cooperating Unix processes 
    (programs): -->

     本題に入る前に、まず<ProductName>Postgres</ProductName>の基本的な構造的概念を理解することが必要です。<ProductName>Postgres</ProductName>のパーツがどのように相互作用するかを理解することによって、次の章がより正確に理解できることでしょう。データベース用語でいうと、<ProductName>Postgres</ProductName>は「1ユーザーに対し1プロセス」のクライアント/サーバーモデルを使用しています。<ProductName>Postgres</ProductName>のセッションは次に挙げるUnixプロセス（プログラム）が協力しあって構成されています。
</para>

<ItemizedList>
<ListItem>
<para>
      	<!-- A supervisory daemon process (<Application>postmaster</Application>), -->
        デーモン管理プロセス（<Application>postmaster</Application>）
</para>
</ListItem>
<ListItem>
<para>
      	<!-- the user's frontend application (e.g., the <Application>psql</Application> program), and -->
        ユーザーのフロントエンドアプリケーション（たとえば<Application>psql</Application>プログラム）
</para>
</ListItem>
<ListItem>
<para>
      	<!--  the  one or more backend database servers (the <Application>postgres</Application> process itself). -->
        1つ以上のバックエンドサーバー（<Application>postgres</Application>プロセス自身）
</para>
</ListItem>
</ItemizedList>
<!--
<para>
     A single  <Application>postmaster</Application>  manages  a  given  collection  of
     databases  on  a  single  host.   Such  a collection of
     databases is called a cluster (of databases).   Frontend
     applications  that  wish  to  access  a  given database
     within a cluster make calls to the   library.
     The library sends user requests over the network to the
     <Application>postmaster</Application> (<XRef LinkEnd="ARCH-CLIENTSERVER">),
     which in turn  starts  a  new backend  server  process -->

<para>
     1つの<Application>postmaster</Application><indexterm><primary>portmaster</primary></indexterm>は、1つのホスト上のデータベースの集まりを管理します。そのようなデータベースの集まりは（データベースの）<firstterm>クラスタ</firstterm><indexterm><primary sortas="くらすた">クラスタ</primary></indexterm>と呼ばれます。クラスタ中のデータベースにアクセスしようとするフロントエンドアプリケーションは、libpqライブラリを呼び出します。ライブラリはネットワークを介してユーザーのリクエストを<Application>postmaster</Application><!--（<XRef LinkEnd="ARCH-CLIENTSERVER">）-->に送ります。するとpostmasterは、代わりに新しいバックエンドサーバープロセスを起動します。
</para>

<!--
<figure Id="ARCH-CLIENTSERVER">
<!&bsol;-&bsol;- <Title>How a connection is established</Title> &bsol;-&bsol;->
<Title>接続の方法</Title>
<Graphic Align="center" FileRef="clientserver.gif" Format="GIF"></Graphic>
</Figure>
-->

<!--     and connects the
     frontend process to the new server.  From
     that  point  on,  the  frontend process and the backend
     server communicate without intervention by the 
     <Application>postmaster</Application>.   Hence, the <Application>postmaster</Application> is always running, waiting
     for requests, whereas frontend  and  backend  processes
     come  and  go. -->

<para>
     そこで、フロントエンドプロセスは、postmasterが生成した新しいサーバーここからは、フロントエンドプロセスとバックエンドサーバーは<Application>postmaster</Application>の介入なしで通信します。ですから、フロントエンドとバックエンドプロセスが生成/削減を繰り返すのに対して、<Application>postmaster</Application>は常にリクエストを待ちながら稼働しています。
</para>

<para>
     <!-- The <FileName>libpq</FileName> library allows a single 
     frontend to make multiple connections to backend processes.
     However,  the  frontend  application is still a 
     single-threaded process.  Multithreaded frontend/backend  
     connections are not currently supported in <FileName>libpq</FileName>.
     One  implication of this architecture is that the 
     <Application>postmaster</Application> and the backend always run on the  same  
     machine (the  database  server), while the frontend 
     application may run  anywhere.   You  should  keep  this  
     in  mind,
     because  the  files  that  can  be accessed on a client
     machine may not be accessible (or may only be  accessed
     using  a  different  filename)  on  the database server
     machine. -->

     <FileName>libpq</FileName>ライブラリは、1つのフロントエンドがバックエンドプロセスに対して複数の接続を行うことができます。しかし、フロントエンドアプリケーションはやはりシングルスレッドプロセスです。マルチスレッドのフロントエンド/バックエンド接続は現在のところ<FileName>libpq</FileName>ではサポートされていません。この構造が意味することの1つとして、フロントエンドアプリケーションはどこで稼働してもよいのに対し、<Application>postmaster</Application>とバックエンドは常に同じマシン（データベースサーバー）で稼働しなければいけないということがあります。このことはよく覚えておいてください。なぜなら、クライアントマシンでアクセスできるファイルでもデータベースサーバーマシンにはアクセスできない（もしくは別のファイル名を使わなければアクセスできない）可能性があるからです。
</para>

<para>
     <!--  You should also be aware that the 
     <Application>postmaster</Application> and  
     postgres  servers  run  with  the  user-id  of the 
     <ProductName>Postgres</ProductName>
     "superuser."  Note that the <ProductName>Postgres</ProductName> 
     superuser does not have  to  be  a special user (e.g., a user named 
     "postgres").  Furthermore,  the  <ProductName>Postgres</ProductName>  
     superuser should definitely  not  be the Unix superuser ("root")!  
     In any case, all files relating to a database should belong to
     this <ProductName>Postgres</ProductName> superuser. -->

     さらに、<Application>postmaster</Application>とpostgresサーバーは<ProductName>Postgres</ProductName>のユーザーID「superuser」を使用することも覚えておいてください。多くのシステムとは違い、<ProductName>Postgres</ProductName>のスーパーユーザーは特別なユーザー（たとえば「postgres」という名前のユーザー）である必要はありません。また、<ProductName>Postgres</ProductName>のスーパーユーザーは絶対にUnixスーパーユーザーの「root」であってはいけません。どのような場合においても、データベースに関連するすべてのファイルは<ProductName>Postgres</ProductName>スーパーユーザーのものでなければいけません。
</para>
</sect1>
</Chapter>
