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