[pgsql-jp: 39967] Re: OIDとXIDを使いきると?

Itagaki Takahiro itagaki.takahiro @ oss.ntt.co.jp
2009年 8月 17日 (月) 09:51:10 JST


Tatsuo Ishii <ishii @ sraoss.co.jp> wrote:

> > 便乗ですが、ちなみにこのような状況を試してみる
> > 簡単な方法というのはあるのでしょうか。
> 
> 他に良い方法があるのかも知れませんが、私の場合、共有メモリ上の、
> ShmemVariableCache->nextXid;
> を直接触るC関数を書いてXIDを無理やり周回させて実験しました。

それはまた職人向けな方法ですね :-)
いったんデータベースを止めてよければ、pg_resetxlog を使う手があります。
-o, -x あたりが、今回の状況に対応しています。

http://www.postgresql.jp/document/current/html/app-pgresetxlog.html

$ pg_resetxlog --help
pg_resetxlogはPostgreSQLのトランザクションログをリセットします。

使用方法:
  pg_resetxlog [OPTION]... DATADIR

オプション:
  -e XIDEPOCH     次のトランザクションIDエポックを設定します
  -f              強制的に更新を実施します
  -l TLI,FILE,SEG 新しいトランザクションログについて、強制的に最小のWAL開始位置を設定します
  -m XID          次のマルチトランザクションIDを設定します
  -n              更新をせず、単に取り出した制御値を表示します(試験用)
  -o OID          次のOIDを設定します
  -O OFFSET        次のマルチトランザクションオフセットを設定します
  -x XID          次のトランザクションIDを設定します

> もちろんこんなことをするとデータベースが以後使い物にならなくなる可能性
> が高いので、あくまで実験用ということで。
もちろん pg_resetxlog も同様にデータを破壊する可能性があるのでご注意を。

------------------------------------------------------------
NTT オープンソース ソフトウェア センタ
板垣貴裕 <itagaki.takahiro @ oss.ntt.co.jp>





pgsql-jp メーリングリストの案内