我有一个长时间运行的函数,应该插入新行。如何查看该功能的进度?
我认为脏读会起作用,所以我读了 http://www.postgresql.org/docs/8.4/interactive/sql-set-transaction.html并提出以下代码并在新 session 中运行它:
SET SESSION CHARACTERISTICS AS SERIALIZABLE;
SELECT * FROM MyTable;
Postgres 给我一个语法错误。我究竟做错了什么?如果我做对了,我会在那个长函数仍在运行时看到插入的记录吗?
谢谢。
最佳答案
PostgreSQL 没有实现一种方法让您从函数外部看到它,也就是 READ UNCOMMITTED
隔离级别。您的两个基本选项是:
- 使用函数
RAISE NOTICE
时不时地向您展示您的进度 - 使用类似 dblink 的函数从函数返回同一个数据库,并从那里更新计数器表。由于这是一个完全独立的事务,一旦该事务提交,计数器就会可见 - 您不必等待主事务(围绕函数调用)完成。
关于database - Postgres 中的脏读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1165438/