Go의 행 삽입을 위한 재사용 가능한 Postgres DB 연결: 연결 풀 고갈 해결
목표는 재사용 가능한 단일 Postgres 데이터베이스 연결을 사용하는 것입니다. Go에서 행 삽입을 위해. 이 오류는 잘못된 연결 처리로 인해 코드가 실수로 여러 연결을 열 때 발생합니다.
Postgres의 연결 풀 메커니즘인 sql.DB는 단일 연결이 아닌 연결 캐시를 유지합니다. Postgres 서버의 최대 연결 제한까지 필요에 따라 연결을 동적으로 할당합니다. 그러나 반환된 Row 값
Rows 인스턴스를 내부적으로 보유하는 Row 개체는 자체 연결을 관리합니다. Scan이 호출될 때만 연결이 자동으로 해제됩니다. Scan 호출을 무시하면 연결이 계속 유지되어 DB가 후속 QueryRow 호출에서 새 연결을 열게 됩니다. 연결이 해제되지 않은 상태에서 이 문제가 발생하면 풀이 소진되어 문제가 발생합니다.
이 문제를 해결하려면 다음 접근 방식 중 하나를 채택할 수 있습니다.
다음은 이러한 변경 사항을 포함하는 수정된 코드 조각입니다.
// ... func main() { // ... // msg handling sqlStatement := ` INSERT INTO heartbeat ("Legend", "Status", "TimeStamp") VALUES (, , ) ` row := db.QueryRow(sqlStatement, Legend, Status, TimeStamp) row.Scan(&dummy) // dummy variable to discard the result // ... } // ...
이렇게 하면 연결이 즉시 해제되어 DB 연결 풀이 고갈되는 것을 방지할 수 있습니다.
위 내용은 Go에 행을 삽입할 때 Postgres 연결 풀 고갈을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!