如何使用GORM创建Postgres数据库

如何使用GORM创建Postgres数据库,go,orm,go-gorm,Go,Orm,Go Gorm,这主要集中在为我计划编写的测试套件提供setup()和teardown()方法,该测试套件涉及到数据库的创建 我已经知道了如何使用GORM创建DB。然而,我不确定这是否是最好的方法 package main import ( "fmt" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/postgres" "log" ) func main() { db, err := gorm.O

这主要集中在为我计划编写的测试套件提供setup()和teardown()方法,该测试套件涉及到数据库的创建

我已经知道了如何使用GORM创建DB。然而,我不确定这是否是最好的方法

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
DB,然后创建第二个测试DB,我计划使用它

这是最好的方法吗?或者有没有一种方法可以连接到Postgres,而不需要预先存在DB

注意:我已经找到了人们使用SQL驱动程序仅使用连接字符串
user:password@/
连接到DB的答案。这在我的情况下不起作用


我还尝试了一个没有DB名称的连接字符串,这导致驱动程序试图连接到与用户同名的DB。因为这样的数据库不存在,所以失败。

您的方法似乎足够有效。您还可以在连接数据库之前使用postgres'
createdb
实用程序来创建数据库。例如:

import (
    "log"
    "os/exec"
    "bytes"
)

func createPgDb() {
    cmd := exec.Command("createdb", "-p", "5432", "-h", "127.0.0.1", "-U", "superuser", "-e", "test_db")
    var out bytes.Buffer
    cmd.Stdout = &out
    if err := cmd.Run(); err != nil {
        log.Printf("Error: %v", err)
    }
    log.Printf("Output: %q\n", out.String())
}

本例摘自Go手册中的命令/运行示例

这应该是答案。使用gorm API(包括密码)创建数据库。在发布的问题中建议的答案效果更好:这是一个本机gorm API解决方案,不取决于createdb是否在路径中或是否参与来自服务器的进程分叉。