我目前正在Postgres中重新构建一些Server存储过程,但我挂起了以下命令
CREATE OR REPLACE PROCEDURE public.math_proc ()
LANGUAGE plpgsql
AS $
BEGIN
CREATE TEMP TABLE log_table(event TEXT) ON COMMIT DROP;
INSERT INTO log_table VALUES ('Doing some addition');
SELECT 1 + 0;
INSERT INTO log_table VALUES ('Doing some multiplication');
SELECT 1 * 0;
INSERT INTO log_table VALUES ('Doing some division');
SELECT 1 / 0;
INSERT INTO log_table VALUES ('Done doing math!');
SELECT json_agg(log_table);
EXCEPTION
WHEN OTHERS THEN
SELECT json_agg(log_table);
ROLLBACK;
END;
$;
CALL public.math_proc ();当上述过程中发生错误时,事务回滚将在输入异常块之前进行。这意味着删除了log_table,删除了记录语句的任何证据。
在Server中,相应的代码将允许我在回滚错误状态之前查看log_table的内容。
我如何保存这些信息?Postgres没有自主事务,我有点不习惯使用第三方扩展(如pg_背景 )来获得这个功能。登录到文本文件或使用复制是困难和缓慢的。使用DB_Link也很慢,还带来了大量的开销。这里有其他选择吗?
发布于 2022-12-30 14:39:31
Postgresql (目前)不支持子事务(或者Oracle语言中的自主事务(不知道MS叫它什么)),所以使用pg_background或dblink之类的东西似乎是当前最好的选择。
不管它有什么价值,我最近都需要自己解决这个问题,所以我想出了https://github.com/gsiems/pg-util_日志 (它可以使用pg_background或dblink)。
https://dba.stackexchange.com/questions/321546
复制相似问题