【问题标题】:How to determine total number of rows affected in a transaction prior to commit in postgresql?如何在 postgresql 中提交之前确定事务中受影响的总行数?
【发布时间】:2019-01-30 06:26:50
【问题描述】:

我有一个用例,我将在其中执行用户给我的任意大小的未知 SQL/pglpsql 查询组。我正在编写一个 Python 脚本,它将在一个事务中执行这些查询。现在,在事务中,在提交之前,我希望能够看到有多少行被累积触摸,这样如果该数字超过一个固定的常数阈值,我可以回滚事务。我正在使用 PostreSQL 数据库。有没有办法做到这一点?

【问题讨论】:

    标签: database postgresql transactions


    【解决方案1】:

    下面的函数可能会有所帮助:-

        create or replace function get_rows_affected() returns void as $$ declare
            v_count number; 
            begin
            v_count := 0;
    
                update table_name set col_name = '504';
                GET DIAGNOSTICS v_count = ROW_COUNT;
    
                if v_count > 2 then
                   RAISE EXCEPTION 'more than one row affected --> %', v_count; 
    
                end if;
         end; 
         $$ language plpgsql;
    

    【讨论】:

    • @ion20 - 您能否提供反馈,如果它对您有用吗?
    • 在我的用例中,我将收到各种不同格式的 SQL 语句,包括要运行的 plpgsql 函数。我可以将所有这些封装在您的函数中吗?例如。什么不是update table_name set col_name = '504'; 我有update... DO $zzz$ .... $zzz$ LANGUAGE plpgsql; 这仍然有效吗?甚至允许这样的封装吗?
    • 因此,如果发现任何 sql 语句超过了更新限制,您是希望回滚之前的所有事务还是回滚该特定事务?您想为所有交易设置相同的限制吗?请详细描述您的问题
    • 更新了正文。现在更有意义了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    相关资源
    最近更新 更多