{"record":{"id":"8fb07070cb222bb2","repo":"jackc/pgx","slug":"s-w","errorCode":null,"errorMessage":"%s: %w","messagePattern":"%s: %w","errorType":"exception","errorClass":"perDialConnectError","httpStatus":null,"severity":"error","filePath":"pgconn/pgconn.go","lineNumber":326,"sourceCode":"\t}\n\n\treturn nil, allErrors\n}\n\n// connectOne makes one connection attempt to a single host.\nfunc connectOne(ctx context.Context, config *Config, connectConfig *connectOneConfig,\n\tignoreNotPreferredErr bool,\n) (*PgConn, error) {\n\tpgConn := new(PgConn)\n\tpgConn.config = config\n\tpgConn.cleanupDone = make(chan struct{})\n\tpgConn.customData = make(map[string]any)\n\n\tvar err error\n\n\tnewPerDialConnectError := func(msg string, err error) *perDialConnectError {\n\t\terr = normalizeTimeoutError(ctx, err)\n\t\te := &perDialConnectError{address: connectConfig.address, originalHostname: connectConfig.originalHostname, err: fmt.Errorf(\"%s: %w\", msg, err)}\n\t\treturn e\n\t}\n\n\tmaxProtocolVersion, err := parseProtocolVersion(config.MaxProtocolVersion)\n\tif err != nil {\n\t\treturn nil, newPerDialConnectError(\"invalid max_protocol_version\", err)\n\t}\n\tminProtocolVersion, err := parseProtocolVersion(config.MinProtocolVersion)\n\tif err != nil {\n\t\treturn nil, newPerDialConnectError(\"invalid min_protocol_version\", err)\n\t}\n\n\tpgConn.conn, err = config.DialFunc(ctx, connectConfig.network, connectConfig.address)\n\tif err != nil {\n\t\treturn nil, newPerDialConnectError(\"dial error\", err)\n\t}\n\n\tif connectConfig.tlsConfig != nil {","sourceCodeStart":308,"sourceCodeEnd":344,"githubUrl":"https://github.com/jackc/pgx/blob/ec1a0befd22592cffffdeeb0a50311b506372f4c/pgconn/pgconn.go#L308-L344","documentation":"A per-dial connection attempt failed and the error is wrapped with context (address, hostname, normalized timeout) before being aggregated. Multi-host configs try remaining fallbacks; if all fail the joined errors surface as a ConnectError. Connection-level failures like these are candidates for retry with backoff.","triggerScenarios":"Thrown at pgconn/pgconn.go:326 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the wrapped error for the root cause (refused, timeout, TLS, auth)","Verify the target address and port are correct and reachable","If multiple hosts are configured, ensure fallbacks are defined","Implement retry with backoff for transient network failures"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"ec1a0befd22592cffffdeeb0a50311b506372f4c","analyzedAt":"2026-08-04T22:52:11.263Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}