From 81fe01b34fec705ec86a71e44c81c72c0443d78b Mon Sep 17 00:00:00 2001 From: Matthew Wraith Date: Fri, 17 Dec 2021 16:44:14 -0800 Subject: [PATCH] Postgres defaults to unix socket (#230) --- pkg/driver/postgres/postgres.go | 10 +++++++++- pkg/driver/postgres/postgres_test.go | 20 ++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/pkg/driver/postgres/postgres.go b/pkg/driver/postgres/postgres.go index 1917cb1..60b1333 100644 --- a/pkg/driver/postgres/postgres.go +++ b/pkg/driver/postgres/postgres.go @@ -6,6 +6,7 @@ import ( "fmt" "io" "net/url" + "runtime" "strings" "github.com/amacneil/dbmate/pkg/dbmate" @@ -48,7 +49,14 @@ func connectionString(u *url.URL) string { // default hostname if hostname == "" { - hostname = "localhost" + switch runtime.GOOS { + case "linux": + query.Set("host", "/var/run/postgresql") + case "darwin", "freebsd", "dragonfly", "openbsd", "netbsd": + query.Set("host", "/tmp") + default: + hostname = "localhost" + } } // host param overrides url hostname diff --git a/pkg/driver/postgres/postgres_test.go b/pkg/driver/postgres/postgres_test.go index f3f8793..1a49ce0 100644 --- a/pkg/driver/postgres/postgres_test.go +++ b/pkg/driver/postgres/postgres_test.go @@ -4,6 +4,7 @@ import ( "database/sql" "net/url" "os" + "runtime" "testing" "github.com/amacneil/dbmate/pkg/dbmate" @@ -50,13 +51,24 @@ func TestGetDriver(t *testing.T) { require.Equal(t, "schema_migrations", drv.migrationsTableName) } +func defaultConnString() string { + switch runtime.GOOS { + case "linux": + return "postgres://:5432/foo?host=%2Fvar%2Frun%2Fpostgresql" + case "darwin", "freebsd", "dragonfly", "openbsd", "netbsd": + return "postgres://:5432/foo?host=%2Ftmp" + default: + return "postgres://localhost:5432/foo" + } +} + func TestConnectionString(t *testing.T) { cases := []struct { input string expected string }{ // defaults - {"postgres:///foo", "postgres://localhost:5432/foo"}, + {"postgres:///foo", defaultConnString()}, // support custom url params {"postgres://bob:secret@myhost:1234/foo?bar=baz", "postgres://bob:secret@myhost:1234/foo?bar=baz"}, // support `host` and `port` via url params @@ -85,11 +97,11 @@ func TestConnectionArgsForDump(t *testing.T) { expected []string }{ // defaults - {"postgres:///foo", []string{"postgres://localhost:5432/foo"}}, + {"postgres:///foo", []string{defaultConnString()}}, // support single schema - {"postgres:///foo?search_path=foo", []string{"--schema", "foo", "postgres://localhost:5432/foo"}}, + {"postgres:///foo?search_path=foo", []string{"--schema", "foo", defaultConnString()}}, // support multiple schemas - {"postgres:///foo?search_path=foo,public", []string{"--schema", "foo", "--schema", "public", "postgres://localhost:5432/foo"}}, + {"postgres:///foo?search_path=foo,public", []string{"--schema", "foo", "--schema", "public", defaultConnString()}}, } for _, c := range cases {