ld9999999999/pqpooling


lib/pq fork with driver level pooling.

License: MIT

Language: Go


pq - A pure Go postgres driver for Go's database/sql package (with hard-limit connection pooling support)

This is a fork of lib/pq with driver level connection pooling. The following additions have been implemented:

Max Connections

This limits the number of concurrent connections to the server.

environment variable: PGMAXCONS=10
connection string: maxcons=10

Persistence

This makes connections to the database persistent and never disconnect (unless a connection error arises). maxcons must be defined for this to work.

environment variable: PGPERSIST=true
connection string: persist=true

Use

If maxcons is defind, then you must tell database/sql not to do any pooling with db.SetMaxIdleConns(0) immediately after opening the database successfully. You must also make sure that you perform database Close() only once otherwise it'll hang the connection pool up (the pooling uses semaphores based on the Open() and Close()).

func main() {
    db, err := sql.Open("postgres", "user=pqgotest dbname=pqgotest sslmode=verify-full maxcons=10 persist=true")

    //...

    db.SetMaxIdleConns(0)

    //...
}

----- Everything below is from the original lib/pq -----

Build Status

Install

go get github.com/lib/pq

Docs

http://godoc.org/github.com/lib/pq

Use

package main

import (
    _ "github.com/lib/pq"
    "database/sql"
)

func main() {
    db, err := sql.Open("postgres", "user=pqgotest dbname=pqgotest sslmode=verify-full")
    // ...
}

Connection String Parameters

These are a subset of the libpq connection parameters. In addition, a number of the environment variables supported by libpq are also supported. Just like libpq, these have lower precedence than explicitly provided connection parameters.

See http://www.postgresql.org/docs/9.1/static/libpq-connect.html.

  • dbname - The name of the database to connect to
  • user - The user to sign in as
  • password - The user's password
  • host - The host to connect to. Values that start with / are for unix domain sockets. (default is localhost)
  • port - The port to bind to. (default is 5432)
  • sslmode - Whether or not to use SSL (default is require, this is not the default for libpq) Valid values are:
    • disable - No SSL
    • require - Always SSL (skip verification)
    • verify-full - Always SSL (require verification)

See http://golang.org/pkg/database/sql to learn how to use with pq through the database/sql package.

Tests

go test is used for testing. A running PostgreSQL server is required, with the ability to log in. The default database to connect to test with is "pqgotest," but it can be overridden using environment variables.

Example:

PGHOST=/var/run/postgresql go test github.com/lib/pq

Optionally, a benchmark suite can be run as part of the tests:

PGHOST=/var/run/postgresql go test -bench .

Features

  • SSL
  • Handles bad connections for database/sql
  • Scan time.Time correctly (i.e. timestamp[tz], time[tz], date)
  • Scan binary blobs correctly (i.e. bytea)
  • pq.ParseURL for converting urls to connection strings for sql.Open.
  • Many libpq compatible environment variables
  • Unix socket support

Future / Things you can help with

  • Notifications: LISTEN/NOTIFY
  • hstore sugar (i.e. handling hstore in rows.Scan)

Thank you (alphabetical)

Some of these contributors are from the original library bmizerany/pq.go whose code still exists in here.

  • Andy Balholm (andybalholm)
  • Ben Berkert (benburkert)
  • Bill Mill (llimllib)
  • Bjørn Madsen (aeons)
  • Blake Gentry (bgentry)
  • Brad Fitzpatrick (bradfitz)
  • Chris Walsh (cwds)
  • Daniel Farina (fdr)
  • Everyone at The Go Team
  • Evan Shaw (edsrzf)
  • Ewan Chou (coocood)
  • Federico Romero (federomero)
  • Gary Burd (garyburd)
  • Heroku (heroku)
  • Jason McVetta (jmcvetta)
  • Joakim Sernbrant (serbaut)
  • John Gallagher (jgallagher)
  • Kamil Kisiel (kisielk)
  • Keith Rarick (kr)
  • Maciek Sakrejda (deafbybeheading)
  • Marc Brinkmann (mbr)
  • Martin Olsen (martinolsen)
  • Mike Lewis (mikelikespie)
  • Ryan Smith (ryandotsmith)
  • Samuel Stauffer (samuel)
  • notedit (notedit)

Project Statistics

Sourcerank 5
Repository Size 189 KB
Stars 11
Forks 2
Watchers 3
Open issues 0
Dependencies 0
Contributors 19
Tags 0
Created
Last updated
Last pushed

Top Contributors See all

Blake Mizerany Daniel Farina Maciek Sakrejda Blake Gentry John Gallagher Leon Evan Shaw Kamil Kisiel Andy Balholm Ben Burkert Jason McVetta Travis Cline Marc Brinkmann Bill Mill Keith Rarick Ewan Chou Bjørn Madsen Gary Burd Martin Olsen

Packages Referencing this Repo

github.com/ld9999999999/pqpooling/test
lib/pq fork with driver level pooling.
Latest release - Published - 11 stars
github.com/ld9999999999/pqpooling/oid
lib/pq fork with driver level pooling.
Latest release - Published - 11 stars
github.com/ld9999999999/pqpooling
lib/pq fork with driver level pooling.
Latest release - Published - 11 stars

Something wrong with this page? Make a suggestion

Last synced: 2016-05-27 16:12:46 UTC

Login to resync this repository