お金をかけずにサーバーの勉強をしよう

PostgreSQLインストール

2024年6月1日

メニューへ戻る

OSSデータベースとして MySQLと双璧を成すデータベースの PostgreSQLを Ubuntu Serverにインストールします。

本家サイトはこちら。
PostgreSQL: The World's Most Advanced Open Source Relational Database

最早ソフトの説明はいらない有名なソフトです。
2024年5月22日時点での最新版は 16.3になります。

大した説明もなくインストールと生きます。


1.環境

以下のセットでいきます。

Ubuntu Serverのインストールについては「Ubuntu 24.04 Server インストール」に書いています。

以降は、Ubuntu Serverができている状態が前提となっています。


2.インストール

以下が Ubuntu へのインストールの手順になります。
Linux downloads (Ubuntu)

以前は PostgreSQLが提供する aptリポジトリを参照するようになっていましたが、今は Ubuntuの aptリポジトリからインストールするようになっていますね。

えらく手間が少なくて、ここがメジャーな OSである Ubuntuの強みでもあります。
それでは手順に沿ってやっていきましょう。

一応パッケージの情報を見てみます。

subro@UbuntuServer2404-1:~$ apt info postgres
Version: 16+257build1
Priority: optional
Section: database
Source: postgresql-common (257build1)
Origin: Ubuntu
Maintainer: Ubuntu Developers 
Original-Maintainer: Debian PostgreSQL Maintainers 
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 17.4 kB
Depends: postgresql-16
Suggests: postgresql-doc
Task: postgresql-server
Download-Size: 11.5 kB
APT-Sources: http://jp.archive.ubuntu.com/ubuntu noble/main amd64 Packages
Description: オブジェクトリレーショナル SQL データベース (サポート版)
 本メタパッケージはサポートされる最新版の PostgreSQL データベースサーバに常 に依存しています。
 .
 PostgreSQL はフル機能を備えたオブジェクトリレーショナルデータベース管理シス テムです。SQL
 標準の大部分をサポートし、多くの点でユーザが拡張できるよう設 計されています。機能の一部を以下に示します: ACID
 トランザクション、外部キー、ビュー、シーケンス、サブクエリ、トリガ、 ユーザ定義型および関数、外部結合、多版型同時実行制御。グラフィカルユーザイ
 ンターフェースや多くのプログラム言語用のバインディングも入手できます。

バージョンが [16+257build1] となっていて、16.3ではない気がしますね…。

PostgreSQL公式のインストールドキュメントでは、Ubuntuへのインストールの方法に従来のものも載っています。

Ubuntuの aptリポジトリにあるパッケージは、Ubuntu(Canonical)のサポートを受けられるものが入るようで、裏を返せば最新版が入ってくるとは限りません。

サポートか最新版の機能かで選択することになりますね。

ここではどうしようかと考えた末、従来のように PostgreSQLの aptリポジトリを登録する方法にします。

こだわりがある訳じゃないんですが、Ubuntuのリポジトリからインストールするのは apt install コマンド一発だけなので、PostgreSQLインストールのお勉強の観点から手間のかかる方でやった方が実になるかなと思いまして。

入れた後は同じですからね。

ではドキュメントの「PostgreSQL Apt Repository」段落に沿ってインストールします。

PostgreSQLの aptリポジトリを OSに登録しますが、楽そうなので
[Automated repository configuration:] の方でやります。
(これもパッケージインストールの形で提供されていて、Ubuntuのリポジトリから入ります)

subro@UbuntuServer2404-1:~$ sudo apt install -y postgresql-common
〜〜〜 省略 〜〜〜

リポジトリ登録用パッケージのインストールができました。

リポジトリデータベースを登録するスクリプトを実行します。

subro@UbuntuServer2404-1:~$ sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
This script will enable the PostgreSQL APT repository on apt.postgresql.org on
your system. The distribution codename used will be noble-pgdg.

Press Enter to continue, or Ctrl-C to abort.[Enter]キーを押す

Using keyring /usr/share/postgresql-common/pgdg/apt.postgresql.org.gpg
Writing /etc/apt/sources.list.d/pgdg.sources ...

Running apt-get update ...
ヒット:1 http://jp.archive.ubuntu.com/ubuntu noble InRelease
ヒット:2 http://security.ubuntu.com/ubuntu noble-security InRelease
ヒット:3 http://jp.archive.ubuntu.com/ubuntu noble-updates InRelease
ヒット:4 http://jp.archive.ubuntu.com/ubuntu noble-backports InRelease
取得:5 https://apt.postgresql.org/pub/repos/apt noble-pgdg InRelease [123 kB]
取得:6 https://apt.postgresql.org/pub/repos/apt noble-pgdg/main amd64 Packages [287 kB]
410 kB を 3秒 で取得しました (130 kB/s)
パッケージリストを読み込んでいます... 完了

You can now start installing packages from apt.postgresql.org.

Have a look at https://wiki.postgresql.org/wiki/Apt for more information;
most notably the FAQ at https://wiki.postgresql.org/wiki/Apt/FAQ

実行したスクリプトの中で apt updateコマンドが実行されていましたので、パッケージ情報を最新にされ、その出力が出ていますね。
上で登録した PostgreSQLのリポジトリも対象に入ってきているのが分かります。

なお、以下の内容で [/etc/apt/sources.list.d/pgdg.sources]ファイルができました。

Types: deb
URIs: https://apt.postgresql.org/pub/repos/apt
Suites: noble-pgdg
Components: main
Signed-By: /usr/share/postgresql-common/pgdg/apt.postgresql.org.gpg

これで [https://apt.postgresql.org/pub/repos/apt] を参照するようになったわけです。

PostgreSQLをインストールします。
長いですが、参考に全部載せます。
MySQLと違ってクライアントツールも一緒に入ります。

subro@UbuntuServer2404-1:~$ sudo apt-get -y install postgresql ← 旧バージョンを入れるには[ postgresql-15]などパッケージ名の後ろにバージョン番号を付けて下さい。
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libllvm17t64 libpq5 postgresql-16 postgresql-client-16 postgresql-client-common postgresql-common
提案パッケージ:
  postgresql-doc postgresql-doc-16
以下のパッケージが新たにインストールされます:
  libllvm17t64 libpq5 postgresql postgresql-16 postgresql-client-16
以下のパッケージはアップグレードされます:
  postgresql-client-common postgresql-common
アップグレード: 2 個、新規インストール: 5 個、削除: 0 個、保留: 7 個。
45.1 MB のアーカイブを取得する必要があります。
この操作後に追加で 191 MB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu noble/main amd64 libllvm17t64 amd64 1:17.0.6-9ubuntu1 [26.2 MB]
取得:2 https://apt.postgresql.org/pub/repos/apt noble-pgdg/main amd64 postgresql-common all 260.pgdg24.04+1 [169 kB]
取得:3 https://apt.postgresql.org/pub/repos/apt noble-pgdg/main amd64 postgresql-client-common all 260.pgdg24.04+1 [36.0 kB]
取得:4 https://apt.postgresql.org/pub/repos/apt noble-pgdg/main amd64 libpq5 amd64 16.3-1.pgdg24.04+1 [218 kB]
取得:5 https://apt.postgresql.org/pub/repos/apt noble-pgdg/main amd64 postgresql-client-16 amd64 16.3-1.pgdg24.04+1 [1,888 kB]
取得:6 https://apt.postgresql.org/pub/repos/apt noble-pgdg/main amd64 postgresql-16 amd64 16.3-1.pgdg24.04+1 [16.6 MB]
取得:7 https://apt.postgresql.org/pub/repos/apt noble-pgdg/main amd64 postgresql all 16+260.pgdg24.04+1 [11.9 kB]
45.1 MB を 22秒 で取得しました (2,083 kB/s)
パッケージを事前設定しています ...
(データベースを読み込んでいます ... 現在 83742 個のファイルとディレクトリがインストールされています。)
.../0-postgresql-common_260.pgdg24.04+1_all.deb を展開する準備をしています ...
'postgresql-common による /usr/bin/pg_config から /usr/bin/pg_config.libpq-dev への退避 (divert)' を残します
postgresql-common (260.pgdg24.04+1) で (257build1 に) 上書き展開しています ...
.../1-postgresql-client-common_260.pgdg24.04+1_all.deb を展開する準備をしています ...
postgresql-client-common (260.pgdg24.04+1) で (257build1 に) 上書き展開しています ...
以前に未選択のパッケージ libllvm17t64:amd64 を選択しています。
.../2-libllvm17t64_1%3a17.0.6-9ubuntu1_amd64.deb を展開する準備をしています ...
libllvm17t64:amd64 (1:17.0.6-9ubuntu1) を展開しています...
以前に未選択のパッケージ libpq5:amd64 を選択しています。
.../3-libpq5_16.3-1.pgdg24.04+1_amd64.deb を展開する準備をしています ...
libpq5:amd64 (16.3-1.pgdg24.04+1) を展開しています...
以前に未選択のパッケージ postgresql-client-16 を選択しています。
.../4-postgresql-client-16_16.3-1.pgdg24.04+1_amd64.deb を展開する準備をしています ...
postgresql-client-16 (16.3-1.pgdg24.04+1) を展開しています...
以前に未選択のパッケージ postgresql-16 を選択しています。
.../5-postgresql-16_16.3-1.pgdg24.04+1_amd64.deb を展開する準備をしています ...
postgresql-16 (16.3-1.pgdg24.04+1) を展開しています...
以前に未選択のパッケージ postgresql を選択しています。
.../6-postgresql_16+260.pgdg24.04+1_all.deb を展開する準備をしています ...
postgresql (16+260.pgdg24.04+1) を展開しています...
postgresql-client-common (260.pgdg24.04+1) を設定しています ...
新バージョンの設定ファイル /etc/postgresql-common/supported_versions をインストールしています ...
libpq5:amd64 (16.3-1.pgdg24.04+1) を設定しています ...
libllvm17t64:amd64 (1:17.0.6-9ubuntu1) を設定しています ...
postgresql-common (260.pgdg24.04+1) を設定しています ...
postgresql-client-16 (16.3-1.pgdg24.04+1) を設定しています ...
update-alternatives: /usr/share/man/man1/psql.1.gz (psql.1.gz) を提供するために自動モードで /usr/share/postgresql/16/man/man1/psql.1.gz を使います
postgresql-16 (16.3-1.pgdg24.04+1) を設定しています ...
Creating new PostgreSQL cluster 16/main ...
/usr/lib/postgresql/16/bin/initdb -D /var/lib/postgresql/16/main --auth-local peer --auth-host scram-sha-256 --no-instructions
データベースシステム内のファイルの所有者はユーザー"postgres"となります。
このユーザーをサーバープロセスの所有者とする必要があります。

データベースクラスタはロケール"ja_JP.UTF-8"で初期化されます。
デフォルトのデータベース符号化方式はそれに対応してUTF8に設定されました。
initdb: ロケール"ja_JP.UTF-8"用の適切なテキスト検索設定が見つかりませんでした
デフォルトのテキスト検索構成は simple に設定されます。

データベージのチェックサムは無効です。

ディレクトリ/var/lib/postgresql/16/mainの権限を設定しています ... ok
サブディレクトリを作成しています ... ok
動的共有メモリの実装を選択しています ... posix
デフォルトのmax_connectionsを選択しています ... 100
デフォルトのshared_buffersを選択しています ... 128MB
デフォルトの時間帯を選択しています ... Asia/Tokyo
設定ファイルを作成しています ... ok
ブートストラップスクリプトを実行しています ... ok
ブートストラップ後の初期化を実行しています ... ok
データをディスクに同期しています ... ok
postgresql (16+260.pgdg24.04+1) を設定しています ...
man-db (2.12.0-4build2) のトリガを処理しています ...
libc-bin (2.39-0ubuntu8.2) のトリガを処理しています ...
Scanning processes...
Scanning linux images...

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.

インストールできました。


3.他のノードからアクセス可能にする

PostgreSQLはインストールしたままだと他の PCから接続ができないようになっていますので、これを解除しましょう。

[/etc/postgresql/16/main/postgresql.conf]ファイルを以下のように書き換えておきます。
[*] で [localhost] を含む全てのネットワークインターフェイスにサービスを提供します。

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
    ↓
listen_addresses = '*' ← コメントアウト[#]を外しています。

有効になるのは PostgreSQLの再起動後からですので、再起動しておきます。

subro@UbuntuServer2404-1:~$ sudo systemctl restart postgresql

何も出ませんが、再起動しています。


4.管理ユーザー [postgres] のパスワード設定

ここからの話は OSのユーザーと PostgreSQLのユーザーとが混在してくるので、ユーザー名の後ろに(OS)(DB)をつけて使い分けます。

初期状態では [postgres](DB)ユーザーのみ登録されていて、インストールと共に作成される [postgres](OS)ユーザーだとノーパスワードで DBにログインできます。
(OS認証ってやつです)

ただ毎度 [postgres](OS)でログインするのが面倒なのと、一通りパスワードでログインの制限をかけたいので、ログイン認証設定を変更してどのユーザーもパスワードが必要なようにします。

まず [postgres](DB)のパスワードが分からないので、分かるものに変えます。
sudoコマンドに -u オプションを付けてあげると指定したユーザーで後ろに書いたコマンドを実行してくれます。

水色太字が PostgreSQLのコマンドプロンプトで、ここでは postgres(DB)のパスワードを「postgres」に設定しています。

subro@UbuntuServer2404-1:~$ sudo -u postgres psql ← [postgres](OS)ユーザーで psqlコマンドをオプションなしに実行している。
psql (16.3 (Ubuntu 16.3-1.pgdg24.04+1))
"help"でヘルプを表示します。

postgres=# ALTER ROLE postgres WITH PASSWORD 'postgres';
ALTER ROLE

postgres=# exit

設定できました。

設定ファイル [/etc/postgresql/16/main/pg_hba.conf] を編集してパスワードが必要な形にします。
[postgres](OS)になるか、sudoを使って root権限で編集します。

1行追加している箇所はついでで、私の環境の家庭内LAN [192.168.1.0/24] 全部の PCからアクセスできるようにする設定です。
皆さんの家のネットワークに合わせて読み替えて下さい。

[/etc/postgresql/16/main/pg_hba.conf] 修正前

〜〜〜 上の方は省略 〜〜〜

# DO NOT DISABLE!
# If you change this first entry you will need to make sure that the
# database superuser can access the database using some other method.
# Noninteractive access to all databases is required during automatic
# maintenance (custom daily cronjobs, replication, and similar tasks).
#
# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                      peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                      peer
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256


[/etc/postgresql/16/main/pg_hba.conf] 修正後

〜〜〜 上の方は省略 〜〜〜

# DO NOT DISABLE!
# If you change this first entry you will need to make sure that the
# database superuser can access the database using some other method.
# Noninteractive access to all databases is required during automatic
# maintenance (custom daily cronjobs, replication, and similar tasks).
#
# Database administrative login by Unix domain socket
local   all             postgres                                scram-sha-25

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     scram-sha-256
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             192.168.1.0/24          scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     scram-sha-256
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256

PostgreSQLを再起動します。

subro@UbuntuServer2404-1:~$ sudo systemctl restart postgresql

やっぱり何も出ませんが、再起動しています。

[postgres](DB)ユーザーでログインしてみます。

subro@UbuntuServer2404-1:~$ psql -U postgres
ユーザー postgres のパスワード: postgres(DB)のパスワード ← 上の例だと「postgres」。
psql (16.3 (Ubuntu 16.3-1.pgdg24.04+1))
"help"でヘルプを表示します。

postgres=#

ちゃんとパスワードを聞いてくるようになり、設定したパスワードでログインすることができるようになりました。

では、後はどうぞお好きにお使い下さい!

では短すぎるので、管理ツールの pgAdminを導入することにしましょう。


5.GUI管理ツール pgAdminインストール

公式のツールですし、実際の管理には psqlではなく、これを使ったほうが楽ですね。

こちらが本家サイトになります。
pgAdmin

インストール手順はこちら。
pgAdmin 4 (APT)

ここに載っている手順に沿って進めますが、以下 3種が選べます。

  1. デスクトップ+Web
  2. デスクトップ
  3. Web

クライアントに入れるなら [デスクトップ]、サーバーに入れるなら [Web] で良いんじゃないでしょうか。

このホームページはサーバーのお勉強を標榜しておりますゆえ、理由はともかくサーバーに入れたいと思いますので [Web] でやってみます。

pgAdminリポジトリの公開鍵の取得です。

subro@UbuntuServer2404-1:~$ curl -fsS https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo gpg --dearmor -o /usr/share/keyrings/packages-pgadmin-org.gpg

subro@UbuntuServer2404-1:~$ ls -l /usr/share/keyrings/packages-pgadmin-org.gpg
-rw-r--r-- 1 root root 2846  6月  1 18:42 /usr/share/keyrings/packages-pgadmin-org.gpg

取れました。

OSの参照リポジトリのリストに pgAdminのリポジトリを加えます。
パッケージリストのアップデートも併せて行われます。

subro@UbuntuServer2404-1:~$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'
ヒット:1 http://jp.archive.ubuntu.com/ubuntu noble InRelease
ヒット:2 http://jp.archive.ubuntu.com/ubuntu noble-updates InRelease
ヒット:3 http://security.ubuntu.com/ubuntu noble-security InRelease
ヒット:4 http://jp.archive.ubuntu.com/ubuntu noble-backports InRelease
ヒット:5 https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/noble pgadmin4 InRelease
ヒット:6 https://apt.postgresql.org/pub/repos/apt noble-pgdg InRelease
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
アップグレードできるパッケージが 7 個あります。表示するには 'apt list --upgradable' を実行してください。

実行した結果、[/etc/apt/sources.list.d/pgadmin4.list]ファイルが以下の内容でできました。

deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/noble pgadmin4 main

これによって、[https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/noble]を参照するようになったのでした。

pgAdmin 4の 「Webモード」をインストールします。
これもちょっと長いんですが、参考に全部載せます。

subro@UbuntuServer2404-1~$ sudo apt -y install pgadmin4-web
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  apache2 apache2-bin apache2-data apache2-utils libapache2-mod-wsgi-py3 libapr1t64 libaprutil1-dbd-sqlite3 libaprutil1-ldap libaprutil1t64 liblua5.4-0 pgadmin4-server
提案パッケージ:
  apache2-doc apache2-suexec-pristine | apache2-suexec-custom www-browser
以下のパッケージが新たにインストールされます:
  apache2 apache2-bin apache2-data apache2-utils libapache2-mod-wsgi-py3 libapr1t64 libaprutil1-dbd-sqlite3 libaprutil1-ldap libaprutil1t64 liblua5.4-0 pgadmin4-server pgadmin4-web
アップグレード: 0 個、新規インストール: 12 個、削除: 0 個、保留: 7 個。
110 MB のアーカイブを取得する必要があります。
この操作後に追加で 8,323 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu noble/main amd64 libapr1t64 amd64 1.7.2-3.1build2 [107 kB]
取得:2 https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/noble pgadmin4/main amd64 pgadmin4-server amd64 8.7 [108 MB]
取得:3 http://jp.archive.ubuntu.com/ubuntu noble/main amd64 libaprutil1t64 amd64 1.6.3-1.1ubuntu7 [91.9 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu noble/main amd64 libaprutil1-dbd-sqlite3 amd64 1.6.3-1.1ubuntu7 [11.2 kB]
取得:5 http://jp.archive.ubuntu.com/ubuntu noble/main amd64 libaprutil1-ldap amd64 1.6.3-1.1ubuntu7 [9,116 B]
取得:6 http://jp.archive.ubuntu.com/ubuntu noble/main amd64 liblua5.4-0 amd64 5.4.6-3build2 [166 kB]
取得:7 http://jp.archive.ubuntu.com/ubuntu noble-updates/main amd64 apache2-bin amd64 2.4.58-1ubuntu8.1 [1,327 kB]
取得:8 http://jp.archive.ubuntu.com/ubuntu noble-updates/main amd64 apache2-data all 2.4.58-1ubuntu8.1 [163 kB]
取得:9 http://jp.archive.ubuntu.com/ubuntu noble-updates/main amd64 apache2-utils amd64 2.4.58-1ubuntu8.1 [96.2 kB]
取得:10 http://jp.archive.ubuntu.com/ubuntu noble-updates/main amd64 apache2 amd64 2.4.58-1ubuntu8.1 [90.2 kB]
取得:11 http://jp.archive.ubuntu.com/ubuntu noble/main amd64 libapache2-mod-wsgi-py3 amd64 5.0.0-1build2 [103 kB]
取得:12 https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/noble pgadmin4/main all pgadmin4-web all 8.7 [2,898 B]
110 MB を 28秒 で取得しました (4,000 kB/s)
以前に未選択のパッケージ libapr1t64:amd64 を選択しています。
(データベースを読み込んでいます ... 現在 85839 個のファイルとディレクトリがインストールされています。)
.../00-libapr1t64_1.7.2-3.1build2_amd64.deb を展開する準備をしています ...
libapr1t64:amd64 (1.7.2-3.1build2) を展開しています...
以前に未選択のパッケージ libaprutil1t64:amd64 を選択しています。
.../01-libaprutil1t64_1.6.3-1.1ubuntu7_amd64.deb を展開する準備をしています ...
libaprutil1t64:amd64 (1.6.3-1.1ubuntu7) を展開しています...
以前に未選択のパッケージ libaprutil1-dbd-sqlite3:amd64 を選択しています。
.../02-libaprutil1-dbd-sqlite3_1.6.3-1.1ubuntu7_amd64.deb を展開する準備をしています ...
libaprutil1-dbd-sqlite3:amd64 (1.6.3-1.1ubuntu7) を展開しています...
以前に未選択のパッケージ libaprutil1-ldap:amd64 を選択しています。
.../03-libaprutil1-ldap_1.6.3-1.1ubuntu7_amd64.deb を展開する準備をしています ...
libaprutil1-ldap:amd64 (1.6.3-1.1ubuntu7) を展開しています...
以前に未選択のパッケージ liblua5.4-0:amd64 を選択しています。
.../04-liblua5.4-0_5.4.6-3build2_amd64.deb を展開する準備をしています ...
liblua5.4-0:amd64 (5.4.6-3build2) を展開しています...
以前に未選択のパッケージ apache2-bin を選択しています。
.../05-apache2-bin_2.4.58-1ubuntu8.1_amd64.deb を展開する準備をしています ...
apache2-bin (2.4.58-1ubuntu8.1) を展開しています...
以前に未選択のパッケージ apache2-data を選択しています。
.../06-apache2-data_2.4.58-1ubuntu8.1_all.deb を展開する準備をしています ...
apache2-data (2.4.58-1ubuntu8.1) を展開しています...
以前に未選択のパッケージ apache2-utils を選択しています。
.../07-apache2-utils_2.4.58-1ubuntu8.1_amd64.deb を展開する準備をしています ...
apache2-utils (2.4.58-1ubuntu8.1) を展開しています...
以前に未選択のパッケージ apache2 を選択しています。
.../08-apache2_2.4.58-1ubuntu8.1_amd64.deb を展開する準備をしています ...
apache2 (2.4.58-1ubuntu8.1) を展開しています...
以前に未選択のパッケージ libapache2-mod-wsgi-py3 を選択しています。
.../09-libapache2-mod-wsgi-py3_5.0.0-1build2_amd64.deb を展開する準備をしています ...
libapache2-mod-wsgi-py3 (5.0.0-1build2) を展開しています...
以前に未選択のパッケージ pgadmin4-server を選択しています。
.../10-pgadmin4-server_8.7_amd64.deb を展開する準備をしています ...
pgadmin4-server (8.7) を展開しています...
以前に未選択のパッケージ pgadmin4-web を選択しています。
.../11-pgadmin4-web_8.7_all.deb を展開する準備をしています ...
pgadmin4-web (8.7) を展開しています...
pgadmin4-server (8.7) を設定しています ...
libapr1t64:amd64 (1.7.2-3.1build2) を設定しています ...
liblua5.4-0:amd64 (5.4.6-3build2) を設定しています ...
apache2-data (2.4.58-1ubuntu8.1) を設定しています ...
libaprutil1t64:amd64 (1.6.3-1.1ubuntu7) を設定しています ...
libaprutil1-ldap:amd64 (1.6.3-1.1ubuntu7) を設定しています ...
libaprutil1-dbd-sqlite3:amd64 (1.6.3-1.1ubuntu7) を設定しています ...
apache2-utils (2.4.58-1ubuntu8.1) を設定しています ...
apache2-bin (2.4.58-1ubuntu8.1) を設定しています ...
apache2 (2.4.58-1ubuntu8.1) を設定しています ...
Enabling module mpm_event.
Enabling module authz_core.
Enabling module authz_host.
Enabling module authn_core.
Enabling module auth_basic.
Enabling module access_compat.
Enabling module authn_file.
Enabling module authz_user.
Enabling module alias.
Enabling module dir.
Enabling module autoindex.
Enabling module env.
Enabling module mime.
Enabling module negotiation.
Enabling module setenvif.
Enabling module filter.
Enabling module deflate.
Enabling module status.
Enabling module reqtimeout.
Enabling conf charset.
Enabling conf localized-error-pages.
Enabling conf other-vhosts-access-log.
Enabling conf security.
Enabling conf serve-cgi-bin.
Enabling site 000-default.
Created symlink /etc/systemd/system/multi-user.target.wants/apache2.service → /usr/lib/systemd/system/apache2.service.
Created symlink /etc/systemd/system/multi-user.target.wants/apache-htcacheclean.service → /usr/lib/systemd/system/apache-htcacheclean.service.
libapache2-mod-wsgi-py3 (5.0.0-1build2) を設定しています ...
apache2_invoke: Enable module wsgi
pgadmin4-web (8.7) を設定しています ...
ufw (0.36.2-6) のトリガを処理しています ...
man-db (2.12.0-4build2) のトリガを処理しています ...
libc-bin (2.39-0ubuntu8.2) のトリガを処理しています ...
Scanning processes...
Scanning linux images...

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.

インストールできました。

Webモードの初期設定をします。

subro@UbuntuServer2404-1~$ sudo /usr/pgadmin4/bin/setup-web.sh
Setting up pgAdmin 4 in web mode on a Debian based platform...
Creating configuration database...
NOTE: Configuring authentication for SERVER mode.

Enter the email address and password to use for the initial pgAdmin user account:

Email address: subro@subrohouse.internal
Password: パスワードを設定
Retype password: パスワードをもう一回
pgAdmin 4 - Application Initialisation
======================================

Creating storage and log directories...
We can now configure the Apache Web server for you. This involves enabling the wsgi module and configuring the pgAdmin 4 application to mount at /pgadmin4. Do you wish to continue (y/n)? y
The Apache web server is running and must be restarted for the pgAdmin 4 installation to complete. Continue (y/n)? y
Apache successfully restarted. You can now start using pgAdmin 4 in web mode at http://127.0.0.1/pgadmin4

初期ユーザー/パスワードを設定できました。
Webサーバーの本体は Apacheを使っているようですね。

メッセージでは URLが [http://127.0.0.1/pgadmin4] になっていたので、外から入れないかな?と思ったのですが、実際は [0.0.0.0] にバインドされていましたので、外部からの接続ができるはずです。


6.pgAdminでアクセス

では pgAdminを使って PostgreSQLに Webブラウザでアクセスしてみます。
私の環境では [http://UbuntuServer2404-1/pgadmin4] です。

上で設定した初期ユーザー/パスワードを入力し、[Japanese]を選択して、Loginを押します。
gAdmin画面 1

こんな画面になりますので、[新しいサーバを追加] をクリックします。
gAdmin画面 2

PostgreSQLに接続するための設定をします。

[General]タブ
[名前] はこの設定自体につける名前で、pgAdmin内で他と競合しないよう分かりやすいものをつけましょう。
gAdmin画面 3

[接続]タブ
実際に PostgreSQLに接続するのに必要な情報の設定です。
[ホスト名/アドレス] には PostgreSQLが稼働しているサーバーのマシン名か IPアドレスを入れます。
[ユーザー名] は今はデフォルトの [postgres] ユーザーしかいませんのでこれにしました。
[パスワード] は上の方で PostgreSQLのインストール後に設定したやつです。
入れたら保存を押します。
gAdmin画面 4

この時点で pgAdminは PostgreSQLに接続されています。

最初は左ペインに [テストのPostgreSQL] しか出てないのですが、下の絵の通りツリーを展開していき、[テーブル] で右クリックします。
メニューが出てくるので [作成] - [テーブル] と選択します。
gAdmin画面 5

テーブルを作成します。

[General]タブ
[名前] にテーブル名を入れます。 gAdmin画面 6

[列]タブ
列](カラム)を 1つ作ってみます。
を押すと、カラム入力行が出てきます。
[name]という列を [character]型の [20]文字固定、にしました。
保存を押します。
gAdmin画面 7

左ペインのツリーの [テーブル] の下に [testtable] ができました。
ここで右クリックをすると…
gAdmin画面 8

「いよいよデータを入れるんだよな! 早ぅ早ぅ」という方、残念でした。

データベースエンジニアでもある当ホームページ管理人は、GUIを使ったデータの出し入れを好まないのでした。

データベースエンジニアは黒い画面で操作するのが基本です。

本当はテーブル作成も SQLを直接実行しないといけません。


7.psqlコマンドでデータ挿入

PostgreSQLをインストールした Ubuntu Serverのターミナルに戻ります。
黒い画面にくると心が穏やかになります。

psqlコマンドを使い、[postgres](DB)ユーザーでログインしてみます。

subro@UbuntuServer2404-1:~$ psql -U postgres
ユーザー postgres のパスワード: postgres(DB)のパスワード ← 上の例だと「postgres」。
psql (16.3 (Ubuntu 16.3-1.pgdg24.04+1))
"help"でヘルプを表示します。

postgres=#

ログインしました。

1行挿入します。

postgres=# insert into testtable values ('tanaka');
INSERT 0 1

挿入できました。

[testtable] の全件を検索します。

postgres=# select * from testtable;
         name
----------------------
 tanaka
(1 行)

postgres=#

ちゃんと入っていますね。

これ以上は、DBの使い方になってしまいますので、ここいら辺で。


==========
こんな感じで PostgreSQLの導入をしてみました。

MySQLと併せてパブリッククラウドでは DBaaSとしてサービス展開されている OSS由来のリレーショナルデータベースの雄です。

各種プログラミング言語用のドライバも不足なく出ていますし、DBに何を使おうかと迷っているならこれを選んでおけば間違いはありません。

というか、有名過ぎて今更説明することがほとんどありませんね。


実はこのネタはもっと前に書いていたんですが、Ubuntu 24.04では動作に問題があって 1ヶ月以上の間 pgAdmin4が動かなかったんですね。

そのせいか Ubuntu 24.04 (noble) 用のリポジトリの枠はあるんですけど、中身が空だったんですよ。

それで手順通りにやっても上手く行かなくてハマりました。

各所で「動かね〜」「インストールできね〜」ってレポートが上がってて、pgAdminの作成側がどこかで「前から 6月なったら出すっつってんだろ!(オラァ)」てキレ気味になってたような気がします。

6月1日になったので、ふと GitHubの issue を見ておりましたら「もう変なハックみたいなことはしなくて良いぜ!リポジトリにあるからよ!」って書いてあったので急ぎ続きを書いた次第です。


本はいっぱいあります。管理する人はこれ。

初心者はこれ。