PostgreSQLの学習:psql・Client・Server・Connectionの違いとは
今回はPostgreSQLにおける、psql・Client・Server・Connectionの関係について整理してみたいと思います。
PostgreSQLを操作する際には、ClientからPostgreSQL Serverへ接続する必要があります。
今回は実際にpsqlを使ってPostgreSQL Serverへの接続と切断も行います。
所要時間は10分ほどです。
それでは、さっそく始めていきましょう!
Clientとは
Clientとは、Serverへ接続し、Serverに要求を送る側のソフトウェアです。
今回使用するpsqlというプログラムがClientとして機能します。
psql
└── PostgreSQL Serverに接続するClient
ここで重要なのは、Clientはディレクトリなどの「場所」を意味するのではなく、Serverへ要求を送る側のソフトウェアという役割を表している点です。
Serverとは
Serverとは、Clientから要求を受け取り、その要求に応じた処理やサービスを提供する側です。
今回使用しているPostgreSQLでは、PostgreSQL ServerがClientから要求を受け取り、Databaseに対する処理を行います。
Client
│
│ 要求
↓
PostgreSQL Server
│
│ 管理・処理
↓
Database
ここでいうServerは、必ずしも別の物理的なコンピュータを意味するわけではありません。
今回の学習環境では、自分のMac上でPostgreSQL Serverが動作しています。
Connectionとは
Connectionとは、ClientとServerとの間に確立される接続です。
今回の場合は、
psql
│
│ Connection
↓
PostgreSQL Server
という関係になります。
つまり、
-
psql:Client - PostgreSQL Server:Server
- Connection:ClientとServerとの間に確立される接続
という違いがあります。
psqlとは
psqlとは、PostgreSQL Serverへ接続し、SQLなどの命令を送ったり、結果を受け取ったりするためのコマンドラインClientです。
そのため、
PostgreSQL ≠ psql
です。
PostgreSQLはRDBMSとして提供されるソフトウェアシステムであり、psqlはPostgreSQL Serverへ接続するClientとして機能するプログラムです。
関係を整理すると以下になります。
PostgreSQL
│
├── PostgreSQL Server
│ └── Databaseを管理・処理するServer側
│
└── psql
└── PostgreSQL Serverへ接続するClient
コマンドラインClientとは
コマンドラインとは、文字列としてコマンドを入力してソフトウェアを操作する方式・インターフェースです。
そのため、コマンドラインClientとは、文字によるコマンド入力で操作するClientソフトウェアです。
psqlはPostgreSQLのコマンドラインClientなので、概念的には以下のようになります。
ユーザー
│
│ 文字で操作
↓
psql
│
│ Connection
↓
PostgreSQL Server
psqlのパスを確認する
今回、psqlは以下の場所にあります。
/opt/homebrew/opt/postgresql@17/bin/psql
これはpsqlという実行ファイルへの絶対パスです。
分解すると以下のようになります。
/
└── opt
└── homebrew
└── opt
└── postgresql@17
└── bin
└── psql
binは、実行可能なプログラムが置かれるディレクトリとして使われる慣習的な名称です。
そのため、
/opt/homebrew/opt/postgresql@17/bin/
はディレクトリであり、
/opt/homebrew/opt/postgresql@17/bin/psql
のpsqlが実際に実行するプログラムです。
つまり、
ディレクトリ
≠
プログラム
≠
Clientという役割
です。
psqlというプログラムが、今回のClientという役割を担います。
psqlでPostgreSQL Serverへ接続する
実際に以下のコマンドを実行しました。
/opt/homebrew/opt/postgresql@17/bin/psql postgres
このコマンドは以下の2つに分けて考えることができます。
/opt/homebrew/opt/postgresql@17/bin/psql postgres
└─────────────────────────────────────┘ └──────┘
実行するpsql 引数
│
└── 接続先Database名
最後のpostgresはServer名ではなく、接続先のDatabase名です。
今回の構造は以下になります。
psql
│
│ Connection
↓
PostgreSQL Server
│
└── postgres Database
接続に成功すると、以下のように表示されました。
psql (17.11 (Homebrew))
"help"でヘルプを表示します。
postgres=#
postgres=#と表示されているため、psqlからPostgreSQL Serverへの接続が成功しています。
psqlから切断する
PostgreSQL Serverとの接続を終了する場合は、psql上で以下を入力します。
\q
すると、psqlが終了し、通常のターミナルに戻ります。
なお、
\q
はSQLではなく、psql自体を操作するためのコマンドです。
したがって、
SQL
└── PostgreSQL Serverに対する命令を記述する言語
\q
└── psqlを操作するコマンド
という違いがあります。
SQL・psql・PostgreSQL Server・Databaseの関係
ここまでの関係を整理すると以下のようになります。
ユーザー
│
│ psqlを起動
↓
psql
│
│ Client
│
│ Connectionを通じてSQLなどを送る
↓
PostgreSQL Server
│
│ SQLを処理
│
│ Databaseを管理
↓
Database
それぞれの役割は以下になります。
| 用語 | 役割 |
|---|---|
| SQL | RDBMSに対する命令を記述するために使う言語 |
| psql | PostgreSQL Serverへ接続するClient |
| Connection | ClientとServerとの間に確立される接続 |
| PostgreSQL Server | Clientから要求を受け取りDatabaseに対する処理を行うServer側 |
| Database | PostgreSQL Serverによって管理される対象 |
PostgreSQLとPostgreSQL Serverの違い
PostgreSQLとPostgreSQL Serverも完全に同じ意味ではありません。
PostgreSQLは、RDBMSとして提供されるソフトウェアシステムです。
その中でPostgreSQL Serverは、Clientから要求を受け取り、Databaseの管理やSQLの処理などを行うServer側の中核部分です。
PostgreSQL
│
├── PostgreSQL Server
│ └── Server側
│
├── psql
│ └── Client
│
└── その他の関連ツール
そのため、
PostgreSQL = PostgreSQL Serverだけ
というわけではありません。
まとめ
今回は、PostgreSQLにおけるpsql・Client・Server・Connectionの関係について整理しました。
特に重要なのは以下の関係です。
psql
│
│ Connection
↓
PostgreSQL Server
│
│ Databaseを管理・処理
↓
Database
psqlはClientとして機能するプログラムであり、PostgreSQL ServerとのConnectionを確立します。
そのConnectionを通じてSQLなどの命令を送り、PostgreSQL ServerがDatabaseに対する処理を実行します。
今回、実際にpsqlからPostgreSQL Serverへの接続と切断まで確認できました。
次回は、実際にDatabaseを作成する方法について学習します。