[pgcluster: 398] ビューのレプリケートについて
宮澤 誠
miyazawa1017 @ yahoo.co.jp
2004年 7月 7日 (水) 16:52:22 JST
いつもお世話になっております。
現在、Solaris8(OS5.8)1台でPGClusterの検証を行っておりま
す、宮澤と申します。
以前にご相談させていただきましたView テーブル内でシーケンスを取得することが
最新版1.0.7av6 だとうまく動作したしません。
以下に詳細を書きます。
【環境】
実機環境:Solaris8(sparc、OS5.8) 1台
サーバ構成:
バージョン:1.0.7av6
レプリケーションサーバ+
クラスタDB1(マスタ:ポート5432、以下CL1)+
クラスタDB2(スレーブ:ポート5431、以下CL2)
ロードバランサは未インストール
【テーブル】
create sequence test1
minvalue 1
maxvalue 9223372036854775807
start 1
;
create sequence test2
minvalue 1
maxvalue 9223372036854775807
start 1
;
create sequence test3
minvalue 1
maxvalue 9223372036854775807
start 1
;
create table s_test(
id varchar(1024),
constraint p_key_test primary key(id)
)
;
create view test_seqview
as select id,
nextval(id) as currentvalue
from s_test
;
insert into s_test (id) values('test1');
insert into s_test (id) values('test2');
insert into s_test (id) values('test3');
【設定ファイル】
(1)$PGHOME/pgreplicate.conf(抜粋)
<Cluster_Server_Info>
<Host_Name> adtest.test.co.jp </Host_Name>
<Port> 5432 </Port>
<Recovery_Port> 7779 </Recovery_Port>
</Cluster_Server_Info>
<Cluster_Server_Info>
<Host_Name> dtest.test.co.jp </Host_Name>
<Port> 5431 </Port>
<Recovery_Port> 7779 </Recovery_Port>
</Cluster_Server_Info>
<Replication_Port> 8777 </Replication_Port>
<Recovery_Port> 7778 </Recovery_Port>
<Response_Mode> normal </Response_Mode>
(2)cluster.conf(抜粋、マスタ、スレーブは同じ)
<Replicate_Server_Info>
<Host_Name> adtest.test.co.jp </Host_Name>
<Port> 8777 </Port>
<Recovery_Port> 7778 </Recovery_Port>
</Replicate_Server_Info>
<Recovery_Port> 7779 </Recovery_Port>
<Rsync_Path> /usr/local/bin/rsync </Rsync_Path>
<Rsync_Option> ssh -1 </Rsync_Option>
<When_Stand_Alone> read_write </When_Stand_Alone>
<Not_Replicate_Info>
<DB_Name> test_db </DB_Name>
<Table_Name> log_table </Table_Name>
</Not_Replicate_Info>
【各サーバの起動方法】
(1) RPの起動方法は以下の通り。
pgreplicate -D $PGHOME/etc -l
(2) CL1の起動方法は以下の通り。
pg_ctl start -l /tmp/mpgsql.log -D /masterdb -o "-i -d 5 -p 5432"
(3) CL2の起動方法は以下の通り。
pg_ctl start -l /tmp/spgsql.log -D /slavedb -o "-i -d 5 -p 5431"
【行ったこと】
(1) setval,nextvalのレプリケーションの確認
(2) ビューからselectでシーケンスを取得し、それがレプリケーションされること。
【詳細】
CL1から以下のSQLを発行し、CL2にレプリケートされていることを確認
select setval('test1',1);
select setval('test2',1);
select setval('test3',1);
select nextval('test1');
select nextval('test2');
select nextval('test3');
CL1で以下SQLを発行した
select currentvalue from test_seqview where id = 'test1'
次にCL2で以下SQLを発行した
select currentvalue from test_seqview where id = 'test1'
しかし、CL1での結果のnextval値でレプリケーションされていない。
RPのログにもクエリーが表示されない。
どうも、レプリケートするためのクエリーを発行していないように見えます。
ちなみに select currval('test1') を発行すると
ERROR: test3.currval is not yet defined in this session
が表示されます(これは、本件とは関係さなそうですが情報として)
以上、よろしくお願いします。
__________________________________________________
Do You Yahoo!?
http://bb.yahoo.co.jp/
pgcluster メーリングリストの案内