6

I have a long running function that should be inserting new rows. How do I check the progress of this function?

I was thinking dirty reads would work so I read http://www.postgresql.org/docs/8.4/interactive/sql-set-transaction.html and came up with the following code and ran it in a new session:


SET SESSION CHARACTERISTICS AS SERIALIZABLE;

SELECT * FROM MyTable;

Postgres gives me a syntax error. What am I doing wrong? If I do it right, will I see the inserted records while that long function is still running?

Thanks

4

2 回答 2

12

PostgreSQL 没有实现让你从函数外部看到这一点的方法,也就是READ UNCOMMITTED隔离级别。您的两个基本选项是:

  • 时不时地使用这个功能RAISE NOTICE来告诉你你走了多远
  • 从函数中使用 dblink 之类的东西回到同一个数据库,然后从那里更新一个计数器表。由于这是一个完全独立的事务,一旦该事务提交,计数器就会可见 - 您不必等待主事务(围绕函数调用)完成。
于 2009-07-22T22:18:03.813 回答
7

PostgreSQL 事务隔离

在 PostgreSQL 中,您可以请求四个标准事务隔离级别中的任何一个。但在内部,只有两个不同的隔离级别,分别对应于 Read Committed 和 Serializable 级别。当您选择 Read Uncommitted 级别时,您确实获得了 Read Committed,而当您选择 Repeatable Read 时,您确实获得了 Serializable,因此实际的隔离级别可能比您选择的更严格。这是 SQL 标准所允许的:四个隔离级别只定义了哪些现象不能发生,它们没有定义哪些现象必须发生。

于 2010-05-25T08:36:20.553 回答