Skip to content

🐘 PostgreSQL driver in Go using only the standard library

License

Notifications You must be signed in to change notification settings

ViniciusCestarii/postgres-protocol-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

71 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Postgres Protocol Go

This project implements the PostgreSQL wire protocol in Go using only the standard library.

Usage

func main() {
	connStr := "postgres://postgres:123456@localhost:5432/postgres"

	driveConfig := models.DriveConfig{Verbose: true,}

	pgConnection, err := protocol.NewPgConnection(connStr, driveConfig)

	if err != nil {
		fmt.Println(err)
		return
	}

	userToFind := "postgres"

	res, err := pgConnection.Query("SELECT * FROM pg_user WHERE usename = $1;", userToFind)

	if err != nil {
		fmt.Println(err)
		pgConnection.Close()
		return
	}

	fmt.Println("Postgres user: ", res.Rows)

	pgConnection.Close()
}

Features

  • 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
  • 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

Running the Client Implementation example

  1. Clone the repository:

    git clone https://github.com/ViniciusCestarii/postgres-protocol-go.git
  2. Create environment file:

    cp .env.example .env
  3. Set the environment variables in the .env file.

  4. Run the client implementation:

    go run cmd/client.go

Folder Structure

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 documentation

Testing

To run the tests, use the following commands:

go test ./tests/...

Acknowledgements

Official Protocol Documentation

Message Formats

pbkdf2 go implementation

gp-pg

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

🐘 PostgreSQL driver in Go using only the standard library

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages