1.53. enablesubscription_int( integer, integer, integer )

関数特性

言語: PLPGSQL

戻り値: integer

enableSubscription_int (sub_set, sub_provider, sub_receiver) node sub_provider によりセット sub_set に対しノード sub_receiver を購読できるようにする内部関数。 slon はこの作業の殆どを行います。このようなことが起こると言うことを覚えておく必要があります。、関数は購読動作が有効になった事を示唆する sl_subscribe を更新します。

declare
	p_sub_set		alias for $1;
	p_sub_provider		alias for $2;
	p_sub_receiver		alias for $3;
	v_n			int4;
begin
	-- ----
	-- 中枢構成にロックの取得
	-- ----
	lock table sl_config_lock;

	-- ----
	-- 実際の仕事は複製エンジン内で行われます。
	-- 私たちの役目はこういう事が起こる事を覚えておく事です。
	-- ----

	-- ----
	-- それだけでは無い? … 何か重要な事象を忘れているかもしれません。
	-- ----
	if not exists (select true from sl_path
			where pa_server = p_sub_provider
			and pa_client = p_sub_receiver)
	then
		insert into sl_path
				(pa_server, pa_client, pa_conninfo, pa_connretry)
				values 
				(p_sub_provider, p_sub_receiver, 
				'<event pending>', 10);
	end if;

	update sl_subscribe
			set sub_active = 't'
			where sub_set = p_sub_set
			and sub_receiver = p_sub_receiver;
	get diagnostics v_n = row_count;
	if v_n = 0 then
		insert into sl_subscribe
				(sub_set, sub_provider, sub_receiver,
				sub_forward, sub_active)
				values
				(p_sub_set, p_sub_provider, p_sub_receiver,
				false, true);
	end if;

	-- Rewrite sl_listen table
	perform RebuildListenEntries();

	return p_sub_set;
end;