<Chapter Id="arch-pg">
<!--	<TITLE>Architecture</TITLE> -->
	<TITLE>構造</TITLE>

<Sect1 id="arch-pg-concepts">
<!-- <Title><ProductName>Postgres</ProductName> Architectural Concepts</Title> -->
<Title><ProductName>Postgres</ProductName>の構造的概念</Title>
<indexterm><primary>PostgreSQL</primary><secondary sortas="こうぞう">構造</secondary></indexterm>

<para>
     <!-- Before we continue, 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>）<indexterm><primary>postmaster</primary></indexterm><indexterm><primary sortas="でーもんかんりぷろせす">デーモン管理プロセス</primary></indexterm><indexterm><primary>PostgreSQL</primary><secondary sortas="でーもんかんりぷろせす">デーモン管理プロセス</secondary></indexterm>
</para>
</ListItem>
<ListItem>
<para>
      	<!-- the user's frontend application (e.g., the <Application>psql</Application> program), and -->
        ユーザーのフロントエンドアプリケーション（例：<Application>psql</Application>プログラム）<indexterm><primary sortas="ふろんとえんどあぷりけーしょん">フロントエンドアプリケーション</primary></indexterm><indexterm><primary>PostgreSQL</primary><secondary sortas="ふろんとえんどあぷりけーしょん">フロントエンドアプリケーション</secondary></indexterm>
</para>
</ListItem>
<ListItem>
<para>
      	<!-- the  one or more backend database servers (the <Application>postgres</Application> process itself). -->
        1つ以上のバックエンドサーバー（<Application>postgres</Application>プロセス自身）<indexterm><primary sortas="ばっくえんどさーばー">バックエンドサーバー</primary></indexterm><indexterm><primary>PostgreSQL</primary><secondary sortas="ばっくえんどさーばー">バックエンドサーバー</secondary></indexterm>
</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="PGARCH-CONNECTIONS">(a)), 
which in turn  starts  a  new backend  server  process 
(<XRef LinkEnd="PGARCH-CONNECTIONS">(b)) -->


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

<!--
 <figure Id="PGARCH-CONNECTIONS">
<Title>How a connection is established</Title>
<Graphic Align="center" FileRef="connections.gif" Format="GIF"></Graphic>
</Figure>

     and connects the frontend process to the new server 
(<XRef LinkEnd="PGARCH-CONNECTIONS">(c)).
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.  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.
     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"), although many systems are installed that way.
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.
</para> -->


<!--
<figure Id="PGARCH-CONNECTIONS">
<Title>接続の方法</Title>
<Graphic Align="center" FileRef="connections.gif" Format="GIF"></Graphic>
</Figure>
-->

<para>
     そこで、フロントエンドプロセスは、postmasterが生成した新しいサーバー<!--（<XRef LinkEnd="PGARCH-CONNECTIONS">）-->に接続します。ここからは、フロントエンドプロセスとバックエンドサーバーは<Application>postmaster</Application>の介入なしで通信します。ですから、フロントエンドとバックエンドプロセスが生成/消滅を繰り返すのに対して、<Application>postmaster</Application>は常にリクエストを待ちながら稼働しています。<FileName>libpq</FileName>ライブラリは1つのフロントエンドがバックエンドプロセスに対して複数の接続を行うことができます。しかし、フロントエンドアプリケーションはやはりシングルスレッドプロセスです。マルチスレッドのフロントエンド/バックエンド接続は現在のところ<FileName>libpq</FileName>ではサポートされていません。この構造が意味することの1つとして、フロントエンドアプリケーションはどこで稼働してもよいのに対し、<Application>postmaster</Application>とバックエンドは常に同じマシン（データベースサーバー）で稼働しなければいけないということがあります。このことはよく覚えておいてください。なぜなら、クライアントマシンでアクセスできるファイルでもデータベースサーバーマシンにはアクセスできない（もしくは別のファイル名を使わなければアクセスできない）可能性があるからです。そしてさらに、<Application>postmaster</Application>とpostgresサーバーは<ProductName>Postgres</ProductName>のユーザーID「superuser」を使用することも覚えておいてください。多くのシステムとは違い、<ProductName>Postgres</ProductName>のスーパーユーザーは特別なユーザー（つまり「postgres」という名前のユーザー）である必要はありません。さらに、<ProductName>Postgres</ProductName>のスーパーユーザーは絶対にUnixスーパーユーザーの「root」であってはいけません。どのような場合においても、データベースに関連するすべてのファイルは<ProductName>Postgres</ProductName>スーパーユーザーのものでなければいけません。
</para>

</sect1>
</Chapter>
