PostgreSQLのインストールと初期設定

PostgreSQLBeginner
オンラインで実践に進む

はじめに

この実験では、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

PostgreSQLのインストール出力

-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コマンドの出力

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 シェルにアクセスすることもできます。これならユーザーを切り替える必要はありません。

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: 新しいデータベースを作成するためのもう一つのテンプレートデータベースです。標準的なテンプレートであり、カスタマイズ可能です。

利用可能なPostgreSQLデータベースの一覧

特定のデータベースに接続するには、\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 データベース)に再接続されます。

postgresデータベースに接続するpsqlコマンド

最後に、\q と入力してEnterキーを押し、psql シェルを終了します:

postgres=## \q

これで labex ユーザーのシェルに戻ります。

このステップでは、psql シェルを使用して利用可能なデータベースの一覧表示、特定のデータベースへの接続、およびその内容の探索方法を学びました。

サーバーの状態と基本設定の確認

このステップでは、PostgreSQLサーバーの状態を確認し、いくつかの基本的な設定項目を探索します。

前述の通り、LabEx VMはDockerコンテナ内で実行されているため、systemctl コマンドが期待通りに動作しない場合があります。そのため、サーバーの状態確認には主に pg_isreadypsql を使用します。

まず、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番ポートで待ち受けていることを示しています。

PostgreSQL psqlシェルの出力

最後に、\q と入力してEnterキーを押し、psql シェルを終了します:

postgres=## \q

これで labex ユーザーのシェルに戻ります。

このステップでは、pg_isreadypsql シェルを使用して、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 です。