Database Support Blog

Database Support Blog>PostgreSQL10へのアップグレード前に押さえておきたい3つの注意点

  • PostgreSQL
  • EDB Postgres
2017.12.20

PostgreSQL10へのアップグレード前に押さえておきたい3つの注意点

PostgreSQL10へのアップグレード前に押さえておきたい3つの注意点

これは PostgreSQL Advent Calendar 2017 の20日目の記事です。

2017年10月5日に様々な機能が追加・改良されたPostgreSQL10がリリースされました。一つ前のメジャーバージョンはPostgreSQL9.6ですので、従来通りであればPostgreSQL9.7と命名されるはずでした。しかし、今回のメジャーバージョンアップでは、パーティションニング構文や論理レプリケーションなどの大幅な機能追加・改良が加えられていることよりPostgreSQL10と命名されています。また、これに合わせてバージョン表記もx.y.zの3桁表記からx.yの2桁表記に変更され、メジャーバージョンは上位2桁から1桁のみで示すようになりました。

今後、PostgreSQL9.6以前のバージョンからPostgreSQL10へのアップグレードを検討される方が増えることが予想されますので、本記事ではPostgreSQL10へのアップグレードを行う前に押さえておきたい3つの注意点についてご紹介します。


1. 各ディレクトリ名や関数名などの変更に伴うシェルスクリプトや監視ツールの修正

PostgreSQL10ではいくつかのディレクトリ名や関数名などが変更されています。メンテナンス系のシェルスクリプトや監視ツールで下記ディレクトリ名や関数名などをハードコードされている場合は、PostgreSQL10以降の名称に修正する必要があります。

* ログファイル出力先のディレクトリ名がpg_logからlogへ変更
* WALに関連するディレクトリ/関数/コマンドなどでxlogwallocationlsnに変更
* コミットログの出力先ディレクトリ名がpg_clogからpg_xactへ変更

▼PostgreSQL10以降で変更されたディレクトリ/関数名などの例
PostgreSQL9.6以前の名称 PostgreSQL10以降の名称
pg_log log
pg_xlog pg_wal
pg_clog pg_xact
pg_current_xlog_location pg_current_wal_lsn
pg_xlogdump pg_waldump
pg_receivexlog pg_receivewal

なお、locationという文字列を含む関数にpg_tablespace_locationがありますが、この関数はWALとは関連がないため、PostgreSQL10でも名称は変更されていません。locationという文字列を含む全てのオブジェクトがlsnに変更されているわけではない点も注意が必要です。


2. pg_upgradeコマンドでアップグレードした場合はHash Indexの再作成が必要

Hash Indexが使用されている環境をpg_upgradeコマンドでPostgreSQL10にアップグレードした場合、 以下の警告メッセージが出力されます。 これはHash Indexの内部的なフォーマットが変更されたたためであり再作成するまでHash Indexは使用されません。

▼Hash Indexが含まれる環境をpg_upgradeコマンドでアップグレードする際の出力

 Checking for hash indexes                                   warning
 Your installation contains hash indexes. These indexes have different  internal formats between your old and new clusters, so they must be  reindexed with the REINDEX command. The file   reindex_hash.sql  when executed by psql by the database superuser will recreate all invalid  indexes; until then, none of these indexes will be used. #再作成しなければ、Hash Indexは使用されない。

pg_upgradeコマンドを実行したカレントディレクトリに、再作成用のスクリプト reindex_hash.sql が 出力されているので、このスクリプトを実行してHash Indexを再作成してください。

▼reindex_hash.sqlを使用してHash Indexを再作成する例

$ psql -f reindex_hash.sql
You are now connected to database "postgres" as user "p100".
REINDEX


3. to_timestamp関数とto_date関数には正しい日付を設定

to_timestamp関数とto_date関数で入力値のチェックが厳格になり、日付として正しくない値を入力した際にエラーが返るようになりました。 例えば、PostgreSQL9.6以前でselect to_date('2017-02-29','YYYY-MM-DD');の結果には'2017-03-01'が返されましたが、PostgreSQL10ではエラーが発生します。 なお、うるう年には対応しているのでselect to_date('2020-02-29','YYYY-MM-DD');は正しく結果を返します。

▼各バージョンでselect to_date('2017-02-29','YYYY-MM-DD');を実行した結果

--PostgreSQL9.6以前
postgres=# select to_date('2017-02-29','YYYY-MM-DD'); to_date ------------ 2017-03-01 (1 row)   --PostgreSQL10以降
postgres=# select to_date('2017-02-29','YYYY-MM-DD'); ERROR: date/time field value out of range: "2017-02-29" #PostgreSQL10以降ではエラーが発生する。

まとめ

今回は、PostgreSQL10へのアップグレード前に押さえておきたい3つの注意点をご紹介しました。この記事で紹介した以外にも リリースノート にPostgreSQL10にアップグレードする方法や注意点などがまとめられています。未然に問題を防ぐために、PostgreSQL10へのアップグレード前にはリリースノートもご一読ください。

PostgreSQL Advent Calendar 2017 21日目の担当は kaigai さんです。


執筆者情報

家島 拓也

サービス事業部 サポートセンター

2007年にアシストに入社して以来、ORACLE製品やPostgreSQL・EDB Postgres製品のサポートに従事してきました。このブログではサポート対応で得た知識を元に、お客様がお困りになることが多い問題や各製品の新機能に関する検証結果などを紹介します。


データベースのサポートならアシスト

関連している記事

  • PostgreSQL
  • EDB Postgres
2019.04.16

【PostgreSQL/EPAS11 新機能】autoprewarmでPostgreSQL再起動後の性能劣化を予防しよう

PostgreSQL/EDB Postgres Advanced Server 11にて、PostgreSQL/EPAS停止前の共有バッファの内容を復元する autoprewarm機能が実装されました。

  • PostgreSQL
  • EDB Postgres
2018.12.12

レプリケーションスロットを使用する際の4つの注意点

レプリケーションスロットを使用する際の4つの注意点を紹介します。

  • PostgreSQL
  • EDB Postgres
2018.10.19

【PostgreSQL/EPAS11 新機能】バックアップと同時にデータ破損チェック!

pg_basebackupにチェックサムの検証機能が付きました。

アシストサポートセンターのご紹介

ページの先頭へ戻る