[pgpool-general-jp: 613] Re: オンラインリカバリを実施するとノード間のシーケンスがずれる

kamisima @ vips.co.jp kamisima @ vips.co.jp
2009年 8月 18日 (火) 13:34:35 JST


石井様
石田様

お世話になっております。神島です。

>石田さんからのsuggestionで、リカバリのセカンドステージで以下を実行する
>ようにしてみました。
>
># 強制的に現在のシーケンスをログに出力
>psql -t -c 'SELECT datname FROM pg_database WHERE NOT datistemplate AND datallowconn' template1|
>while read i
>do
>  if [ "$i" != "" ];then
>    psql -c "SELECT setval(oid, nextval(oid)) FROM pg_class WHERE relkind = 'S'" $i
>  fi
>done
>
>これは何をやっているかというと、全データベースの全シーケンスについて、
>強制的に現在のシーケンス値をsetval()を使ってWALログに書くということを
>やっています(WALログに書くのはsetval()の副作用)。
>これを、セカンドステージの
>
>psql -c 'SELECT pg_switch_xlog()' template1
>
>の前でやるのが味噌です。
>
>これで今のところリカバリ後シーケンス値が同期しているように見えます。
>お試し下さい。
>
>なお、これによって、マスタ側の全シーケンスが1つ進んでしまいますが、こ
>れはしょうがないということで。

上記のように2ndステージで実行するスクリプトを修正したところ、シーケンスもうまく同期してくれるようになりました。
どうもありがとうございました。



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