jackc/pgx · error
unsupported isolation
Error message
unsupported isolation: %v
What it means
stdlib Conn.BeginTx maps database/sql isolation levels onto pgx levels and falls into the default branch for any level outside the supported set (e.g. sql.LevelLinearizable), which has no PostgreSQL equivalent.
Solutions
- Use a supported isolation level (Default through Serializable)
- Use the native pgx API with explicit pgx.TxOptions for exotic levels
- Use pgx.SerializableDeferrable via TxOptions when deferrable serializable is needed
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at stdlib/sql.go:473 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of jackc/pgx@ec1a0befd2 (2026-08-04).
Data as JSON: /api/errors/8aeca0e4e729a155.
Report an issue: GitHub.
Appendix: source
Thrown at stdlib/sql.go:473
func (c *Conn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) {
if c.conn.IsClosed() {
return nil, driver.ErrBadConn
}
var pgxOpts pgx.TxOptions
switch sql.IsolationLevel(opts.Isolation) {
case sql.LevelDefault:
case sql.LevelReadUncommitted:
pgxOpts.IsoLevel = pgx.ReadUncommitted
case sql.LevelReadCommitted:
pgxOpts.IsoLevel = pgx.ReadCommitted
case sql.LevelRepeatableRead, sql.LevelSnapshot:
pgxOpts.IsoLevel = pgx.RepeatableRead
case sql.LevelSerializable:
pgxOpts.IsoLevel = pgx.Serializable
default:
return nil, fmt.Errorf("unsupported isolation: %v", opts.Isolation)
}
if opts.ReadOnly {
pgxOpts.AccessMode = pgx.ReadOnly
}
tx, err := c.conn.BeginTx(ctx, pgxOpts)
if err != nil {
return nil, err
}
return wrapTx{ctx: ctx, tx: tx}, nil
}
func (c *Conn) ExecContext(ctx context.Context, query string, argsV []driver.NamedValue) (driver.Result, error) {
if c.conn.IsClosed() {
return nil, driver.ErrBadConn
}View on GitHub (pinned to ec1a0befd2)