1.2 PostgreSQLのインストールと初期設定(Ubuntuの場合)

PostgreSQLは、クライアント・サーバ構成のデータベースシステムです。Ubuntuで初めてPostgreSQLを使用する際には、以下の手順でインストールと初期設定を行います。なお、この手順はOS管理者(rootユーザ)、またはOS管理者権限(sudoコマンド)を行使できるユーザで行う必要があります。

(1) postgresユーザの作成
(2) PostgreSQLパッケージのインストール
(3) データベースサーバの起動確認

(1) postgresユーザの作成

PostgreSQLを動作させる場合、通常はOS管理者とは別にPostgreSQL専用のDB管理者を作成します。DB管理者のユーザ名は、慣例的に 'postgres' を使用します。postgresユーザは、PostgreSQLのインストール時に自動的に作成することができますが、ファイルの保存場所としてホームディレクトリがあった方が便利なので、手動で作成しておきます。

adduserコマンドでpostgresユーザとホームディレクトリ '/home/postgres' を同時に作成します。

sudo adduser postgres

なお、OSの管理者権限があれば以下の例のようにsudoコマンドでpostgresユーザにログインできます。

ubuntu@host1:~$ sudo -iu postgres
postgres@host1:~$ pwd
/home/postgres
postgres@host1:~$ exit
ログアウト
ubuntu@host1:~$

(2) PostgreSQLパッケージのインストール

PostgreSQLのリリースサイクルは、毎年1回のバージョンアップを含むメジャーリリースと、その後5年間のメンテナンスのマイナーリリースがあります。OSのディストリビューションに標準で含まれるバージョンは最新ではない可能性がありますが、この資料の実習環境としては全く問題ないため、標準のバージョンをインストールします。Ubuntu 24.04においてaptコマンドで 'postgresql' をインストールすると、PostgreSQL 16のサーバとクライアントプログラム、および依存関係のあるライブラリがインストールされます。

sudo apt install postgresql

以下の例は、実際にインストールされるパッケージを示しています。

ubuntu@host1:~$ sudo apt install postgresql
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libcommon-sense-perl libjson-perl libjson-xs-perl libllvm17t64 libpq5
  libtypes-serialiser-perl postgresql-16 postgresql-client-16
  postgresql-client-common postgresql-common ssl-cert
提案パッケージ:
  postgresql-doc postgresql-doc-16
以下のパッケージが新たにインストールされます:
  libcommon-sense-perl libjson-perl libjson-xs-perl libllvm17t64 libpq5
  libtypes-serialiser-perl postgresql postgresql-16 postgresql-client-16
  postgresql-client-common postgresql-common ssl-cert
アップグレード: 0 個、新規インストール: 12 個、削除: 0 個、保留: 0 個。
43.5 MB のアーカイブを取得する必要があります。
この操作後に追加で 175 MB のディスク容量が消費されます。

なお、PostgreSQLの別のバージョンをインストールする方法については、以下の公式サイトを参照してください。

Linux downloads (Ubuntu)

(3) データベースサーバの起動確認

インストーラによって、データベースクラスタは '/var/lib/postgresql/16/main' ディレクトリにpostgresqlユーザ所有のファイルとして作成され、データベースサーバが起動します。

サーバの起動状態は、systemctlコマンドで確認できます。

sudo systemctl status postgresql

以下の例のように、サーバの状態が Active: active になっていればサーバの起動は成功です。

ubuntu@host1:~$ sudo systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; prese>
     Active: active (exited) since Thu 2024-08-08 21:53:49 JST; 1min 7s ago
   Main PID: 2378 (code=exited, status=0/SUCCESS)
        CPU: 1ms
以下省略

なお、OSを再起動したときにはデータベースサーバも自動的に再起動されます。