有多个客户端并发对数据库中的表和记录进行操作,如果同一时间多个客户端对同一表或者同一记录进行操作,我怎么样才能做到互斥,怎样做到可以提示给客户端那些用户在对该表进行操作。希望有个例子程序或者提供一些资料。
  在oracle里可以写好存储过程在后台(而不用再写其他程序)定时对表进行查询,备份或者或者恢复等等。postgres有这样的功能没有?这方面的资料那里有啊?
  非常感谢。

解决方案 »

  1.   

    show full processlist
    看一下结果就明白了。
      

  2.   

    http://www.pgsqldb.org/pgsqldoc-cvs/mvcc.html
      

  3.   

    将postgres 隔离级别设为read commit ,所有用于可先后进行修改,最终值为此行的最后更新值
    将隔离级别设为serializable,两个事务重叠,有一个修改事务会报错。需要代码设计者进行重复提交。你的“怎样做到可以提示给客户端那些用户在对该表进行操作”,我理解你的需求是用户打开一行至提交修改视为一个过程,那么需要另建标志来记录用户从打开此行至提交的整个状态(计数)
      

  4.   

    我觉得比较通用的是(包括oracle数据库)CAS操作(Compare-And-Swap),这也是我一直使用的:将隔离级别设为read commit,用于查看时记录下每行,用户提交时 where条件用上全部可修改的字段。如用户查询某些数据: select name,age from student where id=1;  经过几秒中用户提交,代码为:update student  set name='xxx',age='xxx where id=1 and name='oldxxx' and age='oldxxx';如果返回已更新0行,说明已被他人修改
    ——Compare-And-Swap一些工具实现这些操作,使用非常简单——如PB