1

GUI ウィンドウ アプリケーションを開発しているときに、PostgreSQL に行を挿入すると奇妙な動作が見られます。

私のアプリケーション (Xojo によって構築された) は、JOB メタ情報を構築し、それを PostgreSQL に挿入します。それぞれ 1 つの行を挿入する 5 つのジョブを実行しようとしました。GUI アプリケーションをフリーズします。4 つのジョブを実行しても問題はありませんが、5 つのジョブでこの問題が発生します。

コードをログに記録しようとしましたが、「BEGIN TRANSACTION」ステートメントでジョブの 1 つを渡すことができなかったことがわかりました。データベースにロック情報がないため、立ち往生しています。

おそらく、同じテーブルに同時に行を挿入するにはいくつかの制限がありますか? 少数の ini_trans(Oracle) が原因で、同時 DML が停止することがありました。PostgreSQL にその機能があるかどうかはわかりません。

各ジョブは、1 つの行をコミットするために以下の手順を実行する必要があります。

  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は別の行を扱いますが、ロック情報がないのにお互いをブロックしているようです。

4

1 に答える 1

1

BEGIN TRANSACTION ステップの後、エラーがないかどうかを確認する必要があります。SQLExecute を使用すると、データベース エラーが発生する可能性があります。おそらく何が起こっているのかを正確に伝えるエラーメッセージが表示されると思います.

于 2016-08-06T16:31:23.317 に答える