SSL is not enabled on the server

Trying to communicate with a postgres database with go, preparing the statement like this:

var stmt *sql.Stmt var err error stmt, err = db.Prepare(selectStatement) if err != nil { fmt.Printf("db.Prepare error: %v\n",err) return err } 

Throws the following error:

db.Prepare error: pq: SSL is not enabled on the server 

Any solution ?

I can add more information, if needed.

3

7 Answers

You should establish DB connection without SSL encryption, like that:

db, err := sql.Open("postgres", "user=test password=test dbname=test sslmode=disable") 
2

If your data source name is a url, you will do it like this:

db, err := sql.Open("postgres", "postgres://username:password@localhost/db_name?sslmode=disable") 

sslmode is just added to the db url like a query parameter.

1

Notice, please:

This even occurs, if you have indicated a sslmode=disable, but have empty other param. For example dbname=

For example, connection string:

user=test password=test dbname=sslmode=disable will also issue this error, because dbname is empty.

1

To establish a connection without SSL, try

postgres://username:password@host:5432/database?sslmode=disable 
1

This is how I got it working:

db, err := sql.Open("postgres", "postgres://{user}:{password}@{hostname}:{port}/{database-name}?sslmode=disable") 
0

when you are using sqlx for connection to postgres try this one:

import ( "" _ "" ) func main () { // c is my configuration struct use your own struct instead databseUrl := fmt.Sprintf( "postgres://%s:%s@%s:%s/%s?sslmode=disable", c.Postgres.User, c.Postgres.Password, c.Postgres.Host, c.Postgres.Port, c.Postgres.Name, ) db, _ := sqlx.Open("postgres", databaseUrl) } 

You can use a Struct to pass the values or load it from Env or Config file.

Here is the solution,

package main import ( "database/sql" "fmt" _ "" "log" ) type Config struct { DBDriver string DBSource string ServerAddress string } func main() { db, err := openDB() if err != nil { log.Printf("Databse Connection Error", err) } err = db.Ping() fmt.Println("Database Conn opend") if err != nil { log.Printf("Error while Pinging Database") } } func openDB() (*sql.DB, error) { // Here you can populate the DB params from Env or Config file or use marshaling to fill in the values dbParams := Config{ DBDriver: "postgres", DBSource: "postgres://usename:password@localhost:5432/DatabaseName?sslmode=disable", ServerAddress: "", } db, err := sql.Open(dbParams.DBDriver, dbParams.DBSource) if err != nil { fmt.Println("error", err) return nil, err } return db, nil } 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like