詳解 PostgreSQL[10/11対応]―現場で役立つ新機能と実践知識

第4章 PostgreSQL の運用に便利な機能―バックアップ,レプリケーション,パーティション,バージョンアップ

この記事を読むのに必要な時間:およそ 8 分

PostgreSQLのバージョンアップ

ここまで読んで,最新版のPostgreSQLを使いたくなったのではないでしょうか。本節では,PostgreSQLのバージョンアップに必要は知識を紹介します。

メジャーバージョンアップとマイナーバージョンアップの違い

PostgreSQLのバージョンは,次のポリシーで運用されています。

メジャーバージョンアップ
1年に1回,機能追加や機能改善として行われる。第1章で詳述
マイナーバージョンアップ
基本的には2月,5月,8月,11月の3ヵ月に1回,第二木曜日にバグ対応やセキュリティアップデートとして行われる。致命的な問題があれば例外として随時行われる

この周期でバージョンアップし,サポート期間は最新バージョンから4世代前までの5年となっています。

マイナーバージョンアップはバグ対応やセキュリティアップデートですから,PostgreSQLの仕様は基本的に変更されません。そのためアプリケーションへの影響は小さく,比較的簡単にバージョンアップすることができます。

メジャーバージョンアップには機能追加や変更も含まれます。場合によっては互換性のない仕様変更も含まれるため,アプリケーションの改修が必要になることもあります。

リリースノート

PostgreSQLの公式リリースノートはバージョンアップに有用です。変更点だけでなく,前バージョンからのバージョンアップで必要な情報も記載されています。メジャーバージョンアップだけでなく,マイナーバージョンアップの際も作られます。

マイナーバージョン─⁠─積極的に追随しよう

マイナーバージョンは,システムを守るためにも積極的に追随しましょう。

マイナーバージョンアップはyum updateなどで簡単に行えますが,PostgreSQLの再起動が必要です。ただし,マイナーバージョンが違ってもストリーミングレプリケーションは行えますので,先にスタンバイをマイナーアップデートし,フェイルオーバーして古いプライマリと新しいスタンバイを切り替えることで停止時間を短くするローリングアップデートという方法もあります。

メジャーバージョンアップ─⁠─互換性がないこともある

PostgreSQLはMySQLとは異なり,メジャーバージョンが違うDB間のストリーミングレプリケーションが行えません。また,物理バックアップを反映した場合も,メジャーバージョンが違う場合は起動できません。これは,データ構造やWALなどにメジャーバージョン間の互換性がないことがあるためです。

このように無停止で行うことが難しいメジャーバージョンアップですが,新機能や性能の向上などの大きなメリットがあります。

以降では,メジャーバージョンアップするために必要なノウハウを説明します。

pg_dump─⁠─リストアしてバージョンアップ

一番簡単な方法は,pg_dumpしたデータを新しいバージョンのPostgreSQLにリストアする方法です。

この方法は,サービスの停止を伴う場合が多く,新しいサーバも必要になります。データサイズが大きいとメンテナンス時間が長くなるため,採用できないケースもあります。

メリットは,シンプルであることと,旧DBが残るためロールバックしやすいことです。バージョンアップ前の検証として本番データを取得し,検証環境で動作確認する際などの用途でもお勧めの方法です。

メンテナンス時間が取れ,更新をある程度停止できるのであれば,この方法を検討しましょう。

pg_upgrade─⁠─そのままバージョンアップ

メンテナンス時間は取れるがデータが大規模のため,pg_dumpからリストアする時間が許容できないケースは多々あります。その場合は,PostgreSQLに同梱されているpg_upgradeを利用します。

PostgreSQL 8.4以降はデータファイルの構造が変更されていないため,pg_upgradeはテーブルやインデックスの再構築をしません。制御ファイルやシステムカタログなどを修正してバージョンアップするため,手順としてもシンプルです。

ただし,バージョンダウンはできないため,事前の検証や手順の確認などは周到に行いましょう。

ロジカルレプリケーションによるローリングアップデート

PostgreSQL 10から11へのバージョンアップであれば,ロジカルレプリケーションを利用してマイナーバージョンアップと同様にローリングアップデートできます。更新されるテーブルのみロジカルレプリケーションし,データが同期されたタイミングでマスタを切り替えてバージョンアップができます。図7のようにローリングアップデードを行うことができれば,サービスの停止を最小限に食い止めることができます。

図7 ロジカルレプリケーションでのバージョンアップ

図7 ロジカルレプリケーションでのバージョンアップ

サービス都合でなかなかメジャーバージョンアップできなかったサービスも,今後はロジカルレプリケーションでバージョンアップしやすくなります。

PostgreSQLの日本語情報源

PostgreSQLの魅力の一つは,日本語の公式マニュアルの存在です。また,企業による日本語レポートや,Slackも充実しています。順に見ていきましょう。

公式マニュアル

今回の記事でもたびたび紹介した日本語マニュアルは,本家PostgreSQLコミュニティの英語公式マニュアルをリリースがあるたびに翻訳しています。

注意点として日本語マニュアルは,新しいメジャーバージョンがリリースされると古いメジャーバージョンのマニュアルはメンテナンス対象外になります。そのため,古いバージョンの最新情報を知りたい場合は,英語版を参照しましょう。

日本語マニュアルは,英語版の公式マニュアルとは別にGitHubで管理されており,それをHTMLにビルドしたものがWebに掲載されています。PDFでも配布しており,Webサイトからダウンロードできます。

翻訳への参加

日本語マニュアルのGitHubのpublicリポジトリは,日本PostgreSQLユーザ会の文書・書籍関連分科会の主導のもと管理されています。

GitHub上でのやりとりは日本語で行われており,誰でも歓迎です。IssueもPull Requestも気軽に出すことができます。誤字脱字を指摘するIssueの発行は,特に気軽にできるコミュニティへの貢献です。

興味がある人は,翻訳に参加してください。その際は@noborusさんがまとめた日本語マニュアルの更新方法についてのQiitaの記事PostgreSQL日本語マニュアルについてが参考になります。ぜひ一読しましょう。

企業・団体によるレポート

個人で調べるには限界がありますが,企業や団体の力を借りることで有益なレポートが作られています。その中で特に有名なのが次の3つです。

postgresql-jpのSlack

PostgreSQLの有志が集まったSlackがあります。登録すれば誰でも参加できます。

PostgreSQLのコミッターのような上級者から,初心者までが気軽にコミュニケーションできる場所です。いろんな情報が集まりますし,困ったときに相談する#beginnersチャンネルもありますので,活用してください。みなさんの参加をお待ちしています。

特集のまとめ

本特集ではPostgreSQLについて紹介しました。

PostgreSQLに限らず,RDBMSはシステムの重要な役割を担っています。また,RDBMSは寿命が長いソフトウェアです。そのためRDBMSを知ることは重要ですし,学んだことが陳腐化せず,長期にわたり自分を助けるスキルになります。

その中でもPostgreSQLの魅力は,内部構造からコミュニティまで幅広くあります。開発者としてPostgreSQLの開発に参加するのも,ユーザーとして機能をレビューするのもPostgreSQLの楽しみ方の一つです。本特集がみなさんがPostgreSQLを知り,PostgreSQLをより一層使いこなし,PostgreSQLを楽しむきっかけになれば幸いです。

最後になりましたが,本特集の執筆に際して,レビュアーを快く引き受け,そして多くの指摘をくださった@sawada_masahikoさんに感謝します。

WEB+DB PRESS

本誌最新号をチェック!
WEB+DB PRESS Vol.119

2020年10月24日発売
B5判/160ページ
定価(本体1,480円+税)
ISBN978-4-297-11669-9

  • 特集1
    [古い技術,コードの重複,密結合]
    フロントエンド脱レガシー
    長く愛されるプロダクトをさらに改善していくために
  • 特集2
    インフラ障害対応演習
    「避難訓練」でいざに備える!
  • 特集3
    深層学習入門以前
    チュートリアルを動かす前に知っておくこと

著者プロフィール

曽根壮大(そねたけとも)

株式会社オミカレ副社長兼CTO。数々の業務システム,Webサービスなどの開発・運用を担当し,2017年に株式会社はてなでサービス監視サービス「Mackerel」のCRE(Customer Reliability Engineer)を経て現職。 コミュニティでは,Microsoft MVPをはじめ,日本PostgreSQLユーザ会の理事として勉強会の開催を担当し,各地で登壇している。 builderscon 2017,YAPC::Kansaiなどのイベントでベストスピーカーを受賞し,分かりやすく実践的な内容のトークに定評がある。 他に,岡山Python勉強会を主催し,オープンラボ備後にも所属。著書に『Software Design』誌で,データベースに関する連載「RDBアンチパターン」をまとめた『失敗から学ぶRDBの正しい歩き方』を執筆。

@soudai1025
はてなid:Soudai

著書