postgres/Ubuntu\343\201\247PostgreSQL 15\343\202\22217\343\201\253\343\202\242\343\203\203\343\203\227\343\202\260\343\203\254\343\203\274\343\203\211\343\201\231\343\202\213.md
... ...
@@ -0,0 +1,122 @@
1
+**注: 以下はChatGPT o1によって生成された文章です。**
2
+
3
+
4
+## 1. PostgreSQL 17 のインストール
5
+
6
+PostgreSQL 17 のリポジトリとパッケージが公開されている場合、以下のように実行します:
7
+
8
+```bash
9
+sudo apt-get install postgresql-17
10
+```
11
+
12
+これでシステム上に PostgreSQL 17 のバイナリや、cluster のスクリプトなどがインストールされます。
13
+
14
+---
15
+
16
+## 1. 既存の PostgreSQL 15 の確認
17
+
18
+PostgreSQL のデータベースクラスタ管理は `postgresql-common` が提供するコマンド `pg_lsclusters` で確認できます。
19
+
20
+```bash
21
+pg_lsclusters
22
+```
23
+
24
+通常、インストール直後は以下のようなクラスタが存在しているはずです:
25
+
26
+- 15 メインクラスタ: `15 main ...`
27
+- 17 メインクラスタ: `17 main ...`
28
+
29
+※ PostgreSQL 17 インストール時に、自動的に空の `17/main` クラスタが作成される場合があります。
30
+
31
+---
32
+
33
+## 1. 新規クラスタを削除 (空の17クラスタを作り直す場合)
34
+
35
+PostgreSQL 17 インストール時に自動生成された「空」の `17/main` クラスタが不要であれば、`pg_upgradecluster` 実行前に削除しておきます。
36
+
37
+```bash
38
+sudo pg_dropcluster 17 main --stop
39
+```
40
+
41
+クラスタを削除すると、同名クラスタでの `pg_upgradecluster` が可能になります。
42
+
43
+---
44
+
45
+## 1. データのアップグレード(pg_upgradecluster を使用)
46
+
47
+Ubuntu/Debian 系で提供されている `pg_upgradecluster` コマンドを使うと、自動的に
48
+
49
+- 旧バージョンのデータディレクトリ → 新バージョンのデータディレクトリへのマイグレーション
50
+- 設定ファイルのコピー
51
+- ポート設定やサービス設定の反映
52
+
53
+などを行ってくれます。以下のコマンドを実行してください。
54
+
55
+```bash
56
+sudo pg_upgradecluster 15 main
57
+```
58
+
59
+このコマンドは下記を自動的に実行します。
60
+
61
+1. 既存の 15/main クラスタを読み込み
62
+2. 新しい 17/main クラスタ用のデータディレクトリを初期化
63
+3. PostgreSQL 15 と 17 のバイナリを使い分けながら `pg_upgrade` を実行
64
+4. 15/main の設定ファイルなどを 17/main にコピー
65
+5. 必要に応じて、元の 15/main を停止し、17/main を起動
66
+
67
+処理が完了したらエラーがないかを確認してください。エラーが無ければ、アップグレードは成功です。
68
+
69
+---
70
+
71
+## 1. 動作確認
72
+
73
+アップグレードが完了したら、 PostgreSQL 17 のクラスタが起動しているかを確認します。
74
+
75
+```bash
76
+pg_lsclusters
77
+```
78
+
79
+`17 main ... online` のようになっていれば OK です。
80
+次にデータベースに接続できるかを確認します。
81
+
82
+```bash
83
+sudo -u postgres psql
84
+```
85
+
86
+正しくログインでき、テーブルやスキーマなどが期待通りに移行されているか確認してください。
87
+
88
+---
89
+
90
+## 1. 古いバージョン(15) のクラスタ削除(不要であれば)
91
+
92
+アップグレード後に問題が無ければ、古いデータディレクトリは削除しても構いません。`pg_upgradecluster` は既存のクラスタを削除しませんが、不要であれば下記コマンドで削除が可能です。
93
+
94
+```bash
95
+sudo pg_dropcluster 15 main --stop
96
+```
97
+
98
+さらにパッケージとしても PostgreSQL 15 が不要であれば削除可能ですが、他に依存がある場合は削除前にご注意ください。
99
+
100
+```bash
101
+sudo apt-get remove postgresql-15
102
+```
103
+
104
+---
105
+
106
+## 1. トラブルシューティング
107
+
108
+- **ポートの競合**: 15 と 17 が同時に起動できない場合、設定ファイルに定義されたポート番号が重複している可能性があります。`/etc/postgresql/<バージョン>/main/postgresql.conf` を確認してみてください。
109
+- **拡張機能/モジュール**: 特定の拡張機能(例: PostGIS 等)を使用している場合、PostgreSQL 17 向けに該当拡張が対応しているか確認が必要です。
110
+- **十分なストレージ容量**: `pg_upgrade` は一時ファイルやリンクを作成するため、アップグレード前に空き領域が十分あるか確認してください。
111
+
112
+---
113
+
114
+## まとめ
115
+
116
+1. **PostgreSQL 17** をインストール
117
+2. 自動生成された空のクラスタを必要に応じて削除
118
+3. `pg_upgradecluster 15 main` を実行
119
+4. 動作確認
120
+5. 問題なければ古いクラスタや不要パッケージを削除
121
+
122
+上記のステップで、PostgreSQL 15 から PostgreSQL 17 へのアップグレードをデータを保持したままスムーズに行うことができます。必ず **事前にバックアップ** を取った上で実施することを強くおすすめします。