grpc-postgres

An example repo of how I like to use postgres with gRPC

  +------------------------+
  |   ____  ______  ___    |
  |  /    )/      \/   \   |
  | (     / __    _\    )  |
  |  \    (/ o)  ( o)   )  |
  |   \_  (_  )   \ )  /   |
  |     \  /\_/    \)_/    |
  |      \/  //|  |\\      |
  |          v |  | v      |
  |            \__/        |
  |                        |
  +------------------------+

Source: Charles Clavadetscher

Usage

First, start a postgres container:

$ docker run --rm -d --name postgres -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=mypass -e POSTGRES_DB=postgres postgres:13
d1a2eb0fb44da9c3488184f5296da28d1c7f88bd32bd4ec81fc254f006886b03

Start the server:

$ POSTGRES_URL=postgresql://postgres:mypass@localhost:5432/postgres?sslmode=disable go run main.go
...
{"level":"info","msg":"Serving gRPC on [::]:8080"}
{"level":"info","msg":"Serving Web UI on http://0.0.0.0:8080"}

Navigate to http://0.0.0.0:8080 to see the auto-generated web UI for the service, courtesy of gRPC reflection and github.com/fullstorydev/grpcui!

gRPCUI

Usage with Cockroach DB

The application also supports talking to a Cockroach DB instance, by using the cockroachdb scheme:

cockroachdb://user:password@host:5432/defaultdb

The scheme is used when performing the database migrations, as the behaviour changes based on the database.

Developing

Requirements

Making changes

After making any changes to the proto file or the migrations, make sure to regenerate the files:

$ make generate

If you want to change the schema of the database, add another migration file. Use the same naming format, with the new file names starting 2_. Make sure to run make generate and increment the migration version in users/helpers.go.