本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^
現在のバージョンを確認する
現在利用しているPostgresのバージョンの確認方法は、スタートメニューから、SQL Shellを起動して、

コマンドを実行します。
select * From version();
database_jp=# select * From version();
version
------------------------------------------------------------
PostgreSQL 16.3, compiled by Visual C++ build 1939, 64-bit
(1 行)
今回は、現在利用できる最新バージョン

PostgreSQL Version 17.4にアップデートしてみます。
ダウンロードはこちら
Postgresサービスの停止
タスクマネージャを開き、PostgreSQL Serverプロセスを停止します。右クリックしてタスクの終了します。

PostgreSQL 17.4をインストール
ダウンロードした、PostgreSQL 17.4をインストールします。

セットアップしていきます。特に必要なければ全てデフォルトでインストールしていきます。

ディレクトリは標準で17が指定されるのでそのまま

次へ、次へと進めればインストールが始まります。

結構時間がかかって完了
また、タスクマネージャにPostgreSQL が現れるのでタスクを終了で停止する。

設定ファイルの場所
主要な設定ファイルはここ
C:\Program Files\PostgreSQL\16\data
17の場合はここ
C:\Program Files\PostgreSQL\17\data
pg_hba.confをtrustにする
ファイルのエンコードは UTF-8になっているので、UTF-8が扱えるテキストエディタで編集します。私は、EmEditorを使っています。最近はメモ帳もUTF-8に対応しているので、メモ帳でも構いませんが、Windowsのバージョンなどで、どのように違うのか検証取ってません。

scram-sha-256 → trust へ
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
バージョン16も、17も同じように設定します。
16からadminpackを削除する
すでに、16のサービスを停止した後だったら起動するのは以下のコマンド
net start postgresql-x64-16
postgresql-x64-16 - PostgreSQL Server 16 サービスを開始します.
postgresql-x64-16 - PostgreSQL Server 16 サービスは正常に開始されました。
拡張機能であるadminpackを削除しておきます。
Server [localhost]:
Database [postgres]:
Port [5432]:
Username [postgres]:
Client Encoding [SJIS]:
psql (16.3)
"help"でヘルプを表示します。
postgres=# DROP EXTENSION adminpack;
DROP EXTENSION
注意 pg_upgradeでエラー出た
私は、上記手順をやっていなかったために、pg_upgradeでエラー出ました。
c:\tmp>"C:\Program Files\PostgreSQL\17\bin\pg_upgrade.exe" -U postgres -d "C:/Program Files/PostgreSQL/16/data" -D "C:/Program Files/PostgreSQL/17/data" -b "C:/Program Files/PostgreSQL/16/bin" -B "C:/Program Files/PostgreSQL/17/bin"
整合性チェックを実行しています。
-----------------------------
Checking cluster versions ok
Checking database user is the install user ok
Checking database connection settings ok
Checking for prepared transactions ok
Checking for contrib/isn with bigint-passing mismatch ok
Checking data type usage ok
Creating dump of global objects ok
Creating dump of database schemas
ok
Checking for presence of required libraries 致命的
このクラスタでは、移行先の環境にはないロード可能ライブラリを参照しています。
これらのライブラリを移行先の環境に追加するか、もしくは移行元の環境から
それらを使っている関数を削除してください。 問題のライブラリの一覧は、
以下のファイルに入っています:
C:/Program Files/PostgreSQL/17/data/pg_upgrade_output.d/20250320T153545.636/loadable_libraries.txt
失敗しました、終了しています
Files/PostgreSQL/17/data/pg_upgrade_output.d/20250320T153545.636/loadable_libraries.txt
このファイルの中に、移行先の環境にはない関数を使っているとの事
ファイルの中身にはこのような記載が
ライブラリ”$libdir/adminpack”をロードできませんでした: ERROR: 繝輔ぃ繧、繝ォ”$libdir/adminpack”縺ォ繧「繧ッ繧サ繧ケ縺ァ縺阪∪縺帙s縺ァ縺励◆: No such file or directory
データベース: postgres
BUG #18635: pg_upgrade で PostgreSQL17 に「$libdir/adminpack をロードできませんでした」というエラーが発生する
まさにこれだなという事で、adminpack拡張機能を削除すればいい!となり
DROP EXTENSION adminpack;
このコマンドを実行する事にたどりつきました。
contrib の adminpack拡張が削除されました。 (Daniel Gustafsson) (17)
これは開発終了した pgAdmin III で使われていました。
PostgreSQL 17 に関する技術情報
postgres17では削除されたんですね。
C:¥にtempフォルダ作成
C:¥ドライブ直下にtmpフォルダを作成します。右クリック→新規作成→フォルダ

pg_upgradeの実行
コマンドプロンプトを管理者として実行します。

c:\tmp にカレントディレクトリを移動して、pg_upgradeコマンドを実行します。
pg_upgradeの使い方はここ
pg_upgrade
-b
oldbindir
[-B
newbindir
]-d
oldconfigdir
-D
newconfigdir
[option
…]
C:\Windows\System32>cd c:\tmp
c:\tmp>"C:\Program Files\PostgreSQL\17\bin\pg_upgrade.exe" -U postgres -d "C:/Program Files/PostgreSQL/16/data" -D "C:/Program Files/PostgreSQL/17/data" -b "C:/Program Files/PostgreSQL/16/bin" -B "C:/Program Files/PostgreSQL/17/bin"
Windowsセキュリティ ダイアログが表示されるので許可します。

すると、アップグレードを実行してくれます。
結構時間かかります。
Checking cluster versions ok
Checking database user is the install user ok
Checking database connection settings ok
Checking for prepared transactions ok
Checking for contrib/isn with bigint-passing mismatch ok
Checking data type usage ok
Creating dump of global objects ok
Creating dump of database schemas
ok
Checking for presence of required libraries ok
Checking database user is the install user ok
Checking for prepared transactions ok
Checking for new cluster tablespace directories ok
この後pg_upgradeが失敗した場合は、続ける前に新しいクラスタを
initdbで再作成する必要があります。
アップグレードを実行しています。
------------------
Setting locale and encoding for new cluster ok
Analyzing all rows in the new cluster ok
Freezing all rows in the new cluster ok
Deleting files from new pg_xact ok
Copying old pg_xact to new server ok
Setting oldest XID for new cluster ok
Setting next transaction ID and epoch for new cluster ok
Deleting files from new pg_multixact/offsets ok
Copying old pg_multixact/offsets to new server ok
Deleting files from new pg_multixact/members ok
Copying old pg_multixact/members to new server ok
Setting next multixact ID and offset for new cluster ok
Resetting WAL archives ok
Setting frozenxid and minmxid counters in new cluster ok
Restoring global objects in the new cluster ok
Restoring database schemas in the new cluster
ok
Copying user relation files
ok
Setting next OID for new cluster ok
Sync data directory to disk ok
Creating script to delete old cluster ok
Checking for extension updates ok
アップグレードが完了しました
----------------
オプティマイザーの統計は、pg_upgrade では転送されません。そのため
新サーバーを起動した後、以下を行うことを検討してください。
C:/Program Files/PostgreSQL/17/bin/vacuumdb -U postgres --all --analyze-in-stages
このスクリプトを実行すると、旧クラスタのデータファイルが削除されます:
delete_old_cluster.bat
17のpg_hba.confを元に戻して起動
trust → scram-sha-256 へ
PostgreSQL17を起動します
c:\tmp>net start postgresql-x64-17
postgresql-x64-17 サービスを開始します.
postgresql-x64-17 サービスは正常に開始されました。
PgAdmin4を起動し、DBにアクセスすると、 PostgreSQL17ができていました。
しかし、まだエラーが

列"daticulocale"は存在しません LINE 5: datconnlimit, daticulocale, daticurules, datcollversion, ^ HINT: 列"db.datlocale"を参照しようとしていたようです。
こちらのエラーは、以前の16でインストールしていたバージョンPgAdmin4 8.7でおきていました。
新しくインストールされたPgAdmin4 9.0を開いたところ、エラーも表示されずに起動する事ができました。
日本語に変更しました。

File → Preffernce → UserInterface

最初はうまく変わらなかったので、焦りましたが、2回同じ操作をする事で変更されました。
PostgreSQL16の削除
使わなくなったPostgreSQL16を削除します。
プログラムの追加と削除から、PostgreSQL 16を選択し削除します。

データを含め全て削除します。
Entire application

16フォルダが残るので削除

Windowsを再起動し、もう一度PgAdmin4にてDBにアクセスできるかを確認して問題が出なければ終了です。