[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 メーリングリストの案内