In einem Go-Programm wird versucht, Daten mithilfe von a in eine PostgreSQL-Tabelle einzufügen Eine einzelne Datenbankverbindung für jede von RabbitMQ empfangene Nachricht führte zu einem Fehler, da die maximale Anzahl überschritten wurde Verbindungen.
Das Problem liegt in der Art und Weise, wie SQL-Abfragen in Go ausgeführt werden. sql.DB ist ein Verbindungspool und keine einzelne Verbindung. Es öffnet Verbindungen nach Bedarf und verwendet inaktive Verbindungen wieder, aber in diesem Fall wurden die Verbindungen nicht ordnungsgemäß freigegeben.
Das Problem tritt auf, wenn db.QueryRow verwendet wird, ohne Scan für den zurückgegebenen *Row-Wert aufzurufen. *Row enthält einen Verweis auf eine Verbindung, die beim Aufruf von Scan automatisch freigegeben wird. Im bereitgestellten Code wurde Scan jedoch nicht aufgerufen, was dazu führte, dass sich die Verbindungen im Verbindungspool stapelten.
Um dieses Problem zu beheben, besteht die Lösung darin, entweder db.Exec zu verwenden, wenn die Ausgabe nicht erforderlich ist, oder oder um Scan für den von db.QueryRow zurückgegebenen *Row-Wert aufzurufen.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Erschöpfung der PostgreSQL-Verbindung beim Einfügen von Zeilen in Go vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!