首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Postgres事务中登录错误状态

问在Postgres事务中登录错误状态
EN

Database Administration用户
提问于 2022-12-29 21:34:25
回答 1查看 185关注 0票数 0

我目前正在Postgres中重新构建一些Server存储过程,但我挂起了以下命令

代码语言:javascript
复制
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也很慢,还带来了大量的开销。这里有其他选择吗?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2022-12-30 14:39:31

Postgresql (目前)不支持子事务(或者Oracle语言中的自主事务(不知道MS叫它什么)),所以使用pg_background或dblink之类的东西似乎是当前最好的选择。

不管它有什么价值,我最近都需要自己解决这个问题,所以我想出了https://github.com/gsiems/pg-util_日志 (它可以使用pg_background或dblink)。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/321546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档