并发插入冻结GUI(Windows应用程序/PostgreSQL)

并发插入冻结GUI(Windows应用程序/PostgreSQL),postgresql,xojo,Postgresql,Xojo,当我开发GUI窗口应用程序时,我看到在PostgreSQL中插入一行的奇怪行为 我的应用程序(由Xojo构建)构建了一个作业元信息并将其插入到PostgreSQL中,我尝试运行了5个作业,每个作业插入一行。 它冻结了GUI应用程序。 当我运行4个作业时,我看不到任何问题,但5个作业会导致此问题 尝试记录代码,我发现其中一个作业无法通过“BEGINTRANSACTION”语句传递。 数据库中没有锁信息,这就是我被卡住的原因 在同一个表中并发插入行可能有一些限制? 有时,由于ini_trans(Or

当我开发GUI窗口应用程序时,我看到在PostgreSQL中插入一行的奇怪行为

我的应用程序(由Xojo构建)构建了一个作业元信息并将其插入到PostgreSQL中,我尝试运行了5个作业,每个作业插入一行。 它冻结了GUI应用程序。 当我运行4个作业时,我看不到任何问题,但5个作业会导致此问题

尝试记录代码,我发现其中一个作业无法通过“BEGINTRANSACTION”语句传递。 数据库中没有锁信息,这就是我被卡住的原因

在同一个表中并发插入行可能有一些限制? 有时,由于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
校正 我注意到在同一个表中还有另一个更新语句。
但是,INSERT和UPDATE处理不同的行,但它们似乎相互阻止,即使没有锁信息。

在开始事务步骤后,您应该检查是否有任何错误。任何使用SQLExecute的操作都可能导致数据库错误。我敢打赌,您将收到一条错误消息,该消息可能会准确地告诉您发生了什么。

我认为问题有点复杂,实际上作业是使用Shell的DataAvailable事件运行的。我认为DataAvailable事件可能会导致更多的作业争用,因此尝试删除DataAvailable事件,并实现新事件来检查作业处理。在那之后,我没有看到任何GUI冻结问题。我将尝试查找以前的错误。非常感谢。