MCPcopy
hub / github.com/jackc/pgx

github.com/jackc/pgx @v5.10.0 sqlite

repository ↗ · DeepWiki ↗ · release v5.10.0 ↗
4,400 symbols 17,044 edges 286 files 1,166 documented · 26%
README

Go Reference Build Status

pgx - PostgreSQL Driver and Toolkit

pgx is a pure Go driver and toolkit for PostgreSQL.

The pgx driver is a low-level, high performance interface that exposes PostgreSQL-specific features such as LISTEN / NOTIFY and COPY. It also includes an adapter for the standard database/sql interface.

The toolkit component is a related set of packages that implement PostgreSQL functionality such as parsing the wire protocol and type mapping between PostgreSQL and Go. These underlying packages can be used to implement alternative drivers, proxies, load balancers, logical replication clients, etc.

Example Usage

package main

import (
    "context"
    "fmt"
    "os"

    "github.com/jackc/pgx/v5"
)

func main() {
    // urlExample := "postgres://username:password@localhost:5432/database_name"
    conn, err := pgx.Connect(context.Background(), os.Getenv("DATABASE_URL"))
    if err != nil {
        fmt.Fprintf(os.Stderr, "Unable to connect to database: %v\n", err)
        os.Exit(1)
    }
    defer conn.Close(context.Background())

    var name string
    var weight int64
    err = conn.QueryRow(context.Background(), "select name, weight from widgets where id=$1", 42).Scan(&name, &weight)
    if err != nil {
        fmt.Fprintf(os.Stderr, "QueryRow failed: %v\n", err)
        os.Exit(1)
    }

    fmt.Println(name, weight)
}

See the getting started guide for more information.

Features

  • Support for approximately 70 different PostgreSQL types
  • Automatic statement preparation and caching
  • Batch queries
  • Single-round trip query mode
  • Full TLS connection control
  • Binary format support for custom types (allows for much quicker encoding/decoding)
  • COPY protocol support for faster bulk data loads
  • Tracing and logging support
  • Connection pool with after-connect hook for arbitrary connection setup
  • LISTEN / NOTIFY
  • Conversion of PostgreSQL arrays to Go slice mappings for integers, floats, and strings
  • hstore support
  • json and jsonb support
  • Maps inet and cidr PostgreSQL types to netip.Addr and netip.Prefix
  • Large object support
  • NULL mapping to pointer to pointer
  • Supports database/sql.Scanner and database/sql/driver.Valuer interfaces for custom types
  • Notice response handling
  • Simulated nested transactions with savepoints

Choosing Between the pgx and database/sql Interfaces

The pgx interface is faster. Many PostgreSQL specific features such as LISTEN / NOTIFY and COPY are not available through the database/sql interface.

The pgx interface is recommended when:

  1. The application only targets PostgreSQL.
  2. No other libraries that require database/sql are in use.

It is also possible to use the database/sql interface and convert a connection to the lower-level pgx interface as needed.

Testing

See CONTRIBUTING.md for setup instructions.

Architecture

See the presentation at Golang Estonia, PGX Top to Bottom for a description of pgx architecture.

Supported Go and PostgreSQL Versions

pgx supports the same versions of Go and PostgreSQL that are supported by their respective teams. For Go that is the two most recent major releases and for PostgreSQL the major releases in the last 5 years. This means pgx supports Go 1.25 and higher and PostgreSQL 14 and higher. pgx also is tested against the latest version of CockroachDB.

Version Policy

pgx follows semantic versioning for the documented public API on stable releases. v5 is the latest stable major version.

PGX Family Libraries

github.com/jackc/pglogrepl

pglogrepl provides functionality to act as a client for PostgreSQL logical replication.

github.com/jackc/pgmock

pgmock offers the ability to create a server that mocks the PostgreSQL wire protocol. This is used internally to test pgx by purposely inducing unusual errors. pgproto3 and pgmock together provide most of the foundational tooling required to implement a PostgreSQL proxy or MitM (such as for a custom connection pooler).

github.com/jackc/tern

tern is a stand-alone SQL migration system.

github.com/jackc/pgerrcode

pgerrcode contains constants for the PostgreSQL error codes.

Adapters for 3rd Party Types

Adapters for 3rd Party Tracers

Adapters for 3rd Party Loggers

These adapters can be used with the tracelog package.

3rd Party Libraries with PGX Support

github.com/pashagolub/pgxmock

pgxmock is a mock library implementing pgx interfaces. pgxmock has one and only purpose - to simulate pgx behavior in tests, without needing a real database connection.

github.com/georgysavva/scany

Library for scanning data from a database into Go structs and more.

github.com/vingarcia/ksql

A carefully designed SQL client for making using SQL easier, more productive, and less error-prone on Golang.

github.com/otan/gopgkrb5

Adds GSSAPI / Kerberos authentication support.

github.com/wcamarao/pmx

Explicit data mapping and scanning library for Go structs and slices.

github.com/stephenafamo/scan

Type safe and flexible package for scanning database data into Go types. Supports, structs, maps, slices and custom mapping functions.

github.com/z0ne-dev/mgx

Code first migration library for native pgx (no database/sql abstraction).

github.com/amirsalarsafaei/sqlc-pgx-monitoring

A database monitoring/metrics library for pgx and sqlc. Trace, log and monitor your sqlc query performance using OpenTelemetry.

https://github.com/nikolayk812/pgx-outbox

Simple Golang implementation for transactional outbox pattern for PostgreSQL using jackc/pgx driver.

https://github.com/Arlandaren/pgxWrappy

Simplifies working with the pgx library, providing convenient scanning of nested structures.

https://github.com/KoNekoD/pgx-colon-query-rewriter

Implementation of the pgx query rewriter to use ':' instead of '@' in named query parameters.

Extension points exported contracts — how you extend this code

QueryTracer (Interface)
QueryTracer traces Query, QueryRow, and Exec. [6 implementers]
tracer.go
Row (Interface)
Row is a convenience wrapper over [Rows] that is returned by [Conn.QueryRow]. Row is an interface instead of a struct t [216 …
rows.go
CopyFromSource (Interface)
CopyFromSource is the interface used by [Conn.CopyFrom] as the source for copy data. [11 implementers]
copy_from.go
Message (Interface)
Message is the interface implemented by an object that can decode and encode a particular PostgreSQL message. [49 implementers]
pgproto3/pgproto3.go
Codec (Interface)
A Codec converts between Go and PostgreSQL values. A Codec must not be mutated after it is registered with a [Map]. [41 …
pgtype/pgtype.go
CompositeIndexGetter (Interface)
CompositeIndexGetter is a type accessed by index that can be converted into a PostgreSQL composite. [5 implementers]
pgtype/composite.go
BatchResults (Interface)
(no doc) [7 implementers]
batch.go
AcquireTracer (Interface)
AcquireTracer traces Acquire. [4 implementers]
pgxpool/tracer.go

Core symbols most depended-on inside this repo

Close
called by 364
rows.go
Scan
called by 278
rows.go
Exec
called by 215
tx.go
Scan
called by 205
pgtype/pgtype.go
QueryRow
called by 183
tx.go
Err
called by 170
rows.go
Len
called by 166
pgtype/multirange.go
Query
called by 164
tx.go

Shape

Method 2,140
Function 1,349
Struct 686
TypeAlias 105
Interface 97
FuncType 23

Languages

Go100%

Modules by API surface

pgtype/pgtype.go266 symbols
pgtype/int.go164 symbols
pgconn/pgconn_test.go146 symbols
pgconn/pgconn.go143 symbols
pgtype/builtin_wrappers.go131 symbols
bench_test.go80 symbols
query_test.go77 symbols
pgtype/pgtype_test.go73 symbols
pgtype/integration_benchmark_test.go70 symbols
rows.go68 symbols
conn.go60 symbols
stdlib/sql_test.go59 symbols

Dependencies from manifests, versioned

github.com/davecgh/go-spewv1.1.1 · 1×
github.com/jackc/pgpassfilev1.0.0 · 1×
github.com/jackc/pgservicefilev0.0.0-2024060612052 · 1×
github.com/jackc/puddle/v2v2.2.2 · 1×
github.com/kr/prettyv0.3.0 · 1×
github.com/pmezard/go-difflibv1.0.0 · 1×
golang.org/x/syncv0.17.0 · 1×
golang.org/x/textv0.29.0 · 1×
gopkg.in/check.v1v1.0.0-2020113013444 · 1×
gopkg.in/yaml.v3v3.0.1 · 1×

Datastores touched

mydbDatabase · 1 repos
pgx_testDatabase · 1 repos
curlydbDatabase · 1 repos
database_nameDatabase · 1 repos
dbDatabase · 1 repos
db_nameDatabase · 1 repos
fooDatabase · 1 repos

For agents

$ claude mcp add pgx \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact