如何连接到Google CloudSQL PostgresSQL

时间:2019-03-14 16:46:42

标签: postgresql go google-cloud-platform google-cloud-sql go-gorm

我尝试使用Gorm golang连接到Google CloudSQL PostgresSQL,但似乎无法正常工作。

这是代码

func InitDB() *gorm.DB {

    psqlInfo := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=disable", os.Getenv("DB_HOST"), os.Getenv("DB_PORT"), os.Getenv("DB_USER"), os.Getenv("DB_PASSWORD"), os.Getenv("DB_NAME"))
    db, err := gorm.Open("postgres", psqlInfo)
    if err != nil {
        fmt.Println("Failed to connect to the Database")
    }
    fmt.Println("Connected to the Database")
    DB = db
    return DB
}

如果im使用localhost配置,则一切正常。查看我的.env文件以获取cloudSQL配置

DB_HOST=trader-234509:us-central1:testv1
DB_PORT=5432
DB_USER=username
DB_NAME=testv1
DB_PASSWORD=

错误在说

  

拨号tcp:查找交易者-234509:us-central1:testv1:没有这样的主机       紧急:运行时错误:无效的内存地址或nil指针取消引用       [signal SIGSEGV:细分违规代码= 0x1 addr = 0x40 pc = 0x164681d]

我的本​​地配置(该配置很好)

DB_HOST=localhost
DB_PORT=5432
DB_USER=username
DB_NAME=test
DB_PASSWORD=

我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

Cloud SQL尚不支持直接连接到第三方应用程序的实例名称,有关详细信息:https://cloud.google.com/sql/docs/mysql/connect-external-app

根据我的经验,有两种解决方案:

  1. 按照上述说明,您可以按照以下步骤设置Cloud Proxy,连接流程为:Golang应用-> Cloud Proxy-> Cloud SQL 这种方法很灵活,您可以使用防火墙控制连接。
    但是您必须花费额外的$$来维护服务器和该云代理实例,我也听说云代理可能存在一些性能问题,但到目前为止我还没有确切的证据

  2. 将私有IP分配给Cloud SQL实例,请参考https://cloud.google.com/sql/docs/mysql/private-ip,以便您的应用程序可以使用该IP直接访问数据库。
    权衡显然是应用程序必须位于项目的同一网络中,但这是一种更为方便的方法,尤其是。您所有的应用程序都托管在同一网络中

我没有尝试使用公共IP访问方法,因为如果需要远程网络连接,云代理正是我所需要的

简而言之,您需要使用选项2在VM或其他Google托管服务中部署代码,或设置云代理以支持选项1的本地调试

希望有帮助