81ddcfdefb
stdlib_test.TestConnConcurrency had been flickering on CI deadline / timeout errors. This was extremely confusing because the test deadline was set for 2 minutes and the errors would occur much quicker. The problem only manifested in an extremely specific and timing sensitive situation. 1. The watchdog timer for deadlocked writes starts the goroutine to start the background reader 2. The background reader is stopped 3. The next operation is a read without a preceding write (AFAIK only CheckConn does this) 4. The deadline is set to interrupt the read 5. The goroutine from 1 actually starts the background reader 6. The background reader gets an error reading the connection with the deadline 7. The deadline is cleared 8. The next read on the connection will get the timeout error
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.