関数特性
言語: PLPGSQL
戻り値: integer
no_id - ノード識別子番号 ノード no_id に対し ENABLE_NODE 事象を処理する内部関数declare p_no_id alias for $1; v_local_node_id int4; v_node_row record; v_sub_row record; begin -- ---- -- 中枢構成にロックを取得 -- ---- lock table sl_config_lock; -- ---- -- ノードが活動していない事の検査 -- ---- select * into v_node_row from sl_node where no_id = p_no_id for update; if not found then raise exception 'Slony-I: node % not found', p_no_id; end if; if v_node_row.no_active then return p_no_id; end if; -- ---- -- ノードを活性化し、それ用に sl_confirm ステータス行を生成 -- ---- update sl_node set no_active = 't' where no_id = p_no_id; insert into sl_confirm (con_origin, con_received, con_seqno) select no_id, p_no_id, 0 from sl_node where no_id != p_no_id and no_active; insert into sl_confirm (con_origin, con_received, con_seqno) select p_no_id, no_id, 0 from sl_node where no_id != p_no_id and no_active; -- ---- -- ここに発生し、そしてちょうど今動作したノードで購読された -- 全てのセットに対し ENABLE_SUBSCRIPTION 事象を生成 -- ---- v_local_node_id := getLocalNodeId('_schemadoc'); for v_sub_row in select SUB.sub_set, SUB.sub_provider from sl_set S, sl_subscribe SUB where S.set_origin = v_local_node_id and S.set_id = SUB.sub_set and SUB.sub_receiver = p_no_id for update of S loop perform enableSubscription (v_sub_row.sub_set, v_sub_row.sub_provider, p_no_id); end loop; return p_no_id; end;