diff --git a/storage/sql/config.go b/storage/sql/config.go
index 3be63b304a843821b03a459621b8e82af26fa957..701df92612fbc2f01a0846b3d4cc0a0c451dd298 100644
--- a/storage/sql/config.go
+++ b/storage/sql/config.go
@@ -3,6 +3,7 @@ package sql
 import (
 	"database/sql"
 	"fmt"
+	"net"
 	"regexp"
 	"strconv"
 	"strings"
@@ -116,12 +117,24 @@ func (p *Postgres) createDataSourceName() string {
 
 	addParam("connect_timeout", strconv.Itoa(p.ConnectionTimeout))
 
-	if p.Host != "" {
-		addParam("host", dataSourceStr(p.Host))
+	// detect host:port for backwards-compatibility
+	host, port, err := net.SplitHostPort(p.Host)
+	if err != nil {
+		// not host:port, probably unix socket or bare address
+
+		host = p.Host
+
+		if p.Port != 0 {
+			port = strconv.Itoa(int(p.Port))
+		}
+	}
+
+	if host != "" {
+		addParam("host", dataSourceStr(host))
 	}
 
-	if p.Port != 0 {
-		addParam("port", strconv.Itoa(int(p.Port)))
+	if port != "" {
+		addParam("port", port)
 	}
 
 	if p.User != "" {
diff --git a/storage/sql/config_test.go b/storage/sql/config_test.go
index 972fe973c21522a1e642673bd30183b15a357c51..d823e09950da1e1f4c1687310cc1168d92c89a38 100644
--- a/storage/sql/config_test.go
+++ b/storage/sql/config_test.go
@@ -119,6 +119,13 @@ func TestCreateDataSourceName(t *testing.T) {
 			},
 			expected: "connect_timeout=0 host='coreos.com' sslmode='disable'",
 		},
+		{
+			description: "with tcp host:port",
+			input: &Postgres{
+				Host: "coreos.com:6543",
+			},
+			expected: "connect_timeout=0 host='coreos.com' port=6543 sslmode='verify-full'",
+		},
 		{
 			description: "with tcp host and port",
 			input: &Postgres{