【发布时间】:2016-08-06 11:19:25
【问题描述】:
当我开发一个 GUI 窗口应用程序时,我发现在 PostgreSQL 中插入一行时出现奇怪的行为。
我的应用程序(由 Xojo 构建)构建了一个 JOB 元信息并将其插入 PostgreSQL,我尝试运行 5 个作业,每个作业插入一行。 它冻结了 GUI 应用程序。 当我运行 4 个作业时,我没有看到任何问题,但有 5 个会导致此问题。
尝试记录代码,我发现其中一项作业无法通过“BEGIN TRANSACTION”语句传递。 数据库中没有锁定信息,这就是我卡住的原因。
可能在同一个表中同时插入行有一些限制? 有时,由于 ini_trans(Oracle) 的数量很少,并发 DML 可能会卡住。我不确定 PostgreSQL 是否有这个功能。
每个作业都应该通过以下步骤来提交一行。
mPostgreSQLDB.SQLExecute("BEGIN TRANSACTION")
mPostgreSQLDB.SQLExecute (insert_statement)
If mPostgreSQLDB.Error then
Logging("DML failed. Error: " + mPostgreSQLDB.ErrorMessage + " Rollbacked " )
mPostgreSQLDB.Rollback
Else
mPostgreSQLDB.Commit
End If
更正。
我注意到有另一个 UPDATE 语句来记录同一张表的日期。 但是,INSERT 和 UPDATE 处理的是不同的行,但即使没有锁定信息,它们似乎也会相互阻塞。
【问题讨论】:
标签: postgresql xojo