Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用Go和pq连接到postgresql_Postgresql_Go_Pq - Fatal编程技术网

无法使用Go和pq连接到postgresql

无法使用Go和pq连接到postgresql,postgresql,go,pq,Postgresql,Go,Pq,我正在尝试将Go应用程序与postgresql连接 应用程序导入postgresql驱动程序: "crypto/tls" "database/sql" "fmt" "log" "os" "os/signal" ... _ "github.com/go-sql-driver/mysql" _ "github.com/lib/pq" _ &

我正在尝试将Go应用程序与postgresql连接

应用程序导入postgresql驱动程序:

"crypto/tls"
"database/sql"
"fmt"
"log"
"os"
"os/signal"
 ...
_ "github.com/go-sql-driver/mysql"
_ "github.com/lib/pq"
_ "github.com/mattn/go-sqlite3"
并使用like it连接到数据库:

driver, cnxn := dbFromURI(dbURI)
db, err := sql.Open(driver, cnxn)
if err != nil {
    panic(err)
}
dbFromUri方法只是分割信息

func dbFromURI(uri string) (string, string) {
    parts := strings.Split(uri, "://")
    return parts[0], parts[1]
}
当我运行命令:
psqlp时,我的URI在本地工作ostgresql://user:user@172.20.0.1:5432/lcp

但我走了,我得到了

./lcpserver
2021/03/07 02:00:42 Reading config /root/lcp-server-install/lcp-home/config/config.yaml
panic: pq: SSL is not enabled on the server
我尝试了这个URI,但没有成功:
psqlpostgresql://user:user@172.20.0.1:5432/lcp?sslmode=禁用

你知道我为什么不能联系吗? 我尝试了我的aws rds postgres数据库,得到了相同的结果。谢谢你的帮助

服务器的完整代码

如果我成功连接,我会更改输入错误和演示。但在lcp服务器中,我遇到了同样的问题

postgres://user:user@172.20.0.1:5432/lcp?sslmode=disable
编辑2:

该错误是由于脚本尝试使用prepare命令造成的。我更新了最小示例,但它也失败了

package main

import (
    "database/sql"
    "fmt"
    "strings"

    _ "github.com/lib/pq"
)

func dbFromURI(uri string) (string, string) {
    parts := strings.Split(uri, "://")
    return parts[0], parts[1]
}

func main() {
    driver, cnxn := dbFromURI("postgres://user:user@172.20.0.1:5432/lcp?sslmode=disable")

    fmt.Println("The driver " + driver)
    fmt.Println("The cnxn " + cnxn)

    db, err := sql.Open(driver, cnxn)

     _, err = db.Prepare("SELECT id,encryption_key,location,length,sha256,type FROM content WHERE id = ? LIMIT 1")
    if err != nil {
         fmt.Println("Prepare failed")
         fmt.Println(err)

    }

   if err == nil {
        fmt.Println("Successfully connected")
    } else {
        panic(err)
    }
}
我得到: 准备失败

pq: SSL is not enabled on the server
2021/03/07 17:20:13 This panic 3
panic: pq: SSL is not enabled on the server

第一个问题是连接字符串中的输入错误:
postgresql://user:user@172.20.0.1:5432/lcp?sslmode=禁用
。在Go代码中,它应该是
postgres://user:user@172.20.0.1:5432/lcp?sslmode=禁用

我们还需要将完整连接字符串作为第二个参数传递给
sql.Open
。现在,
dbFromURI
函数返回
用户:user@172.20.0.1:5432/lcp?sslmode=disable
,但我们需要
postgres://user:user@172.20.0.1:5432/lcp?sslmode=禁用,因为要禁用

修复此问题后,我能够根据您的代码使用最小的postgres客户端建立连接

要亲自尝试此操作,请使用以下命令启动服务器:

docker run--rm-p 5432:5432-e POSTGRES\u PASSWORD=some\u PASSWORD POSTGRES
并尝试使用以下客户端代码进行连接:

主程序包
进口(
“数据库/sql”
“fmt”
_“github.com/lib/pq”
)
func main(){
cnxn:=”postgres://postgres:some_password@127.0.0.1:5432/lcp?sslmode=禁用“
_,err:=sql.Open(“postgres”,cnxn)
如果错误!=零{
恐慌(错误)
}
_,err=db.Prepare(“选择id,加密密钥,位置,长度,sha256,从内容中键入id=?限制1”)
如果错误!=零{
fmt.Println(“准备失败”)
恐慌(错误)
}
}

谢谢您的回复。我纠正了打字错误。当运行您的小测试功能时,我成功地连接了
,但当我运行服务器时,我仍然收到相同的错误。我添加了打印,我有
2021/03/07 16:02:05驾驶员博士后2021/03/07 16:02:05 cnxn用户:user@172.20.0.1:5432/lcp?sslmode=disable panic:pq:SSL未在服务器上启用
我终于找到了错误的原因。我更新了你的最小示例,但它也失败了。@TeddyKossoko那么问题出在哪里?“Prepare”函数是否得到无效参数?非常感谢,它可以工作。再次感谢。@TeddyKossoko谢谢,我今天将为他们创建一个公关。