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
-- ----
-- Grab the central configuration lock
-- ----
lock table sl_config_lock;
-- ----
-- Determine set id for this sequence
-- ----
select seq_set into v_set_id from sl_sequence where seq_id = p_seq_id;
-- ----
-- Ensure sequence exists
-- ----
if not found then
return 0;
end if;
-- ----
-- For sets with a remote origin, check that we are subscribed
-- to that set. Otherwise we ignore the sequence because it might
-- not even exist in our database.
-- ----
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;
-- ----
-- drop the sequence from 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; |