使用交易时Golang postgres司机恐慌

时间:2016-03-23 22:27:21

标签: postgresql go

所以......几年前,这显然是一个问题,至少有一些错误,我强烈认为是同一个问题。在一个方法中,我有两个事务,一个接一个(所以它们不是并发的,它们是顺序的),第二个事务总是失败。

这大致是代码:

import (
        "database/sql"
        _ "github.com/lib/pq"
)
var db *sql.DB

func InitStorage() {
        var err error
        db, err = sql.Open(os.Getenv("DB_CONNECTION_DRIVER"), os.Getenv("DB_CONNECTION_STRING"))
        if err != nil {
                glog.Error(err)
        }   
        if db == nil {
                glog.Fatal(db)
        }   
        tx, err := db.Begin()
   if err != nil {
            glog.Error(err)
        } else {
            glog.Info("ERROR ON BEGIN IS NiLL!!!")
        }   

        _, err = tx.Query(`INSERT INTO urls(url_hash, url) VALUES($1, $2)`, `asdadsaaa`, `1313`)
        if err != nil {
                glog.Error(err)
                tx.Rollback()
        }   
        tx.Commit()
        glog.Info("SECOND TRANSACTION!!!")
        tx1, err := db.Begin()
   if err != nil {
            glog.Error("SECOND TRANSACTION HAS ERR: ", err)
        } else {
            glog.Info("ERROR ON BEGIN IS NiLL!!!")
        }   
        _, err = tx1.Query(`INSERT INTO urls(url_hash, url) VALUES($1, $2)`, `asdadsaaa`, `1313`)
        if err != nil {   
                glog.Error(err)
                tx1.Rollback()
        }   
        tx1.Commit()
}

这总是输出(我已经削减了结果,因为它没有带来有用的信息):

I0324 00:24:26.192256   11580 storage_rdb.go:33] ERROR ON BEGIN IS NiLL!!!
I0324 00:24:26.195134   11580 storage_rdb.go:42] SECOND TRANSACTION!!!
E0324 00:24:26.195197   11580 storage_rdb.go:45] SECOND TRANSACTION HAS ERRpq: unexpected transaction status idle in transaction
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x20 pc=0x5460cb]

goroutine 1 [running]:
panic(0x7c41c0, 0xc820010150)
        /usr/local/go/src/runtime/panic.go:464 +0x3e6
database/sql.(*Tx).Query(0x0, 0x8b2e00, 0x2e, 0xc82011fd50, 0x2, 0x2, 0xc82001a540, 0x0, 0x0)
        /usr/local/go/src/database/sql/sql.go:1404 +0x3b
main.InitStorage()

我认为我做错了(因为这个错误发生在2013年),但我无法弄清楚它是什么。请帮忙。

0 个答案:

没有答案