関数特性
言語: PLPGSQL
戻り値: integer
updateReloid(set_id, only_on_node) それぞれの完全修飾名(FQN)に基づいた sl_table と sl_seqeunce におけるそれぞれのテーブル識別子(reloid)を更新します。declare
p_set_id alias for $1;
p_only_on_node alias for $2;
v_no_id int4;
v_set_origin int4;
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;
update sl_table set
tab_reloid = PGC.oid
from pg_catalog.pg_class PGC, pg_catalog.pg_namespace PGN
where slon_quote_brute(sl_table.tab_relname) = slon_quote_brute(PGC.relname)
and PGC.relnamespace = PGN.oid
and slon_quote_brute(PGN.nspname) = slon_quote_brute(sl_table.tab_nspname);
update sl_sequence set
seq_reloid = PGC.oid
from pg_catalog.pg_class PGC, pg_catalog.pg_namespace PGN
where slon_quote_brute(sl_sequence.seq_relname) = slon_quote_brute(PGC.relname)
and PGC.relnamespace = PGN.oid
and slon_quote_brute(PGN.nspname) = slon_quote_brute(sl_sequence.seq_nspname);
return createEvent('_schemadoc', 'RESET_CONFIG',
p_set_id, p_only_on_node);
end;