Portál AbcLinuxu, 2. listopadu 2025 02:13
Tady je malá ukázka:
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ý
A teď mě omluvte. Mám cosi neodkladného…
Kdo to říkal? Já to říkal! Depka! 
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.