関数特性
言語: PLPGSQL
戻り値: integer
ddlScript_int(set_id, script, only_on_node) DDL_SCRIPT 事象の実行。スレーブノードで元のトリガー/ルールをリストアし、スクリプトを実行、そしてテーブルを複製された状態に戻します。declare p_set_id alias for $1; p_script alias for $2; p_only_on_node alias for $3; v_set_origin int4; v_no_id int4; v_row record; begin -- ---- -- 中枢構成にロックの取得 -- ---- lock table sl_config_lock; -- ---- -- 私たちはセットオリジンノードか、もしくは -- セットの現在の購読ノードかの検査 -- ---- v_no_id := getLocalNodeId('_schemadoc'); select set_origin into v_set_origin from sl_set where set_id = p_set_id for update; if not found then raise exception 'Slony-I: set % not found', p_set_id; end if; if v_set_origin <> v_no_id and not exists (select 1 from sl_subscribe where sub_set = p_set_id and sub_receiver = v_no_id) then return 0; end if; -- ---- -- もしたった 1 つのノードで実行が要求されれば -- 私たちはそのノードかどうかを検査 -- ---- if p_only_on_node > 0 and p_only_on_node <> v_no_id then return 0; end if; -- ---- -- 全ての元のトリガーとルールをリストア -- ---- for v_row in select * from sl_table where tab_set = p_set_id loop perform alterTableRestore(v_row.tab_id); end loop; -- ---- -- スクリプトの実行 -- ---- execute p_script; -- ---- -- 全てのテーブルを複製された状態に戻す -- ---- for v_row in select * from sl_table where tab_set = p_set_id loop perform alterTableForReplication(v_row.tab_id); end loop; return p_set_id; end;