Maison >développement back-end >Golang >Comment puis-je éviter l'épuisement des connexions PostgreSQL lors de l'insertion de lignes dans Go ?

Comment puis-je éviter l'épuisement des connexions PostgreSQL lors de l'insertion de lignes dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-17 09:03:26857parcourir

How Can I Avoid PostgreSQL Connection Exhaustion When Inserting Rows in Go?

Réutilisation d'une connexion à une base de données PostgreSQL pour les insertions de lignes dans Go

Problème

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.

Solution

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn