PostgreSQL proxy server.
Branch: master
Clone or download
Latest commit e19ae27 May 2, 2017
Type Name Latest commit message Commit time
Failed to load latest commit information.
cli Merge pull request #2 from tonylambiris/tl/check-if-config-exists May 2, 2017
examples rebuild example May 2, 2017
log rebuild example May 2, 2017
parser fix handleconnection Feb 15, 2017
proxy fix go vet error May 2, 2017
.gitignore Initial commit Feb 8, 2017
.travis.yml no support golang1.5 May 2, 2017
LICENSE Initial commit Feb 8, 2017 Fix minor issues with text Feb 14, 2017
main.go fix some bugs and add example in using Feb 13, 2017
pgproxy.conf rebuild example May 2, 2017
pgproxy.png add logo Feb 10, 2017
version add cli and some tests Feb 9, 2017



Build Status codecov GoDoc Code Health Code Issues Go Report Card License

pgproxy is a postgresql proxy server, through a pipe redirect connection, which allows you to filter the requested sql statement. In the future it will support multi-database backup, adapt to distributed databases and other schemes except the analyze sql statement.

You can do:

  • database read and write separation
  • database services disaster recovery
  • proxy database
  • rewrite sql statement
  • filter dangerous sql
  • monitor database operations
  • sql requests current limit and merge


$ go get -u


As a separate application

Start or shut down the proxy server.

$ pgproxy start/stop

Use pgproxy on the command line

$ pgproxy cli

Ps: You can use it as you would with a native command line.

Be called as a package


package main

import (


func main() {
	// call proxy
	cli.Main("../pgproxy.conf", []string{"pgproxy", "start"})
	// 捕获ctrl-c,平滑退出
	chExit := make(chan os.Signal, 1)
	signal.Notify(chExit, syscall.SIGINT, syscall.SIGTERM, syscall.SIGKILL)
	select {
	case <-chExit:
		fmt.Println("Example EXITING...Bye.")


select/delete/update statement and support any case.

On the support of the sql standard:

The parser is forked from vitess's sqlparser of youtube.

In pgproxy, database tables are like MySQL(5.6,5.7) relational tables, and you can use relational modeling schemes (normalization) to structure your schema. It supports almost all MySQL(5.6,5.7) scalar data types. It also provides full SQL support within a shard, including JOIN statements. Some postgresql operations are not supported,detail see support type and keywords.


Package parser is based on sqlparser