Slony-I 1.2でslonik_merge_set,slonik_drop_setを使ってみた

Slony-Iレプリケーションを実施中に、レプリケーション対象のテーブルを追加するため、slonik_merge_setを使ってみた。

slonik_merge_set は、直接テーブルを追加するのではなく、テーブルの集合としての setを作成し、既存のsetに追加する。このため、slonik経由でmerge_setを使う際には、まずslonik向けのsetの定義を行う必要がある。

手順としては、次のようになる。

1. マスター・スレーブの両側でテーブルを作成
2. slon_tools.conf にsetを追加
(tabel_idが重複しないよう十分大きいものを選ぶ)

    • -
"set11" => { > "set_id" => 11, > "table_id" => 11, > "pkeyedtables" => ["table4"], > },
    • -
3. slonik_create_set でsetをDBに追加 $ slonik_create_set set11 | slonik 4. slonik_subscribe_set でsetのレプリケーションを開始 (merge_setを行うには、subscribe_setの状況を統一する必要があるため) $ slonik_subscribe_set set11 2 | slonik 5. slonik_merge_sets を実施し、既存のsetに新規のsetを追加 $ slonik_merge_sets 1 set1 set11 | slonik 6. slon_tools.conf を再度編集し、既存setへのテーブル追加、 テーブル追加用setの削除を行う

逆に、slonの使用中にレプリケーションの対象テーブルを減らすには、slonik_drop_set を使う。slonik_drop_set には対象のsetと、テーブルIDが必要なため、あらかじめテーブルIDを確認しておく必要がある。

postgres> select * from _replication.sl_table;

テーブルIDが11とすると、次のようにdrop_tableを実施する。

$ slonik_drop_table 11 1 | slonik