Database Support Blog

  • PostgreSQL
  • EDB
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製品のサポートに従事してきました。このブログではサポート対応で得た知識を元に、お客様がお困りになることが多い問題や各製品の新機能に関する検証結果などを紹介します。


■本記事の内容について
 本記事に示した定義及び条件は変更される場合があります。あらかじめご了承ください。

■商標に関して
 OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。
 文中の社名、商品名等は各社の商標または登録商標である場合があります。


Oracle Databaseライセンスのご相談ならアシスト

関連している記事

  • PostgreSQL
  • EDB
2022.05.25

アシストがPostgreSQLグローバル開発グループのSponsor一覧に掲載されたので、中の人に話を聞いてみた!(前編)

アシストは2009年からPostgreSQLのプロダクトサポートを開始、2010年に日本PostgreSQLユーザー会への協賛会員として参画、2012年にPostgreSQL エンタープライズ・コンソーシアムに参画しています。現在JPUGで活躍する田中・喜田の両名がどのような活動をしているのか2回にわたってお届けします。

  • Oracle Database
  • Oracle Cloud
  • PostgreSQL
  • AWS
  • Exadata
2022.05.24

入社2年目がレポート!Cloud Database Days 2022技術セッションの見どころ

2022年5月26日~6月3日に開催される「Cloud Database Days 2022」。その中でも10個に分かれた技術セッションについて、ポイントを押さえてそれぞれご紹介いたします!

  • EDB
  • PostgreSQL
  • AWS
2022.04.13

クラウドへのデータベース移行を検討中の方必見!「EDB」とは?

2022年4月22日(金)に開催する「アシスト流 EDB活用術 on AWS」の内容をチラ見せ。「EDBって何?」という方から「EDBは知ってるけどクラウド上でもEDB??」という方まで、ぜひお申し込みください。

ページの先頭へ戻る