STUDIO PLUS TWO ブログ

横浜のウェブエンジニアチーム、STUDIO PLUS TWO(スタジオ・プラスツー)の技術ブログです。https://studioplustwo.jp/

Ubuntu + PostgreSQL + PGroonga 環境における、PostgreSQL 14 へのアップグレード手順

www.postgresql.org

当スタジオにて運用中のシステムで稼働している PostgreSQL 13 系 を 14 系 にアップグレードしたときの手順を紹介。

当該システムでは PGroonga による全文検索機能を実現しているのだが、PGroonga 2.3.2 により PostgreSQL 14 系がサポートされるようになったため、満を持してアップグレードを実施することに。

参考: https://pgroonga.github.io/ja/news/#version-2-3-2

はじめに注意点

PGroonga をアップグレード → その後に PostgreSQL をアップグレードという手順も試したものの、14系対応バージョンのPGroongaでも、13系のPostgreSQLライブラリでビルドした場合、13系用バージョンとなってしまい14への移行時に version mismatch エラーが発生する模様。

PostgreSQL 14系のライブラリのみをまず入れる」→「14系用のPGroongaをビルド&インストール」→「PostgreSQL 14本体をインストール&13からのアップグレード」という、少々トリッキーな手順で実施すればうまくいく可能性もあるが、今回は PostgreSQL を先にアップグレードする手順を採用した。(後者の場合、インデックスの再構築は必要となる一方、手順に紛れがないので、インデックス再作成により停止時間が長くなるのを許容できるのであればおススメ)

アップグレード前の構成

PostgreSQL 14 のインストール

まずは作業前に、PostgreSQLのデータバックアップを実施。

Ubuntu では、pg_upgradecluster をはじめとした専用のコマンドが存在するため、今回はこれらを使用していく。

lets.postgresql.jp

PostgreSQL の公式 apt リポジトリを追加していない場合は、以下の手順に従って追加作業を実施。

www.postgresql.org

PostgreSQL 14のサーバ/クライアント/ビルド用ライブラリをインストール。

$ sudo apt install postgresql-14 postgresql-client-14 postgresql-server-dev-14

インストール後は、PostgreSQLクラスタに自動追加されるため、 pg_dropcluster コマンドにより PostgresSQL 14を手動で削除。

$ pg_lsclusters
(...14系がインストールされていることを確認)
$ sudo pg_dropcluster 14 main --stop

さらに PostgreSQL サービスを停止した後、pg_upgradecluster コマンドにより13からのアップグレードを実施。

アップグレードにはデータサイズに応じた時間を要する。

$ sudo systemctl stop postgresql.service
$ sudo pg_upgradecluster 13 main

pg_upgradecluster でこんなエラーが出て、全文検索インデックスのみ移行がスキップされる形となるが、アップグレード自体は成功する。

ERROR:  incompatible library "/usr/lib/postgresql/14/lib/pgroonga.so": version mismatch
DETAIL:  Server is version 14, library is version 13.
ERROR:  extension "pgroonga" does not exist
ERROR:  access method "pgroonga" does not exist

アップグレード後は PostgreSQL を起動

$ sudo systemctl start postgresql.service

Groonga のアップグレード

Ubuntu 20.04 標準で利用できる Groonga だとバージョンが足りないため、まずはGroongaのアップグレードを実施。

参考 : https://groonga.org/ja/docs/install/debian.html

$ wget https://packages.groonga.org/debian/groonga-apt-source-latest-buster.deb
$ sudo apt install -y -V ./groonga-apt-source-latest-buster.deb
$ sudo apt update
$ sudo apt install libgroonga-dev

PGroonga のビルド

参考: https://pgroonga.github.io/ja/install/ubuntu.html

前述通り、2.3.2以降であれば PostgreSQL 14 に対応している。本記事を執筆時点の PGroonga 最新版は 2.3.4 なのでこちらを採用。

$ wget https://packages.groonga.org/source/pgroonga/pgroonga-2.3.4.tar.gz
$ tar xvfz pgroonga-2.3.4.tar.gz
$ cd pgroonga-2.3.4/
$ make HAVE_MSGPACK=1

PGroongaのアップグレード

システム側のプロセスを全停止し、PGroongaをインストール。

$ sudo make install

全文検索インデックスの再作成

管理ユーザで psql を起動し、psql上で以下のSQL文を実行し、pgroonga拡張を作成。

CREATE EXTENSION pgroonga;

さらに以下のSQLを実行し、全文検索インデックスを再作成。(インデックス名、テーブル名はダミー)データサイズに応じた処理時間がかかる。

CREATE INDEX index_hogehoge_on_text ON hogehoge USING pgroonga (text);

全文検索機能が正しく機能することを確認して、作業終了。