mirror of https://github.com/jackc/pgx.git
Previously, a conn.Write would simply unlock pgconn, leaving the connection as Idle and reusable while the multiResultReader would be closed. From this state, calling multiResultReader.Close won't try to receiveMessage and thus won't unwatch and close the connection since it is already closed. This leaves the connection "open" and the next time it's used, a "Watch already in progress" panic could be triggered. This patch fixes the issue by unwatching and closing the connection on a batch write error. The same was done on Sync.Encode error even if the path is unreachable as Sync.Error never returns an error. |
||
---|---|---|
.. | ||
ctxwatch | ||
internal/bgreader | ||
README.md | ||
auth_scram.go | ||
benchmark_private_test.go | ||
benchmark_test.go | ||
config.go | ||
config_test.go | ||
defaults.go | ||
defaults_windows.go | ||
doc.go | ||
errors.go | ||
errors_test.go | ||
export_test.go | ||
helper_test.go | ||
krb5.go | ||
pgconn.go | ||
pgconn_private_test.go | ||
pgconn_stress_test.go | ||
pgconn_test.go |
README.md
pgconn
Package pgconn is a low-level PostgreSQL database driver. It operates at nearly the same level as the C library libpq. It is primarily intended to serve as the foundation for higher level libraries such as https://github.com/jackc/pgx. Applications should handle normal queries with a higher level library and only use pgconn directly when required for low-level access to PostgreSQL functionality.
Example Usage
pgConn, err := pgconn.Connect(context.Background(), os.Getenv("DATABASE_URL"))
if err != nil {
log.Fatalln("pgconn failed to connect:", err)
}
defer pgConn.Close(context.Background())
result := pgConn.ExecParams(context.Background(), "SELECT email FROM users WHERE id=$1", [][]byte{[]byte("123")}, nil, nil, nil)
for result.NextRow() {
fmt.Println("User 123 has email:", string(result.Values()[0]))
}
_, err = result.Close()
if err != nil {
log.Fatalln("failed reading result:", err)
}
Testing
See CONTRIBUTING.md for setup instructions.