database - Postgres 中的脏读

标签 database postgresql transactions isolation-level dirtyread

我有一个长时间运行的函数,应该插入新行。如何查看该功能的进度?

我认为脏读会起作用,所以我读了 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/

相关文章:

android - 具有读写功能的 Sqlite 事务

java - 使用@Transactional时EntityManager.persist()不插入数据

java - 使用 Realm 持久化对象(错误 : Changing Realm data can only be done from inside a transaction)

mongodb - mongodb 创建准确的索引

mysql - 当在数据库中删除某些内容时,如何更改其他记录以便记录的 id 发生变化

ruby-on-rails - 获取 "value "300000200 0"is out of range for type integer"

SQL:如何合并不区分大小写的重复项

php - 另一个 mysql JOIN 问题

sql - 将表复制到两个新表中

mysql - 在Linux(Kubuntu)上从MySQL迁移到PostgreSQL