我在后端使用 GoLang,并使用 PostgreSQL 作为数据库。我是 PostgreSQL 数据库与 Go 的新手。我正在使用 Beego作为后端。我想使用 Golang 创建一个包含 JSON 类型字段之一的表 database/sql包和lib/pq .那就是我所做的
这是我的建表查询
createtable:= `CREATE TABLE apply_leave1 (
leaveid serial PRIMARY KEY NOT NULL ,
empid varchar(10) NOT NULL ,
leavedays double precision NOT NULL DEFAULT 0 ,
mdays double precision NOT NULL DEFAULT 0 ,
leavetype varchar(20) NOT NULL DEFAULT '' ,
daytype text NOT NULL '',
leavefrom timestamp with time zone NOT NULL,
leaveto timestamp with time zone NOT NULL,
applieddate timestamp with time zone NOT NULL,
leavestatus varchar(15) NOT NULL DEFAULT '' ,
resultdate timestamp with time zone,
certificatestatus bool NOT NULL DEFAULT FALSE
certificate json NULL)`
conn := fmt.Sprintf(
"user=%s password=%s dbname=%s sslmode=disable",
"postgres",
"root",
"employee")
log.Println("Creating a new connection: %v", conn)
db, err := sql.Open("postgres", conn)
stmt, err1 := db.Prepare(createtable)
defer stmt.Close()
_, err = stmt.Exec()
if err != nil {
fmt.Println(err.Error()
}
}
这会抛出以下错误
Handler crashed with error runtime error: invalid memory address or nil pointer dereference
但是当我使用查询从表中选择内容时,表创建查询或其他执行的 sql 代码没有问题。我感谢任何帮助。谢谢!
最佳答案
我认为你的问题是建表的sql无效,应该是:
CREATE TABLE apply_leave1 (
leaveid serial PRIMARY KEY NOT NULL ,
empid varchar(10) NOT NULL ,
leavedays double precision NOT NULL DEFAULT 0 ,
mdays double precision NOT NULL DEFAULT 0 ,
leavetype varchar(20) NOT NULL DEFAULT '' ,
daytype text NOT NULL DEFAULT '',
leavefrom timestamp with time zone NOT NULL,
leaveto timestamp with time zone NOT NULL,
applieddate timestamp with time zone NOT NULL,
leavestatus varchar(15) NOT NULL DEFAULT '' ,
resultdate timestamp with time zone,
certificatestatus bool NOT NULL DEFAULT FALSE
certificate json NULL)
您错过了 daytype 列的 DEFAULT
。此外,您没有正确捕获错误,因为 func leave() 可以在发送响应之前完全执行。发现错误时可以使用 return
。
db, err := sql.Open("postgres", conn)
if err != nil {
fmt.Println(err.Error())
e.Data["json"] = err.Error()
e.ServeJSON()
return
}
此外,您正在创建一个连接,而不是在函数结束时关闭它。
关于database - 使用 GoLang 在 Postgres 中使用 json 类型字段创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40839370/