2016年9月24日土曜日

PostgreSQL 9.5→9.6へupgradeに伴うMediaWikiへの影響と対策

Debian Sidで、PostgreSQLが9.5→9.6にupgradeされた。MediaWikiをPostgreSQL +textsearch_jaで使っている人は、clusterのupgradeをする前にtextsearch_jaのinstallが必要。

Upgrade手順の概要


  • database clusterのbackupを取る
  • (aptitudeとかで) PostgreSQLをupgrade (今回は9.5→9.6)
  • PostgreSQLやweb serverなどを停止
  • textsearch_jaを9.6のdevelopment filesでrebuild & install
  • pg_upgradeclusterでclusterをupgrade
  • textsearch_ja.sqlを修正し、対象databseに適用
  • web serverなどをstart
  • MediaWikiの動作確認
  • 古い (9.5の)clusterをdrop

実際にいろいろとやってみた結果、上記の手順なら不具合が出ないか少なくて済むと思う。

なお、以下の個別の詳細手順については↑とは一致しない。というのも、aptitudeでupgradeすると、9.6がinstallされた時点でserverが9.6の空cluster+port 5433でstartしてしまっているから。

PostgreSQLのupgrade

PostgreSQLそのもののupgradeに関しては/usr/share/doc/postgresql-9.6/README.Debian.gzを参照のこと。

ざっくりまとめると、install scriptによって新しいversion (9.6)の空っぽのclusterが自動で作られるので、それをdropしてから古いversion (9.5)のclusterを9.6にupgradeしてね、ということ。

pg_dropcluster 9.6 main
pg_upgradecluster 9.5 main

なお、不要になった古いversionのclusterは、変換したclusterが正常であることを確認した後に削除して良い。

portの修正

この時点で9.5のserverがport 5432を使っていたため、9.6のserverはport 5433を使ってしまった。/etc/postgresql/9.6/main/postgresql.confにportの設定があるので、これを5432に修正しておく。

portが変更されたままだとphp-fpmとかがPostgreSQLを見付けられなくなる。

MediaWiki関連のupgrade

textsearch_jaの更新

MediaWikiで全文検索できるようにするため、PostgreSQLで日本語の全文検索を行うためのtextsearch_jaをinstallする。SourceからbuildするのにPostgreSQLのdeveloment packageが必要なのでpostgresql-server-devをinstallしておく。

textsearch_jaのdirectoryにて:

make PGXS_USE=1
sudo make PGXS_USE=1 install

これで/usr/share/postgresql/9.6/contrib/あたりに関連filesがinstallされる。

※この手順が終わるより前にpg_upgradeclusterを実行すると、functionが見付からないとかでMediaWiki関連のdatabaseでerrorが大量に出る。

textsearch_jaの適用

MediaWikiが使用しているdatabaseにtextsearch_jaをinstallする。しかし、その前にPostgreSQLの仕様変更に伴う修正をtextsearch_ja.sqlに行う必要がある。

具体的には"LANGUAGE 'C'" → "LANGUAGE c"に全て変更する。

cf. http://stackoverflow.com/questions/12514664/postgresql-procedural-language-c-not-found

修正後、

psql -f /usr/share/postgresql/9.6/contrib/textsearch_ja.sql <database>

既にfunctionがあるとかでerrorが出る場合は、一旦

psql -f /usr/share/postgresql/9.6/contrib/uninstall_textsearch_ja.sql <database>

を実行してから、あらためてやりなおす。


0 件のコメント:

コメントを投稿