gpt4 book ai didi

go - 如何使用 GORM 创建 Postgres 数据库

转载 作者:IT王子 更新时间:2023-10-29 01:21:41 25 4
gpt4 key购买 nike

这主要侧重于为我计划编写的涉及创建数据库的测试套件设置 setup() 和 teardown() 方法。

我已经弄清楚如何使用 GORM 创建数据库。但是,我不确定这是否是最佳方法。

package main

import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/postgres"
"log"
)

func main() {
db, err := gorm.Open("postgres", "host=127.0.0.1 port=5432 user=superuser dbname=postgres password='' sslmode=disable")
capture(err)
db = db.Exec("CREATE DATABASE test_db;")
if db.Error != nil {
fmt.Println("Unable to create DB test_db, attempting to connect assuming it exists...")
db, err = gorm.Open("postgres", "host=127.0.0.1 port=5432 user=superuser dbname=test_db password='' sslmode=disable")
if err != nil {
fmt.Println("Unable to connect to test_db")
capture(err)
}
}
defer db.Close()
}

func capture(err error) {
if err != nil {
log.Fatalf("%s", err)
}
}

我首先连接到默认的 postgres 数据库,然后创建我计划使用的第二个测试数据库。

这是最好的方法吗?或者有没有一种方法可以在没有预先存在的数据库的情况下连接到 Postgres。

注意:我已经查找了人们使用 SQL 驱动程序仅使用连接字符串 user:password@/ 连接到 DB 的答案。这对我来说没有用。(比如 here )

我还尝试过没有数据库名称的连接字符串,这导致驱动程序尝试连接到与用户同名的数据库。由于不存在这样的数据库,因此失败。

最佳答案

我采用的方法是避免先创建数据库并期望出现错误,然后将其用作指示数据库已经存在。我发现下面的 IMO 更优雅。这是使用 GORM 顺便说一句

connStr := fmt.Sprintf("user=%s password=%s host=%s port=%s dbname=%s sslmode=disable",
"user",
"password",
"host",
"port",
"postgres")

// connect to the postgres db just to be able to run the create db statement
db, err := gorm.Open(postgres.Open(connStr), &gorm.Config{
Logger: logger.Default.LogMode(logger.Silent)})
if err != nil {
return err
}

// check if db exists
stmt := fmt.Sprintf("SELECT * FROM pg_database WHERE datname = '%s';", client.Name)
rs := db.Raw(stmt)
if rs.Error != nil {
return rs.Error
}

// if not create it
var rec = make(map[string]interface{})
if rs.Find(rec); len(rec) == 0 {
stmt := fmt.Sprintf("CREATE DATABASE %s;", dbName)
if rs := db.Exec(stmt); rs.Error != nil {
return rs.Error
}

// close db connection
sql, err := db.DB()
defer func() {
_ = sql.Close()
}()
if err != nil {
return err
}
}

关于go - 如何使用 GORM 创建 Postgres 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54048774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com