log_truncate()

8.74. log_truncate()

Function Properties

Language: PLPGSQL

Return Type: trigger

trigger function run when a replicated table receives a TRUNCATE request

	declare
		r_role text;
		c_nspname text;
		c_relname text;
		c_log integer;
		c_node integer;
		c_tabid integer;
	begin
		-- Ignore this call if session_replication_role = 'local'
		select into r_role setting
			from pg_catalog.pg_settings where name = 'session_replication_role';
		if r_role = 'local' then
			return NULL;
		end if;

        c_tabid := tg_argv[0];
	    c_node := getLocalNodeId('_schemadoc');
		select tab_nspname, tab_relname into c_nspname, c_relname
				  from sl_table where tab_id = c_tabid;
		select last_value into c_log from sl_log_status;
		if c_log in (0, 2) then
			insert into sl_log_1 (
					log_origin, log_txid, log_tableid, 
					log_actionseq, log_tablenspname, 
					log_tablerelname, log_cmdtype, 
					log_cmdupdncols, log_cmdargs
				) values (
					c_node, pg_catalog.txid_current(), c_tabid,
					nextval('sl_action_seq'), c_nspname,
					c_relname, 'T', 0, '{}'::text[]);
		else   -- (1, 3) 
			insert into sl_log_2 (
					log_origin, log_txid, log_tableid, 
					log_actionseq, log_tablenspname, 
					log_tablerelname, log_cmdtype, 
					log_cmdupdncols, log_cmdargs
				) values (
					c_node, pg_catalog.txid_current(), c_tabid,
					nextval('sl_action_seq'), c_nspname,
					c_relname, 'T', 0, '{}'::text[]);
		end if;
		return NULL;
    end