[pgsql-jp: 35204] pgpoolとLargeObject

Tsunehisa Kazawa kazawa @ ca2.so-net.ne.jp
2005年 4月 7日 (木) 22:53:00 JST


こんばんは。加澤と申します。

レプリケーション設定の pgpool 2.5.2 を経由して LargeObject を扱うような
プログラムはそもそも作成出来ないのでしょうか。

というのも、こちらでそのような環境のテストしてみたところ、特に平行して
LargeObject を作成しているような時に、

・pgpool のログ
2005-04-07 19:59:10 ERROR: pid 26599: pool_process_query: kind does not
match between backends master(V) secondary(E)
2005-04-07 19:59:10 LOG:   pid 26599: notice_backend_error: master: 1
fail over request from pid 26599
2005-04-07 19:59:10 LOG:   pid 26576: starting degeneration. shutdown
master host master_db_host(5432)
2005-04-07 19:59:10 LOG:   pid 26576: degeneration done. shutdown master
host master_db_host(5432)

・PostgreSQL のログ
Apr  7 19:59:10 master_db_host postgres[7764]: [1-1] ERROR:  large
object 1338930 does not exist

というようなエラーが起きて縮退してしまうのです (上記エラー発生時の
pgpool の設定については末尾に)。

pgpool のページにある、

「7.レプリケーションについて

同じ問い合わせを送っても異なる結果を返すようなデータ,たとえば乱数やトラ
ンザクションID,OID,SERIAL,シーケンス,CURRENT_TIMETSTAMPのようなもの
に関する問い合わせをレプリケーションすることはできません(正確には,同じ
値でレプリケーションされる保証がありません). SERIALやシーケンスに関して
は,関連テーブルをロックすることによって回避することもできます.」

ということは、LargeObject を扱う際に必須な oid がレプリケーション出来な
いからそもそも LargeObject は扱えない、という結論となるのでしょうか。

何とかレプリケーション環境で LargeObject を利用することは出来ないので
しょうか?

// 上記エラーもそれほどの頻度で発生するわけではなくて、特に平行して処理
// しない限りにおいてはかなり安定して動作しているようにも見えます。なの
// で儚い希望を抱いてしまいます…。

***

テスト時の pgpool の設定は下記の通りです。なお、アプリケーションは JDBC
経由の Java アプリケーションで、LargeObjectManager で create し oid を得
た後、その oid を open する際にエラーが生じています。

    int oid = lom.create(LargeObjectManager.READ
            | LargeObjectManager.WRITE);
    LargeObject lo = lom.open(oid, LargeObjectManager.WRITE);
                         ↑ここでエラー発生

・/etc/pgpool.conf
listen_addresses = '*'
port = 5432
socket_dir = '/tmp'
backend_host_name = 'master_db_host'
backend_port = 5432
backend_socket_dir = '/tmp'
secondary_backend_host_name = 'master_db_host'
secondary_backend_port = 5433
num_init_children = 32
max_pool = 4
child_life_time = 300
connection_life_time = 0
logdir = '/var/run'
replication_mode = true
replication_strict = true
replication_timeout = 5000
load_balance_mode = true
weight_master = 0.5
weight_secondary = 0.5
replication_stop_on_mismatch = true
reset_query_list = 'ABORT; RESET ALL; SET SESSION AUTHORIZATION DEFAULT'
print_timestamp = true
master_slave_mode = false
connection_cache = true
health_check_timeout = 20
health_check_period = 30
health_check_user = 'postgres'

-- 
  ◇   加澤恒央 Tsunehisa KAZAWA
◇  ◇ mailto:kazawa @ ca2.so-net.ne.jphttp://www.digitune.org/



pgsql-jp メーリングリストの案内