如何连接到Google CloudSQL PostGressQL



我尝试使用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
}

如果我使用localhost confim confim,一切正常。请参阅我的.env文件以获取Cloudsql Config

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

错误在说

拨号TCP:Lookup Trader-234509:us-Central1:testv1:没有这样的主机 恐慌:运行时错误:无效的内存地址或零指针删除 [信号sigsegv:分割违规代码= 0x1 addr = 0x40 pc = 0x164681d]

我的本地配置(这可以正常工作)

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

我做错了什么?

这是我从附录连接的方式:

import (
  _ "github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/dialers/postgres"
  "fmt"
  "gorm.io/driver/postgres"
  "gorm.io/gorm"
)
func New() (*gorm.DB, error) {
  user := "theuser"
  password := "apassword"
  dbHost := "my-project:the-region:my-db-instance-name"
  databaseName := "mydbname"
  connString := fmt.Sprintf("host=%s user=%s dbname=%s sslmode=disable password=%s", dbHost, user, databaseName, password)
  
  return gorm.Open(postgres.New(postgres.Config{
    DriverName: "cloudsqlpostgres",
    DSN: connString,
  }))
}

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

根据我的经验,有2个解决方案:

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

  2. 将私有IP分配到云SQL实例,请参阅https://cloud.google.com/sql/docs/mysql/mysql/private-ip,以便您可以直接使用此IP直接访问DB。
    折衷很明显,该应用程序必须位于项目的同一网络中,但这是一种更方便的方法,尤其是。您的所有应用程序均托管在同一网络

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

简而

希望它能有所帮助

相关内容

  • 没有找到相关文章

最新更新