我试图创建表,但它没用,因为每个开始端块都包含在postgres中的事务中,所以在事务结束之前我看不到任何更改。 唯一的解决方案是上升INFO,我用它来显示当前的程序步骤,但它不完全是我正在寻找的。我需要知道当前计算的详细数据,因为每个步骤可能需要几个小时。 请建议我在交易结束之前传输数据的方式。
UPD:我找到了传输进度的方法:我可以从我的程序中增加序列,并从其他连接中读取它们。 http://blog.endpoint.com/2010/04/viewing-postgres-function-progress-from.html
答案 0 :(得分:2)
您可以使用dblink扩展连接回数据库并在不同的连接上执行语句。例如,这通常用于在事务回滚之前记录错误。
快速演示:
CREATE EXTENSION dblink; -- or run the script from contrib before version 9.1
select * from dblink('dbname=steve', $$
select datname, procpid, current_query from pg_stat_activity
$$) r(datname name, pid int, current_query text);
产生
datname | pid | current_query
---------+------+---------------------------------------------------------------------
steve | 8535 | select * from dblink('dbname=steve', $$ +
| | select datname, procpid, current_query from pg_stat_activity+
| | $$) r(datname name, +
| | pid int, current_query text);
steve | 9235 | +
| | select datname, procpid, current_query from pg_stat_activity+
| |
所以你可以看到这是两个单独的会话。 dblink提供了打开持久连接等功能,这个简单的用法会跳过。如果您已经有一个架构将进度信息放入其中,那么您可以通过第二个连接调用dblink()来填充/更新它,同时第一个连接继续执行其长事务。