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 さんです。



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

■商標に関して
 ・Oracle®、Java、MySQL及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
 ・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
  文中の社名、商品名等は各社の商標または登録商標である場合があります。

関連している記事

  • EDB
  • PostgreSQL
2024.01.16

EDBがもたらすデータベースの新たな価値 ~ EDB社Field CTO Ajit Gadge氏来日、セミナー講演レポート ~

EDB社のAjit Gadge氏を招き「PostgreSQLユーザーに捧ぐ、EDBを使ったDB機能向上とコスト削減の両立」セミナーを開催しました。DB市場の現状やトレンド、EDBの最新動向について紹介しております。アシストセッションのアーカイブ配信の視聴申し込みも可能です。ぜひご覧ください。

  • PostgreSQL
  • EDB
2023.12.20

PostgreSQLのSQLチューニングを体験してみよう!

35年以上教育事業を展開しているアシストが新たに取り組み始めた「ポスグレ学園」。連載最終回となる9回目の記事では、「PostgreSQL SQLチューニング実践」のワークショップ主管である 田中 健一朗 にインタビューしました。

  • PostgreSQL
  • EDB
2023.10.30

データベースの健康診断! ~ PostgreSQL DB稼働分析体験 ~

35年以上教育事業を展開しているアシストが新たに取り組み始めた「ポスグレ学園」。連載8回目となる今回の記事では、PostgreSQL DB稼働分析ワークショップの主管である保田 公貴にインタービューしました。

ページの先頭へ戻る