Portál AbcLinuxu, 12. května 2025 19:10
CREATE FUNCTION _log_message( l_group product.logs.log_group%TYPE, l_severity product.logs.log_severity%TYPE, l_user_id product.logs.log_user_id%TYPE, l_action product.logs.log_action%TYPE, l_description product.logs.log_description%TYPE, l_args product.logs.log_args%TYPE ) RETURNS product.logs.log_id%TYPE AS $_$ DECLARE new_log_id product.logs.log_id%TYPE; BEGIN INSERT INTO product.logs (log_id, log_group, log_time, log_severity, log_user_id, log_action, log_description, log_args) VALUES (NEXTVAL('product.sq_log_id'), l_group, NOW(), l_severity, l_user_id, l_action, l_description, l_args) RETURNING log_id INTO new_log_id; RETURN new_log_id; END; $_$ LANGUAGE 'plpgsql'; CREATE FUNCTION log_message( l_group product.logs.log_group%TYPE, l_severity product.logs.log_severity%TYPE, l_user_id product.logs.log_user_id%TYPE, l_action product.logs.log_action%TYPE, l_description product.logs.log_description%TYPE, l_args product.logs.log_args%TYPE ) RETURNS product.logs.log_id%TYPE AS $_$ DECLARE new_log_id product.logs.log_id%TYPE; BEGIN SELECT log_id INTO new_log_id FROM product.dblink( 'dbname=product user=logger', 'SELECT product._log_message(' || l_group || ', ' || product.quote_string(l_severity) || ', ' || l_user_id || ', ' || product.quote_string(l_action) || ', ' || product.quote_string(l_description) || ', ' || product.chararray_to_string(l_args) || ');' ) AS t1(log_id BIGINT); RETURN new_log_id; END; $_$ LANGUAGE 'plpgsql';Jedná se o logování v "autonomní" transakci. Prostě veškerá logika používá funkci
log_message()
a ta přes dblink volá proceduru _log_message()
ve stejném schématu, ale v nezávislé transakci.
To jenom abych nevypadal jako chytrej vožrala, kterej dává dblink, když je na mol. Celý schéma je samozřejmě složitější. Tohle je jen ukázka; nechtělo se mi to obfuskovat celý Kdo to říkal? Já to říkal! Depka!
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.