Skip to content
Switch branches/tags

Latest commit

…d make rows.Next return it (#1064)

* add reproducer for issue 1062

see #1062

* Keep track of an error for a connection.

Instead of just whether the connection is ErrBadConn. Often times, the error
will still be ErrBadConn. But for expired/cancelled contexts, it will be the
error for the context. Most functions still return ErrBadConn per the
database/sql/driver contract ("ErrBadConn should only be returned from [...] a
query method"). For rows.Next() we return the context-related error.

The database/sql/driver contract doesn't look very precise. Is Next a "query
method" and should database/sql handle ErrBadConns when Next returns them?

Do we have more functions that should return the canceled-context error

* in test for QueryRowContext, fail for all unexpected errors, not just for the one unexpected error

* in TestContextCancel*, accept context.Canceled as valid error

* explicitly test for driver.ErrBadConn in test that breaks the connection

feedback from otan

* move the mutex-protected data in a struct with the mutex, and fix an unsafe usage.

there may be unsafeness in this file.

feedback from otan

Git stats


Failed to load latest commit information.
Latest commit message
Commit time
Jul 20, 2019
Jul 20, 2019
Jul 2, 2019
Jun 8, 2020

pq - A pure Go postgres driver for Go's database/sql package



go get


  • SSL
  • Handles bad connections for database/sql
  • Scan time.Time correctly (i.e. timestamp[tz], time[tz], date)
  • Scan binary blobs correctly (i.e. bytea)
  • Package for hstore support
  • COPY FROM support
  • pq.ParseURL for converting urls to connection strings for sql.Open.
  • Many libpq compatible environment variables
  • Unix socket support
  • Notifications: LISTEN/NOTIFY
  • pgpass support
  • GSS (Kerberos) auth


go test is used for testing. See for more details.


This package is currently in maintenance mode, which means:

  1. It generally does not accept new features.
  2. It does accept bug fixes and version compatability changes provided by the community.
  3. Maintainers usually do not resolve reported issues.
  4. Community members are encouraged to help each other with reported issues.

For users that require new features or reliable resolution of reported bugs, we recommend using pgx which is under active development.