_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ Slony-Iの使用方法 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ---------------------------------------------------------------------- 【セッティング】 ■サーバ設定  Slony-Iのサーバモジュールは,利用データベースにplpgsqlがセッティングされていなければなりません. pgAdmin3で目標データベース作成とともに設定しておきましょう.  まず,データベースセットを用意します. pris -- マスターDB refl -- セカンダリDB としてみます. *********************** --- pris -- CREATE DATABASE pris WITH OWNER = postgres ENCODING = 'EUC_JP' TABLESPACE = pg_default; --- refl -- CREATE DATABASE refl WITH OWNER = postgres ENCODING = 'EUC_JP' TABLESPACE = pg_default; *********************** ■テーブルの設定  今回は,日本郵政公社(http://www.post.japanpost.jp/)が提供している全国の郵便番号住所のテーブルを作り, それをスレーブに反映するしくみで行ってみます.  下記を,それぞれのデータベース ・psql pris postgres ・psql refl postgres で作成します. *********************** CREATE TABLE 郵便番号住所t ( 連番 SERIAL PRIMARY KEY, 全国地方公共団体コード text, 旧郵便番号 text, 郵便番号 text, 都道府県カナ text, 市区町村カナ text, 町域カナ text, 都道府県名 text, 市区町村名 text, 町域名 text, 町域二 text, 小字番地 text, 丁目有 text, 郵便番号二 text, 更新表示 text, 変更理由 text); create index ix_yubin01 on 郵便番号住所t (郵便番号); create index ix_yubin02 on 郵便番号住所t (都道府県名); *********************** ■レプリケーション情報の登録  slonikコマンドを利用してレプリケーション情報の指示をします.これを1箇所のslonikモジュールから, マスター・スレーブ 情報として指示・登録することができます. <<注意>>:このときに日本語が含まれるため,Windowsユーザの場合にはエンコーディングの設定を行ってください. set PGCLIENTENCODING=SJIS  下記のようにテキストでスクリプトを作成します. *********************** CLUSTER NAME = slony_win32; NODE 1 ADMIN CONNINFO = 'dbname=pris host=localhost user=postgres'; NODE 2 ADMIN CONNINFO = 'dbname=refl host=localhost user=postgres'; INIT CLUSTER ( ID=1, COMMENT = 'Master Database' ); CREATE SET ( ID=1, ORIGIN=1, COMMENT='YUSEI Replication' ); SET ADD TABLE (SET ID=1, ORIGIN=1, ID=1, FULLY QUALIFIED NAME='public.郵便番号住所t', COMMENT='郵便番号住所t'); SET ADD SEQUENCE (SET ID=1, ORIGIN=1, ID=2, FULLY QUALIFIED NAME='public.郵便番号住所t_連番_seq', COMMENT='SEQUENCE 郵便番号住所t_連番_seq'); STORE NODE ( ID=2, COMMENT = 'Slave Database'); STORE PATH ( SERVER=1, CLIENT=2, CONNINFO = 'dbname=pris host=localhost user=postgres'); STORE PATH ( SERVER=2, CLIENT=1, CONNINFO = 'dbname=refl host=localhost user=postgres'); STORE LISTEN ( ORIGIN=1, PROVIDER=1, RECEIVER=2 ); STORE LISTEN ( ORIGIN=2, PROVIDER=2, RECEIVER=1 ); ***********************  これを, slonik Slonik_script.txt として起動します.このとき,実行時PATHに注意してください.  Slon用の名前空間(スキーマ)が定義され,レプリケーションに必要なテーブルや関数が登録されます. ---------------------------------------------------------------------- 【監視デーモンの起動】  Slon 起動によりデーモン監視タスクを立ち上げます.これは,マスター・スレーブそれぞれ必要になります. Windowsユーザの場合,下記のようにタイムゾーンを設定します. set TZ=JST-9  下記のようにテキストでスクリプトを作成します. *********************** slon slony_win32 "dbname=pris host=localhost user=postgres" slon slony_win32 "dbname=refl host=localhost user=postgres" ***********************  Windowsユーザは下記のようにサービスとして登録することができます. 今回は,コマンドで直接起動で示しています. *********************** slon -regservice slon -addengine C:/Slon_pris.conf slon -addengine C:/Slon_refl.conf slon -listengines *********************** ---------------------------------------------------------------------- 【購読の予約】  Slonikコマンドを使用し,購読の予約の登録によって,レプリケーションが開始されます. 下記のようにテキストでスクリプトを作成します. *********************** CLUSTER NAME = slony_win32; NODE 1 ADMIN CONNINFO = 'dbname=pris host=localhost user=postgres'; NODE 2 ADMIN CONNINFO = 'dbname=refl host=localhost user=postgres'; SUBSCRIBE SET ( ID=1, PROVIDER=1, RECEIVER=2, FORWARD=NO ); ***********************  これを, slonik Slonik_subscribe.txt として起動します.このとき,実行時PATHに注意してください. ---------------------------------------------------------------------- 【データのレプリケーションの確認】  psqlでMasterに接続します. *********************** postgres=# \c pris データベース 'pris' に接続しました. pris=# \copy 郵便番号住所t(全国地方公共団体コード,旧郵便番号,郵便番号,都道府県カナ,市区町村カナ,町域カナ,都道府県名,市区町村名,町域名,町域二,小字番地,丁目有,郵便番号二,更新表示,変更理由) from 'D:/CON2006/KEN_ALL.CSV' csv *********************** ※このデータは日本郵政公社の http://www.post.japanpost.jp/zipcode/dl/oogaki.html から取得できます.  このとき,copyコマンドで行っていますので,データは1つのトランザクションとなっています. 非同期でレプリケーションされるためデータがスレーブ側に現れるまでのタイムラグを実感できます. ---------------------------------------------------------------------- Copyright(C) 2005 Hiroshi Saito