100日でPostgreSQLをマスター(96日目)~pg_xlogディレクトリ名の変更~

PostgreSQL
※アフィリエイト広告を利用しています

ITエンジニアのYukiです。

100日で、PostgreSQL資格のOSS-DB Gold取得目指してきましたが、目標達成が難しくなってきました。

プライベートで用事が重なってしまったため、1カ月ほど遅れそうです。

遅れてしまいましたが、引き続き勉強を進めたいと思います。

前回のchekcpoint_segmentsパラメータに続き、OSS-DB 1.0から2.0で変わった点をまとめます。

今回は、WAL格納先であるpg_xlogディレクトリなどの名前変更についてです。

昔のテキストを読むときや、昔のPostgreSQLは知っているという人の参考になればと思います。

Photo by Emma Louisa on Unsplash

広告

ディレクトリのリネーム

PostgreSQL 9.6から10で、WAL格納先などの各ディレクトリ名が以下のように変更されました。

  • WAL格納先: pg_xlog → pg_wal
  • トランザクション状態格納先: pg_clog → pg_xact
  • ログ出力先(デフォルト): pg_log → log

左が9.6までの名前で、右が10のものです。

この変更の理由は、名前に「log」と付いていることで、間違えて削除されるトラブルが起きていたためとのこと。SRA社の技術記事に記載がありました。

WAL格納ディレクトリが pg_xlog から pg_wal にリネームされました。
また、トランザクション状態格納ディレクトリも pg_clog から pg_xact にリネームされました。(Michael Paquier) (10)

PostgreSQL利用者はしばしばこれらディレクトリ内のファイルを不要ファイルと考えて手動削除しようとする場合がありました。
これは、復元不可能なデータ損失を招きます。
このディレクトリ名称変更によって、そのような失敗の回避を試みます。

(「PostgreSQL 10 に関する技術情報」SRA OSS Tech Blog より)

 

このトラブルが発生した現場のことを思うと、心が痛みます。

言われてみると、pg_log, pg_clog, pg_xlogと並んでいたら、よく知らない人は消してしまうかもしれませんね。

このページを読んでるような人は、そういう人はいないと思いますが。

一方、デフォルトのログ出力先のディレクトリは、「pg_log」から単なる「log」に変更されています。

サーバパラメータの log_directory のデフォルト値が pg_log から log に変更されました。 (Andreas Karlsson) (10)

(「PostgreSQL 10 に関する技術情報」SRA OSS Tech Blog より)

関数、コマンドのリネーム

pg_xlogディレクトリ名が変更されたことに合わせ、xlogと付いていたSQL関数やコマンドもリネームされました。この変更により、ユーザが使う場面で「xlog」という言葉は使われなくなりました。

xlog に関連する SQL関数、ツール、オプションの名称が wal に変更されました。 (Robert Haas) (10)

たとえば、pg_switch_xlog() は pg_switch_wal() に、pg_receivexlog は pg_receivewal になり、–xlogdir オプションは –waldir オプションに変わります。
これは、pg_xlog ディレクトリ名が変更されることを受けての変更です。xlog というワードはユーザが利用する場面では使われなくなりました。

(「PostgreSQL 10 に関する技術情報」SRA OSS Tech Blog より)

関数の名前では、あわせて「location」が「lsn」に変更されています。

WAL に関する関数とビュー名で使われていた location というワードが lsn に変更されました。 (David Rowley) (10)

これまで 2つの用語が混在していました。

(「PostgreSQL 10 に関する技術情報」SRA OSS Tech Blog より)

上記の変更により、PostgreSQL 10では、バックアップ・リカバリ関連の関数の名前が変わっています。

リネームされた関数

名前が変更された関数をリストアップします。こちらも左側が9.6までで、右側が10です。

マニュアルでは、9.6と10でそれぞれ以下のページに記載されています。

PostgreSQL 9.6.5文書

9.26. システム管理関数

PostgreSQL 10.5文書

9.26. システム管理関数

 

バックアップ制御関数

pg_current_xlog_flush_location()pg_current_wal_flush_lsn()
pg_current_xlog_insert_location()pg_current_wal_insert_lsn()
pg_current_xlog_location()pg_current_wal_lsn()
pg_switch_xlog()pg_switch_wal()
pg_xlogfile_name(location pg_lsn)pg_walfile_name(lsn pg_lsn)
pg_xlogfile_name_offset(location pg_lsn)pg_walfile_name_offset(lsn pg_lsn)
pg_xlog_location_diff(location pg_lsn, location pg_lsn)pg_wal_lsn_diff(lsn pg_lsn, lsn pg_lsn)

リカバリ情報関数

pg_last_xlog_receive_location()pg_last_wal_receive_lsn()
pg_last_xlog_replay_location()pg_last_wal_replay_lsn()

リカバリ制御関数

pg_is_xlog_replay_paused()pg_is_wal_replay_paused()
pg_xlog_replay_pause()pg_wal_replay_pause()
pg_xlog_replay_resume()pg_wal_replay_resume()

以上のように、「xlog」は「wal」に、「location」は「lsn」に変わっているのがわかります。

lsnは、ログシーケンス番号(log sequence number)のことですね。

リネームされたコマンド

pg_resetxlogコマンドも、pg_resetwalコマンドにリネームされました。

WALや制御情報を初期化するコマンドです。

無事に運用している限り、お世話にならないコマンドですね。

マニュアルは9.6と10でそれぞれ以下のページです。

PostgreSQL 9.6.5文書

pg_resetxlog

PostgreSQL 10.5文書

pg_resetwal

リネームの原因になったWALファイルの手動削除をした場合は、復旧に使うかもしれません。機会があれば、練習用の環境で試してみたいと思います。

参考情報

引用したSRA社の技術情報で、PostgreSQL 10でどのような変更があったかまとめられています。ほかに9.x時代からどのような変更があったか知りたい方は、参考になるかと思います。

PostgreSQL 10 に関する技術情報」SRA OSS Tech Blog

まとめ

今回は、pg_xlogディレクトリの名前にまつわる変更について、まとめました。

知らずに古いディレクトリやSQL関数を見ると戸惑うかもしれませんが、知っていればなんてことはないですね。

これらのディレクトリ名、SQL関数名は、9.6から10で変更されました。PostgreSQL 10以降、ユーザが利用する場面では、「xlog」という言葉は使われなくなりました。

 

<55日目 | 目次 | 97日目>

<<1日目から読む

広告
この記事を書いた人
YukiITEngineer

ITエンジニア。
データベースの仕事が中心です。Oracleメイン。PostgreSQL勉強中。
趣味は読書、筋トレ、ランニング。投資に興味あります。
勉強したことや初心者向け記事を書いてます。

YukiITEngineerをフォローする
PostgreSQL
YukiITEngineerをフォローする
Yuki's ITエンジニア・ブログ

コメント

タイトルとURLをコピーしました