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

时间:2018-03-12 13:18:23

标签: sql postgresql postgresql-9.1

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

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;
$$

1 个答案:

答案 0 :(得分:0)

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

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

END;

执行函数或代码块时,始终已经使用BEGIN或自动创建事务。异常块的BEGIN在事务中充当SAVEPOINT。当错误被EXCEPTION部分捕获时,只有BEGIN丢失后才能回滚到保存点。

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

有关详细信息,请参阅manual

顺便说一句。没有维护postgresql 9.1你应该考虑升级。