[pgpool-general-jp: 100] Re: pgpool-II パラレルクエリモードでのトランザクション

asano asano @ engm.com
2007年 3月 2日 (金) 21:36:32 JST


お世話になっております。エニグマ 浅野です。


盛 様

ご回答ありがとうございます。
そうですか、この場合は動作可能と見られる場合なのですか。

先にお詫びいたしますが、
最初にメールに表記したコードは、大本のプログラムコードを公開するに当たって
私の方で手直したものなので、実際のコードとは異なっていました。
なので、あらためて実際のコードを表記します。
混乱の元になってしまったかもしれませんが・・・申し訳ありません。

それでは元のコードとpgpool_catalog.dist_defの内容を記しますので、
一度見ていただきたいと思います。

■[accesslog.php]
<?php
pg_query($Resource_ID,"begin;");
pg_query($Resource_ID,"lock table user_data in share row exclusive mode");
$sql = "select max(c_access_log_id) from c_access_log";
$res_sql = pg_query($Resource_ID,"$sql");

$result_array = pg_fetch_array($res_sql);
$max = $result_array['max'];
$max += 1;

$sql = "insert into
c_access_log(c_access_log_id,c_acccess_ip,page_name,r_datetime)values('$max','$c_acccess_ip','$page_name','$r_datetime')";
$res_sql = pg_query($Resource_ID,"$sql");

if(!$res_sql || pg_affected_rows($res_sql) !=1){
 exit;
}
pg_query($Resource_ID,"commit;");

?>


■[pgpool_catalog.dist_def] (※見づらいですが、エディタ等にコピーして頂きたいかと・・・)

 dbname | schema_name |    table_name    |      col_name       |
col_list
|
type_list
|                dist_def_func
--------+-------------+------------------+---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------
 pgpool | public      | c_access_log     | c_access_log_id     |
{c_access_log_id,c_member_id,c_acccess_ip,page_name,target_c_member_id,target_c_commu_id,target_c_commu_topic_id,target_c_diary_id,target_c_recipe_id,target_c_project_id,ktai_flag,r_datetime}
| {integer,integer,"character varying(50)","character
varying(100)",integer,integer,integer,integer,integer,integer,integer,"timestamp
without time zone"} | pgpool_catalog.dist_def_c_access_log


さらに登録時のSQLも追記いたします。
■pgpool_catalog.dist_defに登録

insert into pgpool_catalog.dist_def values(
'pgpool',
'public',
'c_access_log',
'c_access_log_id',
ARRAY['c_access_log_id','c_member_id','c_acccess_ip','page_name','target_c_member_id','target_c_commu_id','target_c_commu_topic_id','target_c_diary_id','target_c_recipe_id','target_c_project_id','ktai_flag','r_datetime'],
ARRAY['integer','integer','character varying(50)','character
varying(100)','integer','integer','integer','integer','integer','integer','integer','timestamp
without time zone'],
'pgpool_catalog.dist_def_c_access_log')

■分割ルールファンクション登録
(※まだ動作テスト状態なので値が少ないです。)

CREATE OR REPLACE FUNCTION pgpool_catalog.dist_def_c_access_log(val
ANYELEMENT) RETURNS INTEGER AS '
SELECT CASE WHEN $1 < 100 THEN 0
WHEN $1 >= 100 and $1 < 200 THEN 1
ELSE 2
END' LANGUAGE SQL;


お手数をおかけしますが、
確認のほどよろしくお願い申し上げます。

------------------
エニグマ   浅野

http://www.engm.com
asano @ engm.com




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