some_procedure1 (user_id, param1, ..., paramN); ... some_procedureX (user_id, param1, ..., paramN);
set_user (id); some_procedure1 (param1, ..., paramN); .... some_procedureX (param1, ..., paramN);
CREATE TEMPORARY TABLE command for each temporary table to be used.
CREATE OR REPLACE FUNCTION set_var (p_var_name varchar, p_var_value varchar) RETURNS void AS $$ DECLARE v_cnt integer; BEGIN SELECT Count (pc.relname) into v_cnt FROM pg_catalog.pg_class pc, pg_namespace pn WHERE pc.relname = 'session_var_tbl' AND pc.relnamespace = pn.oid AND pn.oid = pg_my_temp_schema (); IF v_cnt = 0 THEN EXECUTE 'CREATE GLOBAL TEMPORARY TABLE session_var_tbl (var_name varchar (100) not null, var_value varchar (100)) <br /> ON COMMIT preserve ROWS '; END IF; UPDATE session_var_tbl SET var_value = p_var_value WHERE var_name = p_var_name; IF NOT FOUND THEN INSERT INTO session_var_tbl (var_name, var_value) VALUES (p_var_name, p_var_value); END IF; END; $$ LANGUAGE 'plpgsql';
CREATE OR REPLACE FUNCTION get_var (p_var_name varchar) RETURNS varchar AS $$ DECLARE v_cnt integer; v_result varchar (100); BEGIN SELECT Count (pc.relname) INTO v_cnt FROM pg_catalog.pg_class pc, pg_namespace pn WHERE pc.relname = 'session_var_tbl' AND pc.relnamespace = pn.oid AND pn.oid = pg_my_temp_schema (); IF v_cnt = 0 THEN v_result: = null; ELSE SELECT var_value INTO v_result FROM session_var_tbl WHERE var_name = p_var_name; IF NOT FOUND THEN v_result: = null; END IF; END IF; RETURN v_result; END; $$ LANGUAGE 'plpgsql';
CREATE OR REPLACE FUNCTION set_var (name text, val text) RETURNS text AS $$ if ($ _SHARED {$ _ [0]} = $ _ [1]) { return 'ok'; } else { return "cannot set shared variable $ _ [0] to $ _ [1]"; } $$ LANGUAGE plperl;
CREATE OR REPLACE FUNCTION get_var (name text) RETURNS text AS $$ return $ _SHARED {$ _ [0]}; $$ LANGUAGE plperl;
custom_variable_classes = 'usrvar'
CREATE OR REPLACE FUNCTION set_var (p_var_name varchar, p_var_value varchar) RETURNS void AS $ body $ BEGIN PERFORM set_config ('usrvar.' || p_var_name, p_var_value, false); END; $ body $ LANGUAGE 'plpgsql';
CREATE OR REPLACE FUNCTION get_var (p_var_name varchar) RETURNS varchar AS $ body $ DECLARE v_var_value varchar; BEGIN SELECT INTO v_var_value current_setting ('usrvar.' || p_var_name); RETURN v_var_value; EXCEPTION WHEN syntax_error_or_access_rule_violation THEN v_var_value: = null; RETURN v_var_value; END; $ body $ LANGUAGE 'plpgsql';
Source: https://habr.com/ru/post/44015/
All Articles