※当サイトの記事には、広告・プロモーションが含まれます。

LinuxにインストールしているPostgreSQLのバージョンを14系から15系にアップグレードしてみる

gigazine.net

⇧ レモンと言うと、「夢ならばどれほどよかったでしょう~(【Lemon】作詞・作曲:米津玄師)」を思い出してしまうのだけど、まさかの人工的に作り出された品種だったとは驚愕ですな。

LinuxにインストールしているPostgreSQLのバージョンを14系から15系にアップグレードしてみる

何やら、PostgreSQL 14系からPostgreSQL 15系にバージョンアップする必要が出てきたので、アップグレードする方法を調べてみた。

ドキュメントを確認してみたのだけど、

www.postgresql.jp

PostgreSQLメジャーリリースでは、内部データ格納書式は変更されがちです。 したがって、アップグレードは複雑になります。 新しいメジャーバージョンにデータを移行する伝統的な方法は、遅くなることがありますが、データベースをダンプしてリストアすることです。 より速い方法については、pg_upgradeを参照してください。以下で説明するようにレプリケーションを使用する方法もあります。 (パッケージ化された版のPostgreSQLを使用している場合は、 主要バージョンのアップルグレードを支援するスクリプトが提供される場合があります。 詳細についてはパッケージレベルのドキュメントを参照してください。)

https://www.postgresql.jp/document/15/html/upgrading.html

⇧ アップグレード方法の全量が分かり辛過ぎるんだが...

と言うか、メジャーリリースでのアップグレードは複雑になると記載されてる時点で、元から少ないやる気を削がれますわ...

とりあえず、ドキュメントを上から下までザっと見た感じ、

  1. 19.6.1. pg_dumpallを介したデータのアップグレード
  2. 19.6.2. pg_upgradeを使用したアップグレード方法
  3. 19.6.3. レプリケーション経由のアップグレード

⇧ 3つの方法が用意されているらしい。

「pg_upgrade」で試してみることにして、現状のWSL 2(Windows Subsystem for Linux 2)のRocky Linux 9にインストールしていたPostgreSQLを確認。

⇧ パッケージ管理ツールでインストールしており、現状インストールされているPostgreSQLのバージョンは14.11と。

で、

www.postgresql.jp

⇧ 日本語化する前の元々の手順からしてイケてないのか、上記のドキュメントだと足りていない情報が多過ぎますと。

qiita.com

qiita.com

⇧ 上記サイト様を参考にさせていただく。

とりあえず、旧いバージョンのdataを退避。

パッケージ管理のdnfコマンドで新しいバージョンのPostgreSQLをインストール。

ただ、この時点では、旧いバージョンのPostgreSQLのまま。

旧いバージョンのPostgreSQLを停止する。

ユーザーpostgresに切り替えて、新しいバージョンのPostgreSQLの初期化。

PostgreSQLが新旧2つあれば良さ気。

systemctl list-unit-files | grep postgresql    

とりあえず、新旧、両方のpg_hba.confファイルで認証をtrustにしておく必要があるらしい。

 

■【変更前】PostgreSQL 14

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
#local   all             all                                     peer
local   all             all                                     md5
# IPv4 local connections:
#host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             all            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    

■【変更後】PostgreSQL 14

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
#local   all             all                                     peer
#local   all             all                                     md5
local   all             all                                     trust
# IPv4 local connections:
#host    all             all             127.0.0.1/32            scram-sha-256
#host    all             all             all            scram-sha-256
host    all             all             all            trust
# IPv6 local connections:
#host    all             all             ::1/128                 scram-sha-256
host    all             all             ::1/128                 trust
# 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    

■【変更前】PostgreSQL 15

# 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
# 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 15

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
#local   all             all                                     scram-sha-256
local   all             all                                     trust
# IPv4 local connections:
#host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
#host    all             all             ::1/128                 scram-sha-256
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    

で、変更後、pg_upgradeコマンドを実行

/usr/pgsql-15/bin/pg_upgrade \
  --old-datadir=/var/lib/pgsql.old/14/data \
  --new-datadir=/var/lib/pgsql/15/data \
  --old-bindir=/usr/pgsql-14/bin \
  --new-bindir=/usr/pgsql-15/bin    

 

後は、

  1. /var/lib/pgsql/15/data/pg_hba.conf
    →認証方法をmd5にする
  2. /var/lib/pgsql/15/data/postgresql.conf
    →Port=5432とlisten_address='0.0.0.0'

とかの設定をしておくと、旧バージョンの時のように外部から接続できるようになると。

⇧ バージョン15にアップグレードできたようです。

う~む、公式の日本語のドキュメントのpg_upgradeコマンドでアップグレードする手順、雑過ぎる...と言うか情報が足りな過ぎる...

結局、正確な手順が不明と言うね...

毎度モヤモヤ感が半端ない…

今回はこのへんで。