Dans un programme Go, tentative d'insertion de données dans une table PostgreSQL à l'aide d'un une connexion à une seule base de données pour chaque message reçu de RabbitMQ a entraîné une erreur due au dépassement du nombre maximum de connexions.
Le problème réside dans la façon dont les requêtes SQL sont exécutées dans Go. sql.DB est un pool de connexions plutôt qu'une connexion unique. Il ouvre les connexions selon les besoins et réutilise les connexions inactives, mais dans ce cas, les connexions n'étaient pas libérées correctement.
Le problème survient lors de l'utilisation de db.QueryRow sans appeler Scan sur la valeur *Row renvoyée. *Row contient une référence à une connexion, qui est automatiquement libérée lorsque Scan est appelé. Cependant, dans le code fourni, Scan n'était pas appelé, ce qui entraînait l'accumulation des connexions dans le pool de connexions.
Pour résoudre ce problème, la solution consiste soit à utiliser db.Exec si la sortie n'est pas requise, ou pour appeler Scan sur la valeur *Row renvoyée par db.QueryRow.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!