This project implements the PostgreSQL wire protocol in Go using only the standard library.
funcmain(){connStr:="postgres://postgres:123456@localhost:5432/postgres"driveConfig:= models.DriveConfig{Verbose: true,} pgConnection, err:=protocol.NewPgConnection(connStr, driveConfig) iferr!=nil{fmt.Println(err) return } userToFind:="postgres"res, err:=pgConnection.Query("SELECT * FROM pg_user WHERE usename = $1;", userToFind) iferr!=nil{fmt.Println(err) pgConnection.Close() return } fmt.Println("Postgres user: ", res.Rows) pgConnection.Close() }- Flexible Connection Handling
- Supports both URL-style connection strings (postgres://user:pass@host:port/db)
- Supports key-value connection strings (
host=localhost port=5432)
- SSL/TLS Support
- Automatic SSL/TLS negotiation when
sslmode=require - Secure encrypted connections
- Automatic SSL/TLS negotiation when
- Query Interface
- Simple query protocol support
- Extended query protocol with parameter binding
- Support for parameterized queries using $1, $2 etc.
- Connection Configuration
- Configurable verbose mode for debugging
- Custom drive configuration options via models.DriveConfig
- Authentication
- SCRAM-SHA-256
- md5
- clear text
- Clean Resource Management
- Proper connection termination
Clone the repository:
git clone https://github.com/ViniciusCestarii/postgres-protocol-go.git
Create environment file:
cp .env.example .env
Set the environment variables in the
.envfile.Run the client implementation:
go run cmd/client.go
postgres-protocol-go/ │── cmd/ │ ├── client.go # Client implementation example using this driver │── internal/ │ ├── pool/ # Buff writer │ ├── protocol/ # PostgreSQL wire protocol handling │── pkg/ │ ├── utils/ # Shared utilities (logging, errors, helpers) │ ├── models/ # Data structures for queries, results, etc. │── tests/ # Integration and unit tests │── go.mod # Go module file │── README.md # Project documentationTo run the tests, use the following commands:
go test ./tests/...Official Protocol Documentation
This project is licensed under the MIT License - see the LICENSE file for details.