问题描述
让我们以 Postgresql 为例:
应用程序使用名为“ENT001”的表,并定义了谨慎锁定,这意味着当用户开始修改记录时,该记录将立即被锁定,这样第二个用户将无法修改相同的记录直到锁被释放。
记录被修改(被锁定)后,在同一个应用会话中,执行如下sql语句: “从 AAAm ent001 中选择计数 ( * )”
对于当前的 Postgresql,执行上述 sql 语句后,修改记录的锁由 Postgresql 服务器释放,因此第二个应用程序会话能够修改相同的记录,这不是我们所期望的。此问题仅在 Postgresql 中出现,在 Oracle 或 MS sql Server 中不出现。
我们看到的是,Postgresql 在出现 sql 错误时中止事务,导致事务中关联的所有锁都被释放。
result = sqlExecDirectW(sqlStatement,statementText,sql_NTS);
并将其替换为
result = sqlPrepareW(sqlStatement,sql_NTS);
...
result = sqlExecute(sqlStatement);
这似乎有效,但是在短时间内在多个事务中的行为有些不同。 sqlPrepareW 有时会返回:“准备好的语句已经存在”或告诉我们 Postgresql 仍然忙碌的错误。抱歉上次的错误,我还没有详细信息。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)