私はGUIウィンドウアプリケーションを開発しているが、PostgreSQLに行を挿入するときに奇妙な動作が見られる。同時挿入によりGUIがフリーズする(Windowsアプリケーション/ PostgreSQL)
私のアプリケーション(Xojoで構築)はJOBメタ情報を作成し、それをPostgreSQLに挿入するので、それぞれ1行ずつ挿入する5つのジョブを実行しようとしました。 GUIアプリケーションをフリーズします。 4つのジョブを実行すると問題は発生しませんが、5が原因です。
コードをロギングしようとしましたが、ジョブの1つが「BEGIN TRANSACTION」ステートメントで渡されないことがわかりました。 データベースにロック情報がありません。そのため、私は立ち往生しています。
おそらく、同じテーブルに同時に行を挿入するにはいくつかの制限がありますか? 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は異なる行を扱いますが、ロック情報がなくても互いにブロックしているようです。
問題は少し複雑で、実際にはジョブはShellのDataAvailableイベントで実行されていると思います。私はDataAvailableイベントがJobsの競合を引き起こし、DataAvailableイベントを削除しようとしたと考え、ジョブ処理を確認するために新しいイベントを実装しました。その後、私はGUIの凍結の問題は表示されません。以前のエラーを見つけようとします。ありがとうございました。 – Sigularity