pgx/v3.md

3.1 KiB

V3 Experimental

Changes

Rename Oid to OID in accordance with Go naming conventions.

Rename Json(b) to JSON(B) in accordance with Go naming conventions.

Rename Pid to PID in accordance with Go naming conventions.

Rename Uuid to UUID in accordance with Go naming conventions.

Logger interface reduced to single Log method.

Replace BeginIso with BeginEx. BeginEx adds support for read/write mode and deferrable mode.

Transaction isolation level constants are now typed strings instead of bare strings.

Conn.Pid changed to accessor method Conn.PID()

Conn.SecretKey removed

Remove Conn.TxStatus

Added Context methods

Conn.WaitForNotification now takes context.Context instead of time.Duration for cancellation support.

Conn.WaitForNotification no longer automatically pings internally every 15 seconds. (Reconsider this later...)

ReplicationConn.WaitForReplicationMessage now takes context.Context instead of time.Duration for cancellation support.

Reject scanning binary format values into a string (e.g. binary encoded timestamptz to string). See https://github.com/jackc/pgx/issues/219 and https://github.com/jackc/pgx/issues/228

TODO / Possible / Investigate

Organize errors better

Remove circular dependency between Conn and ConnPool such that ConnPool depends on Conn, but Conn doesn't know anything about ConnPool

Or maybe double-down on conn/pool coupling and improve connpool

Add auto-idle pinging to conns in pool

Extract types Null* and Hstore to separate package

Remove names from prepared statements - use database/sql style objects

Better way of handling text/binary protocol choice than pgx.DefaultTypeFormats or manually editing a PreparedStatement. Possibly an optional part of preparing a statement is specifying the format and/or a decoder. Or maybe it is part of a QueryEx call... Could be very interesting to make encoding and decoding possible without being a method of the type. This could drastically clean up those huge type switches.

Also maybe support binary and text for everything possible

dValueReader / msgReader cleanup

Make easier / possible to mock Conn or ConnPool (https://github.com/jackc/pgx/pull/162)

Every field that should not be set by user should be replaced by accessor method (only ones left are Conn.RuntimeParams and Conn.PgTypes)

Investigate strongly typed queries. i.e. Some sort of interface where varargs of Query, Exec, and Scan wouldn't happen. Need to be some low-level interface where (probably generated) functions could (more or less) directly read and write to the connection. Clean code and type-safety / control would be the benefits. Row scanning performance is already so fast there is little to improve (go_db_bench shows under 1 microsecond per row).

Further clean up logging interface -- still some pre-loglevel code in place Possibly integrate internal logging support with context. Possibly add method that adds arbitrary pgx log data to context. Or add ability to configure what key(s) pgx looks at for additional log context. Consider whether to switch to logrus style or stick with log15 style logs Keep ability to change logging while running