⇧ レモンと言うと、「夢ならばどれほどよかったでしょう~(【Lemon】作詞・作曲:米津玄師)」を思い出してしまうのだけど、まさかの人工的に作り出された品種だったとは驚愕ですな。
LinuxにインストールしているPostgreSQLのバージョンを14系から15系にアップグレードしてみる
何やら、PostgreSQL 14系からPostgreSQL 15系にバージョンアップする必要が出てきたので、アップグレードする方法を調べてみた。
ドキュメントを確認してみたのだけど、
PostgreSQLのメジャーリリースでは、内部データ格納書式は変更されがちです。 したがって、アップグレードは複雑になります。 新しいメジャーバージョンにデータを移行する伝統的な方法は、遅くなることがありますが、データベースをダンプしてリストアすることです。 より速い方法については、pg_upgradeを参照してください。以下で説明するようにレプリケーションを使用する方法もあります。 (パッケージ化された版のPostgreSQLを使用している場合は、 主要バージョンのアップルグレードを支援するスクリプトが提供される場合があります。 詳細についてはパッケージレベルのドキュメントを参照してください。)
⇧ アップグレード方法の全量が分かり辛過ぎるんだが...
と言うか、メジャーリリースでのアップグレードは複雑になると記載されてる時点で、元から少ないやる気を削がれますわ...
とりあえず、ドキュメントを上から下までザっと見た感じ、
- 19.6.1. pg_dumpallを介したデータのアップグレード
- 19.6.2. pg_upgradeを使用したアップグレード方法
- 19.6.3. レプリケーション経由のアップグレード
⇧ 3つの方法が用意されているらしい。
「pg_upgrade」で試してみることにして、現状のWSL 2(Windows Subsystem for Linux 2)のRocky Linux 9にインストールしていたPostgreSQLを確認。
⇧ パッケージ管理ツールでインストールしており、現状インストールされているPostgreSQLのバージョンは14.11と。
で、
⇧ 日本語化する前の元々の手順からしてイケてないのか、上記のドキュメントだと足りていない情報が多過ぎますと。
⇧ 上記サイト様を参考にさせていただく。
とりあえず、旧いバージョンの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
後は、
- /var/lib/pgsql/15/data/pg_hba.conf
→認証方法をmd5にする - /var/lib/pgsql/15/data/postgresql.conf
→Port=5432とlisten_address='0.0.0.0'
とかの設定をしておくと、旧バージョンの時のように外部から接続できるようになると。
⇧ バージョン15にアップグレードできたようです。
う~む、公式の日本語のドキュメントのpg_upgradeコマンドでアップグレードする手順、雑過ぎる...と言うか情報が足りな過ぎる...
結局、正確な手順が不明と言うね...
毎度モヤモヤ感が半端ない…
今回はこのへんで。