Heim > Backend-Entwicklung > Golang > Wie kann ich eine Erschöpfung der PostgreSQL-Verbindung beim Einfügen von Zeilen in Go vermeiden?

Wie kann ich eine Erschöpfung der PostgreSQL-Verbindung beim Einfügen von Zeilen in Go vermeiden?

Patricia Arquette
Freigeben: 2024-12-17 09:03:26
Original
920 Leute haben es durchsucht

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

Wiederverwendung einer PostgreSQL-Datenbankverbindung für Zeileneinfügungen in Go

Problem

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.

Lösung

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage