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