From b854a8bdf1dc2f6e8db4247b6ca6e01d913b3178 Mon Sep 17 00:00:00 2001 From: Marie Date: Tue, 25 Jul 2023 18:41:56 +0200 Subject: [PATCH] session: fix database connections with UNIX sockets (#73) Co-authored-by: Joe Chen --- cmd/pgrokd/main.go | 28 +++++++++++++++++++++------- internal/database/db.go | 2 +- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/cmd/pgrokd/main.go b/cmd/pgrokd/main.go index c494330..1f3dfad 100644 --- a/cmd/pgrokd/main.go +++ b/cmd/pgrokd/main.go @@ -106,17 +106,31 @@ func startWebServer(config *conf.Config, db *database.DB) { f.Use(flamego.Logger()) f.Use(flamego.Recovery()) f.Use(flamego.Renderer()) + + var postgresDSN string + // Check if the host is a UNIX domain socket + if strings.HasPrefix(config.Database.Host, "/") { + postgresDSN = fmt.Sprintf("postgres://%s:%s@localhost:%d/%s?host=%s", + config.Database.User, + config.Database.Password, + config.Database.Port, + config.Database.Database, + config.Database.Host, + ) + } else { + postgresDSN = fmt.Sprintf("postgres://%s:%s@%s:%d/%s", + config.Database.User, + config.Database.Password, + config.Database.Host, + config.Database.Port, + config.Database.Database, + ) + } f.Use(session.Sessioner( session.Options{ Initer: postgres.Initer(), Config: postgres.Config{ - DSN: fmt.Sprintf("postgres://%s:%s@%s:%d/%s", - config.Database.User, - config.Database.Password, - config.Database.Host, - config.Database.Port, - config.Database.Database, - ), + DSN: postgresDSN, Table: "sessions", InitTable: true, }, diff --git a/internal/database/db.go b/internal/database/db.go index 53df0fd..8163fa7 100644 --- a/internal/database/db.go +++ b/internal/database/db.go @@ -52,7 +52,7 @@ func New(logWriter io.Writer, config *conf.Database) (*DB, error) { ) dsn := fmt.Sprintf( - "user='%s' password='%s' host='%s' port='%d' dbname='%s' search_path='public' application_name='pgrokd'", + "user='%s' password='%s' host='%s' port='%d' dbname='%s' search_path='public' application_name='pgrokd' client_encoding=UTF8", config.User, config.Password, config.Host, config.Port, config.Database, ) db, err := gorm.Open(