无法使用Gorm在Postgresql中创建表

时间:2018-11-08 16:46:35

标签: go-gorm

我正在尝试使用以下代码从结构创建表。它最初是通过对凭据进行硬编码来进行测试来工作的。更改为env vars之后,我想测试表和模式是否将按预期创建。

到目前为止,我已经尝试过:

  1. 从数据库中删除表,运行“ go run main.go”。

    • 结果:已成功建立到数据库的连接,但未创建表。
  2. 删除数据库,使用psql“ CREATE DATABASE”命令重新创建数据库,然后运行“ go run main.go”

    • 结果:已成功建立到数据库的连接,但未创建表。
  3. 使用自动迁移,但无法成功创建表。

  4. 调试:当我在调试模式下运行它时,调试控制台显示其已连接,我看不到任何错误的迹象。我已经多年没有编码了,仍然处于学习过程中。

以下是2个文件:main.go和api.go(打开db)

MAIN.GO

import (
    "fmt"
    "log"
    "net/http"
    "time"

    "github.com/gorilla/handlers"
    "gitlab......"
    _ "gitlab....."
)

var err error

func main() {

api := controllers.API{}

// Using env vars from a config file
api.Initialize("user=%s password=%s dbname=%s port=%s sslmode=disable")

// BIND TO A PORT AND PASS OUR ROUTER IN
log.Fatal(http.ListenAndServe(":8000", handlers.CORS()(api.Router)))

if err != nil {
    panic(err.Error())
}

// Models
type Application struct {
    ID        string    `json:"id" gorm:"primary_key"`
    CreatedAt time.Time `json:"-"`
    UpdatedAt time.Time `json:"-"`
    Name      string    `json:"name"`
    Ci        string    `json:"ci"`

// CREATE TABLES AND SCHEMA IF TABLES DO NOT EXIST
if !api.Database.HasTable(&Application{}) {
    api.Database.CreateTable(&Application{})
    }

API.GO

func (api *API) Initialize(opts string) {

// Initialize DB
dbinfo := fmt.Sprintf("user=%s password=%s dbname=%s port=%s sslmode=disable",
    config.DB_USER, config.DB_PASSWORD, config.DB_NAME, config.PORT)
api.Database, err = gorm.Open("postgres", dbinfo)

if err != nil {
    log.Print("failed to connect to the database")
    log.Fatal(err)

}

fmt.Println("Connection established")
log.Printf("Postgres started at %s PORT", config.PORT)
}

我已经创建了数据库,并且能够建立与数据库的连接。只是无法获得创建的表。

想法?

0 个答案:

没有答案