[pgsql-jp: 41112] Re: unloggedなテーブルのスレーブでの参照
花田 茂
hanada @ metrosystems.co.jp
2012年 5月 24日 (木) 16:56:45 JST
花田です。
レプリケーション環境が手元にないので確実な回答ではありませんが…
(2012/05/24 15:41), 松崎 学 wrote:
> 松崎ともうします。お世話になります。
>
> 9.1.2を同期レプリケーションモードで構成しています。
>
> ワークテーブルとして使っているunloggedオプション付きのテーブルがあるのですが、
> unloggedを付けていると、以下のような場合そのテーブルを参照した時にエラーになってしまいます。
>
> 1. スレーブ側でダンプを取得する時
> → pg_dump: サーバのエラーメッセージ: ERROR: could not open file
> "pg_tblspc/16384/PG_9.1_201105231/89589/270288": No such file or
> directory
pg_dump/pg_dumpall については --no-unlogged-table-data オプションを指定
することでエラーを回避できるかもしれません。
http://www.postgresql.jp/document/pg912doc/html/app-pgdump.html
> --no-unlogged-table-data
> ログを取らないテーブルの内容をダンプしません。 このオプショ
> ンはテーブル定義(スキーマ)をダンプするかどうかには影響しま
> せん。 そのテーブルデータのダンプを抑制するだけです。
ただし、根本的には UNLOGGED テーブルを構成するデータファイルが存在しな
い、ということが原因のようなので、この対処はあくまで急場しのぎです。
> 2. マスタに障害が発生してスレーブがマスタに昇格後、そのテーブルをDELETEやSELECTする時。
> → エラーメッセージはダンプ取得時と同じです。テーブルをdropしてcreateし直すとエラーは出なくなります。
このエラーが出始める前に、ひょっとしたらマスターで UNLOGGED 指定したワー
クテーブルを TRUNCATE しているでしょうか?最近(五月に入ってから)報告さ
れたバグに「UNLOGGED テーブルを TRUNCATE するとデータファイルが消える」
というものがありました。
http://archives.postgresql.org/pgsql-bugs/2012-05/msg00049.php
CREATE UNLOGGED TABLE 直後はスレーブで検索などをしてもエラーにならず、マ
スタで TRUNCATE するとそれ以降エラーが出るようになる、ということであれば
このバグに引っかかっているのだと思います。
すでに修正は済んでいるので、次のマイナーリリース(9.1.4)にアップグレード
すれば直ると思いますが、それまでは TRUNCATE ではなく DROP/CREATE や
DELETEに置き換えるといった対処が必要そうです。
--
株式会社メトロシステムズ
花田 茂
Mail : hanada @ metrosystems.co.jp
Tel : 03-5951-1219
Fax : 03-5951-2929
pgsql-jp メーリングリストの案内