Pendant que je développe une application de fenêtre GUI, je vois un comportement étrange lors de l'insertion d'une ligne dans PostgreSQL.L'encart simultané gèle l'interface utilisateur graphique (application Windows/PostgreSQL)
Mon application (construite par Xojo) construit une méta-information JOB et l'insère dans PostgreSQL, et j'ai essayé d'exécuter 5 tâches en insérant chacune une ligne. Il gèle l'application GUI. Lorsque je cours 4 travaux, je ne vois aucun problème, mais 5 cause ce problème.
J'ai essayé de consigner des codes, et je vois que l'un des travaux n'a pas pu être passé sur l'instruction "BEGIN TRANSACTION". Il n'y a pas d'informations de verrouillage dans la base de données, c'est pourquoi je suis coincé.
Probablement, il existe une certaine limite pour insérer des lignes simultanément dans la même table? Parfois, en raison du petit nombre d'ini_trans (Oracle), DML concurrent peut rester bloqué. Je ne suis pas sûr si PostgreSQL a cette fonctionnalité ou non.
Chaque travail doit passer par les étapes ci-dessous pour valider la ligne.
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
Correction.
J'ai remarqué qu'il existe une autre instruction UPDATE pour dater la même table. Toutefois, INSERT et UPDATE traitent une ligne différente, mais il semble qu'ils se bloquent même s'il n'y a pas d'informations de verrouillage.
Je pense que le problème est un peu complexe et que les tâches sont en cours d'exécution avec l'événement DataAvailable de Shell. Je pensais que l'événement DataAvailable risquait de provoquer davantage de conflits de Jobs afin de supprimer les événements DataAvailable et d'en implémenter un nouveau pour vérifier le traitement des travaux. Après cela, je ne vois aucun problème de gel de l'interface graphique. Je vais essayer de trouver l'erreur précédente. Je vous remercie. – Sigularity