はじめに
この実験では、LabEx VM上にPostgreSQLをインストールし、初期設定を行います。PostgreSQLを起動して動作を確認し、基本的な機能が正常に動作しているかを検証することが目標です。
まず、パッケージリストを更新し、PostgreSQLサーバーと postgresql-contrib パッケージをインストールします。インストール後、pg_isready コマンドを使用してPostgreSQLサービスが実行中であり、接続を受け付けていることを確認します。最後に、デフォルトのデータベースを探索し、サーバーの状態と基本的な設定を確認します。
PostgreSQLのインストールと確認
このステップでは、LabEx VMにPostgreSQLをインストールし、インストールが成功したことを確認します。PostgreSQLは、強力なオープンソースのリレーショナルデータベース管理システム(RDBMS)です。
まず、アップグレードや新規インストールに備えてパッケージリストを更新します。LabEx VMでターミナルを開いてください(デスクトップにターミナルのアイコンがあります)。
以下のコマンドを実行します:
sudo apt update
このコマンドは利用可能なパッケージとそのバージョンのリストを更新しますが、パッケージのインストールやアップグレードは行いません。パッケージリストが更新されていることを示す出力が表示されるはずです。
次に、PostgreSQLサーバーと postgresql-contrib パッケージをインストールします。postgresql-contrib パッケージには、実用的な追加ユーティリティや機能が含まれています。
以下のコマンドを実行します:
sudo apt install postgresql postgresql-contrib -y

-y フラグは、インストールプロセス中に表示されるプロンプトに対して自動的に「yes」と回答します。このコマンドにより、PostgreSQLとその関連パッケージがダウンロードおよびインストールされます。パッケージのダウンロードとインストールに伴い、多くの出力が表示されます。
インストール完了後、PostgreSQLが実行されていることを確認する必要があります。通常、PostgreSQLはインストール後に自動的に起動します。
PostgreSQLサービスのステータスを確認するには、以下のコマンドを実行します:
sudo service postgresql status
また、pg_isready コマンドを使用して、PostgreSQLサーバーが実行中であり、接続を受け付けているかを確認することもできます。
以下のコマンドを実行します:
pg_isready
PostgreSQLが実行中の場合、以下のような出力が表示されます:
/var/run/postgresql:5432 - accepting connections
PostgreSQLが実行されていない場合、以下のようなエラーメッセージが表示されることがあります:
/var/run/postgresql:5432 - no response
「no response」エラーが発生した場合は、PostgreSQLサービスを再起動してみてください。以下のコマンドを実行します:
sudo service postgresql restart
その後、再度 pg_isready を実行してステータスを確認してください。

pg_isready が「accepting connections」と表示すれば、PostgreSQLが正常にインストールされ、実行されていることが確認できます。
PostgreSQLシェル(psql)へのアクセス
このステップでは、PostgreSQLデータベースと対話するためのコマンドラインツールであるPostgreSQLシェル psql にアクセスします。psql を使用すると、SQLクエリの実行、データベースの管理、その他の管理タスクを行うことができます。
デフォルトでは、PostgreSQLはPostgreSQLのスーパーユーザーに対応する postgres という名前のUnixユーザーを作成します。psql シェルにアクセスするには、postgres ユーザーに切り替えるか、sudo を使用して postgres ユーザーとしてコマンドを実行します。
まず、postgres ユーザーに切り替えてみましょう。以下のコマンドを実行します:
sudo -i -u postgres
このコマンドにより、現在のユーザーが postgres に切り替わります。プロンプトが新しいユーザーを反映するように変化したことに注目してください。
postgres ユーザーとしてログインした状態で、psql シェルにアクセスできます。以下のコマンドを実行します:
psql
このコマンドで psql シェルが開きます。以下のようなプロンプトが表示されるはずです:
postgres=#
これは、PostgreSQLサーバーに接続されており、SQLコマンドを実行できる状態であることを示しています。
psql シェルを終了するには、\q と入力してEnterキーを押します:
postgres=## \q
これで postgres ユーザーのシェルに戻ります。
postgres ユーザーのシェルを終了して元のユーザー(labex)に戻るには、exit と入力してEnterキーを押します:
exit
あるいは、sudo を使用して labex ユーザーから直接 psql シェルにアクセスすることもできます。これならユーザーを切り替える必要はありません。

以下のコマンドを実行します:
sudo -u postgres psql
このコマンドは、postgres ユーザーとして psql コマンドを実行します。直接 psql シェルに接続されます。
再度 psql シェルを終了するには、\q と入力してEnterキーを押します:
postgres=## \q
これで labex ユーザーのシェルに戻ります。
まとめると、psql シェルにアクセスするには「postgres ユーザーに切り替える方法」と「sudo を使用する方法」の2通りがあります。どちらの方法でも同じ結果が得られますが、状況によっては sudo を使う方が便利な場合があります。
デフォルトデータベースの探索
このステップでは、PostgreSQLをインストールした際に作成されるデフォルトのデータベースを探索します。これらのデータベースは、PostgreSQLサーバーに関する重要な機能や情報を提供します。
まず、postgres ユーザーとして psql シェルにアクセスします。以下のコマンドを使用します:
sudo -u postgres psql
psql シェルに入ったら、\l コマンドを使用して利用可能なデータベースの一覧を表示できます。以下のコマンドを実行します:
postgres=## \l
このコマンドは、データベースの一覧と、その所有者、エンコーディング、アクセス権限に関する情報を表示します。少なくとも以下の3つのデータベースが表示されるはずです:
postgres:psqlシェルに最初にアクセスしたときに接続されるデフォルトのデータベースです。管理タスクによく使用されます。template0: 新しいデータベースを作成するためのテンプレートとして使用されるデータベースです。このデータベースは変更しないでください。template1: 新しいデータベースを作成するためのもう一つのテンプレートデータベースです。標準的なテンプレートであり、カスタマイズ可能です。

特定のデータベースに接続するには、\c コマンドの後にデータベース名を指定します。例えば、postgres データベースに接続するには、以下のコマンドを実行します:
postgres=## \c postgres
現在 postgres データベースに接続されていることを示すメッセージが表示されます:
You are now connected to database "postgres" as user "postgres".
postgres データベースに接続できたので、その内容を探索してみましょう。例えば、\dt コマンドを使用してデータベース内のテーブルを一覧表示できます:
postgres=## \dt
このコマンドは、現在のデータベース内のテーブル一覧を表示します。postgres データベースは主に管理タスクに使用されるため、ユーザー定義のテーブルは含まれていない可能性があります。
また、\conninfo コマンドを使用して、現在のデータベース接続に関する情報を表示することもできます:
postgres=## \conninfo
このコマンドは、データベース名、ユーザー、ホスト、ポートなどの情報を表示します。
現在のデータベースから切断してデフォルトの接続に戻るには、データベース名を指定せずに \c コマンドを使用します:
postgres=## \c
これでデフォルトのデータベース(通常は postgres データベース)に再接続されます。

最後に、\q と入力してEnterキーを押し、psql シェルを終了します:
postgres=## \q
これで labex ユーザーのシェルに戻ります。
このステップでは、psql シェルを使用して利用可能なデータベースの一覧表示、特定のデータベースへの接続、およびその内容の探索方法を学びました。
サーバーの状態と基本設定の確認
このステップでは、PostgreSQLサーバーの状態を確認し、いくつかの基本的な設定項目を探索します。
前述の通り、LabEx VMはDockerコンテナ内で実行されているため、systemctl コマンドが期待通りに動作しない場合があります。そのため、サーバーの状態確認には主に pg_isready と psql を使用します。
まず、PostgreSQLサーバーが実行中であることを再確認します。以下のコマンドを実行します:
pg_isready
PostgreSQLが実行中の場合、以下の出力が表示されます:
/var/run/postgresql:5432 - accepting connections
次に、psql シェルを使用して基本的な設定項目を確認します。postgres ユーザーとして psql シェルにアクセスします:
sudo -u postgres psql
psql シェルに入ったら、以下のSQLクエリを使用してPostgreSQLのバージョンを確認できます:
SELECT version();
psql シェルでこのクエリを実行してください。以下のような出力が表示されるはずです:
version
----------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 14.17 (Ubuntu 14.17-0ubuntu0.22.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit
(1 row)
これはサーバーにインストールされているPostgreSQLのバージョンを示しています。
現在のデータベースユーザーを確認することもできます:
SELECT user;
出力は以下のようになります:
user
----------
postgres
(1 row)
現在接続しているデータベース名を確認するには、以下を実行します:
SELECT current_database();
出力は以下のようになります:
current_database
------------------
postgres
(1 row)
設定項目を表示するには、SHOW コマンドを使用します。例えば、サーバーが接続を待ち受けるIPアドレスを指定する listen_addresses 設定を確認するには、以下のコマンドを実行します:
SHOW listen_addresses;
出力はおそらく以下のようになります:
listen_addresses
--------------------
localhost
(1 row)
localhost は、サーバーがローカルホストで待ち受けていることを示しています。
確認すべきもう一つの便利な設定は port で、サーバーが接続を待ち受けるポート番号を指定します:
SHOW port;
出力は以下のようになります:
port
------
5432
(1 row)
これは、サーバーがPostgreSQLのデフォルトポートである5432番ポートで待ち受けていることを示しています。

最後に、\q と入力してEnterキーを押し、psql シェルを終了します:
postgres=## \q
これで labex ユーザーのシェルに戻ります。
このステップでは、pg_isready と psql シェルを使用して、PostgreSQLサーバーの状態確認と基本的な設定項目の探索方法を学びました。
まとめ
この実験では、apt update および apt install postgresql postgresql-contrib -y を使用して、LabEx VM上にPostgreSQL RDBMSをインストールしました。-y フラグは、インストール中のプロンプトに自動的に同意するために使用しました。
インストール後、PostgreSQLサービスが実行中であり、接続を受け付けていることを確認しました。LabEx VMはDockerコンテナ内で動作しているため、サーバーの状態確認には systemctl status postgresql の代わりに pg_isready コマンドを使用しました。サーバーが実行中の場合、pg_isready の期待される出力は /var/run/postgresql:5432 - accepting connections です。


