Categorygithub.com/steampunkcoder/pgx
modulepackage
2.11.0+incompatible
Repository: https://github.com/steampunkcoder/pgx.git
Documentation: pkg.go.dev

# README

Pgx

Pgx is a pure Go database connection library designed specifically for PostgreSQL. Pgx is different from other drivers such as pq because, while it can operate as a database/sql compatible driver, pgx is primarily intended to be used directly. It offers a native interface similar to database/sql that offers better performance and more features.

Features

Pgx supports many additional features beyond what is available through database/sql.

  • Listen / notify
  • Transaction isolation level control
  • Full TLS connection control
  • Binary format support for custom types (can be much faster)
  • Copy from protocol support for faster bulk data loads
  • Logging support
  • Configurable connection pool with after connect hooks to do arbitrary connection setup
  • PostgreSQL array to Go slice mapping for integers, floats, and strings
  • Hstore support
  • JSON and JSONB support
  • Maps inet and cidr PostgreSQL types to net.IPNet and net.IP
  • Large object support
  • Null mapping to Null* struct or pointer to pointer.
  • Supports database/sql.Scanner and database/sql/driver.Valuer interfaces for custom types
  • Logical replication connections, including receiving WAL and sending standby status updates

Performance

Pgx performs roughly equivalent to pq and go-pg for selecting a single column from a single row, but it is substantially faster when selecting multiple entire rows (6893 queries/sec for pgx vs. 3968 queries/sec for pq -- 73% faster).

See this gist for the underlying benchmark results or checkout go_db_bench to run tests for yourself.

database/sql

Import the github.com/jackc/pgx/stdlib package to use pgx as a driver for database/sql. It is possible to retrieve a pgx connection from database/sql on demand. This allows using the database/sql interface in most places, but using pgx directly when more performance or PostgreSQL specific features are needed.

Documentation

pgx includes extensive documentation in the godoc format. It is viewable online at godoc.org.

Testing

pgx supports multiple connection and authentication types. Setting up a test environment that can test all of them can be cumbersome. In particular, Windows cannot test Unix domain socket connections. Because of this pgx will skip tests for connection types that are not configured.

Normal Test Environment

To setup the normal test environment, first install these dependencies:

go get github.com/jackc/fake
go get github.com/shopspring/decimal
go get gopkg.in/inconshreveable/log15.v2

Then run the following SQL:

create user pgx_md5 password 'secret';
create user " tricky, ' } "" \ test user " password 'secret';
create database pgx_test;
create user pgx_replication with replication password 'secret';

Connect to database pgx_test and run:

create extension hstore;

Next open conn_config_test.go.example and make a copy without the .example. If your PostgreSQL server is accepting connections on 127.0.0.1, then you are done.

Connection and Authentication Test Environment

Complete the normal test environment setup and also do the following.

Run the following SQL:

create user pgx_none;
create user pgx_pw password 'secret';

Add the following to your pg_hba.conf:

If you are developing on Unix with domain socket connections:

local  pgx_test  pgx_none  trust
local  pgx_test  pgx_pw    password
local  pgx_test  pgx_md5   md5

If you are developing on Windows with TCP connections:

host  pgx_test  pgx_none  127.0.0.1/32 trust
host  pgx_test  pgx_pw    127.0.0.1/32 password
host  pgx_test  pgx_md5   127.0.0.1/32 md5

Replication Test Environment

Add a replication user:

create user pgx_replication with replication password 'secret';

Add a replication line to your pg_hba.conf:

host replication pgx_replication 127.0.0.1/32 md5

Change the following settings in your postgresql.conf:

wal_level=logical
max_wal_senders=5
max_replication_slots=5

Version Policy

pgx follows semantic versioning for the documented public API on stable releases. Branch v2 is the latest stable release. master can contain new features or behavior that will change or be removed before being merged to the stable v2 branch (in practice, this occurs very rarely).

# Packages

No description provided by the author
Package stdlib is the compatibility layer from pgx to database/sql.

# Functions

Connect establishes a connection with a PostgreSQL server using config.
CopyFromRows returns a CopyFromSource interface over the provided rows slice making it usable by *Conn.CopyFrom.
Deprecated.
Decode decodes from vr into d.
Encode encodes arg into wbuf as the type oid.
Format the given 64bit LSN value into the XXX/XXX format, which is the format reported by postgres.
LogLevelFromString converts log level string to constant Valid levels: trace debug info warn error none.
NewConnPool creates a new ConnPool.
Create a standby status struct, which sets all the WAL positions to the given wal position, and the client time to the current time.
ParseConnectionString parses either a URI or a DSN connection string.
ParseDSN parses a database DSN (data source name) into a ConnConfig e.g.
ParseEnvLibpq parses the environment like libpq does into a ConnConfig See http://www.postgresql.org/docs/9.4/static/libpq-envars.html for details on the meaning of environment variables.
ParseHstore parses the string representation of an hstore column (the same you would get from an ordinary SELECT) into two slices of keys and values.
Parse the given XXX/XXX format LSN as reported by postgres, into a 64 bit integer as used internally by the wire procotols.
ParseURI parses a database URI into ConnConfig Query parameters not used by the connection process are parsed into ConnConfig.RuntimeParams.
No description provided by the author

# Constants

PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL format codes.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
No description provided by the author
No description provided by the author
The values for log levels are chosen such that the zero value means that no log level was specified and we can default to LogLevelDebug to preserve the behavior that existed prior to log level introduction.
The values for log levels are chosen such that the zero value means that no log level was specified and we can default to LogLevelDebug to preserve the behavior that existed prior to log level introduction.
The values for log levels are chosen such that the zero value means that no log level was specified and we can default to LogLevelDebug to preserve the behavior that existed prior to log level introduction.
The values for log levels are chosen such that the zero value means that no log level was specified and we can default to LogLevelDebug to preserve the behavior that existed prior to log level introduction.
The values for log levels are chosen such that the zero value means that no log level was specified and we can default to LogLevelDebug to preserve the behavior that existed prior to log level introduction.
The values for log levels are chosen such that the zero value means that no log level was specified and we can default to LogLevelDebug to preserve the behavior that existed prior to log level introduction.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
Transaction isolation levels.
Transaction isolation levels.
PostgreSQL oids for common types.
Transaction isolation levels.
Transaction isolation levels.
PostgreSQL oids for common types.
PostgreSQL format codes.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.
PostgreSQL oids for common types.

# Variables

DefaultTypeFormats maps type names to their default requested format (text or binary).
ErrAcquireTimeout occurs when an attempt to acquire a connection times out.
ErrConnBusy occurs when the connection is busy (for example, in the middle of reading query results) and another action is attempts.
ErrDeadConn occurs on an attempt to use a dead connection.
ErrInvalidLogLevel occurs on attempt to set an invalid log level.
ErrNoRows occurs when rows are expected but none are returned.
ErrNotificationTimeout occurs when WaitForNotification times out.
ErrTLSRefused occurs when the connection attempt requires TLS and the PostgreSQL server refuses to use TLS.
No description provided by the author
ErrTxCommitRollback occurs when an error has occurred in a transaction and Commit() is called.

# Structs

Conn is a PostgreSQL connection handle.
ConnConfig contains all the options used to establish a connection.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
A LargeObject is a large object stored on the server.
LargeObjects is a structure used to access the large objects API.
Notification is a message received from the PostgreSQL LISTEN/NOTIFY system.
NullAclItem represents a pgx.AclItem that may be null.
NullBool represents an bool that may be null.
NullChar represents a pgx.Char that may be null.
NullCid represents a Command Identifier (Cid) that may be null.
NullFloat32 represents an float4 that may be null.
NullFloat64 represents an float8 that may be null.
NullHstore represents an hstore column that can be null or have null values associated with its keys.
NullInt16 represents a smallint that may be null.
NullInt32 represents an integer that may be null.
NullInt64 represents an bigint that may be null.
NullName represents a pgx.Name that may be null.
NullOid represents a Command Identifier (Oid) that may be null.
NullString represents an string that may be null.
NullTid represents a Tuple Identifier (Tid) that may be null.
NullTime represents an time.Time that may be null.
NullXid represents a Transaction ID (Xid) that may be null.
PgError represents an error reported by the PostgreSQL server.
PgType is information about PostgreSQL type and how to encode and decode it.
PreparedStatement is a description of a prepared statement.
PrepareExOptions is an option struct that can be passed to PrepareEx.
No description provided by the author
The replication message wraps all possible messages from the server received during replication.
Rows is the result set returned from *Conn.Query.
The server heartbeat is sent periodically from the server, including server status, and a reply request field.
The standby status is the client side heartbeat sent to the postgresql server to track the client wal positions.
Tid is PostgreSQL's Tuple Identifier type.
Tx represents a database transaction.
ValueReader is used by the Scanner interface to decode values.
The WAL message contains WAL payload entry data.
WriteBuf is used build messages to send to the PostgreSQL server.

# Interfaces

CopyFromSource is the interface used by *Conn.CopyFrom as the source for copy data.
Deprecated.
Encoder is an interface used to encode values for transmission to the PostgreSQL server.
Logger is the interface used to get logging from pgx internals.
PgxScanner is an interface used to decode values from the PostgreSQL server.
Deprecated: Scanner is an interface used to decode values from the PostgreSQL server.

# Type aliases

AclItem is used for PostgreSQL's aclitem data type.
The pgx.Char type is for PostgreSQL's special 8-bit-only "char" type more akin to the C language's char type, or Go's byte type.
Cid is PostgreSQL's Command Identifier type.
CommandTag is the result of an Exec function.
DialFunc is a function that can be used to connect to a PostgreSQL server.
Hstore represents an hstore column.
Identifier a PostgreSQL identifier or name.
No description provided by the author
Name is a type used for PostgreSQL's special 63-byte name data type, used for identifiers like table names.
Oid (Object Identifier Type) is, according to https://www.postgresql.org/docs/current/static/datatype-oid.html, used internally by PostgreSQL as a primary key for various system tables.
ProtocolError occurs when unexpected data is received from PostgreSQL.
QueryArgs is a container for arguments to an SQL query.
Row is a convenience wrapper over Rows that is returned by QueryRow.
SerializationError occurs on failure to encode or decode a value.
Xid is PostgreSQL's Transaction ID type.