関数特性
言語: PLPGSQL
戻り値: integer
setDropSequence_int (seq_id) SET_DROP_SEQUENCE 事象を処理します。シーケンス seq_id を所有しているセットを購読する遠隔ノードは、複製セットからシーケンスを削除します。declare
p_seq_id alias for $1;
v_set_id int4;
v_local_node_id int4;
v_set_origin int4;
v_sub_provider int4;
v_relkind char;
v_sync_row record;
begin
-- ----
-- 中枢構成にロックを取得
-- ----
lock table sl_config_lock;
-- ----
-- このシーケンスのセット識別子を決定
-- ----
select seq_set into v_set_id from sl_sequence where seq_id = p_seq_id;
-- ----
-- シーケンスの存在の確証
-- ----
if not found then
return 0;
end if;
-- ----
-- 遠隔オリジンのセットに対して、そのセットに私たちが購読されて
-- いるかの検査。さもなければ、私たちのデータベースには全く
-- 存在しないであろうからそのシーケンスを無視します。
-- ----
v_local_node_id := getLocalNodeId('_schemadoc');
select set_origin into v_set_origin
from sl_set
where set_id = v_set_id;
if not found then
raise exception 'Slony-I: setDropSequence_int(): set % not found',
v_set_id;
end if;
if v_set_origin != v_local_node_id then
select sub_provider into v_sub_provider
from sl_subscribe
where sub_set = v_set_id
and sub_receiver = getLocalNodeId('_schemadoc');
if not found then
return 0;
end if;
end if;
-- ----
-- sl_sequence、sl_seqlog からシーケンスを削除
-- ----
delete from sl_seqlog where seql_seqid = p_seq_id;
delete from sl_sequence where seq_id = p_seq_id;
return p_seq_id;
end;