繁体   English   中英

如何在事务之间的PostgreSQL中保存表进度?

[英]How to save table progress in postgresql between transaction?

表正在循环更新,但是如果错误出现在表之一中,则表示事务失败,并且所有更新的表数据都消失了,因此为我提供了一种解决方案,其中每次更新任何表时都可以保存其进度。

d0
$$
declare g record;
declare tablename varchar(50);
BEGIN
--fetching tablename from catalog.table
for g in execute formate ('select table_name from catalog.table');
loop
tablename= lower(g.tablename);
--passing tablename to function for some execution
execute'select function('''||tablename||''')';
end loop;

end;
$$

如果捕获错误,则事务不会失败。

BEGIN
    execute your query
EXCEPTION WHEN unique_violation OR foreign_key_violation OR ... THEN

END;

当执行一个功能或代码块时,总是已经有一个使用BEGIN显式创建或自动创建的事务。 异常块的BEGIN在事务中充当SAVEPOINT。 当错误被EXCEPTION部分捕获时,仅丢失BEGIN之后的工作,因为它回滚到保存点。

当您让错误从函数中逸出时,将完成整个事务的回滚。

有关详细信息,请参见手册

顺便说一句。 不维护PostgreSQL 9.1,您应该考虑升级。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM