Database 使用GoLang在Postgres中创建带有json类型字段的表

Database 使用GoLang在Postgres中创建带有json类型字段的表,database,postgresql,go,beego,Database,Postgresql,Go,Beego,我在后端使用GoLang,并将PostgreSQL用作数据库。我是使用Go进行PostgreSQL数据库连接的新手。我正在使用它作为后端。我想使用Golang包和创建一个带有JSON类型字段之一的表。我就是这么做的 这是我的创建表查询 createtable:= `CREATE TABLE apply_leave1 ( leaveid serial PRIMARY KEY NOT NULL , empid varchar(10) N

我在后端使用GoLang,并将PostgreSQL用作数据库。我是使用Go进行PostgreSQL数据库连接的新手。我正在使用它作为后端。我想使用Golang包和创建一个带有JSON类型字段之一的表。我就是这么做的

这是我的创建表查询

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()
    }

}
这给我带来了以下错误

处理程序崩溃,错误为运行时错误:内存地址无效或零指针取消引用


但是,当我使用query从表中选择某些内容时,表创建查询或其他执行的sql代码没有问题。谢谢你的帮助。谢谢

我认为您的问题在于用于创建表的sql无效,应该是:

CREATE TABLE apply\u leave1(
LEVEID串行主键不为空,
empid varchar(10)不为空,
leavedays双精度非空默认值0,
mdays双精度非空默认值0,
leavetype varchar(20)非空默认值“”,
daytype文本不为空默认值“”,
时区不为空的leavefrom时间戳,
时区不为空的leaveto时间戳,
时区不为空的applieddate时间戳,
leavestatus varchar(15)不为空默认值“”,
结果带时区的日期时间戳,
certificatestatus布尔值不为NULL默认值为FALSE
证书(空)
您缺少daytype列的
默认值
。此外,您没有正确捕获错误,因为func leave()可以在发送响应之前完全执行。当您发现错误时,可以使用
返回

db,err:=sql.Open(“postgres”,conn)
如果出错!=零{
fmt.Println(err.Error())
e、 数据[“json”]=err.Error()
e、 ServeJSON()
返回
}

另外,您正在创建一个连接,而不是在函数末尾关闭它。

请简化您的代码片段,或提供一行具体的代码,以引发错误。我们无法构建并调试您的所有应用程序。还有一件更重要的事情——您的错误与sql或您使用的任何LIB无关。这只是一个错误的指针操作。对不起。初学者对堆栈溢出。谢谢你的建议–I159。编辑代码以使其精确。我可以知道问题出在哪一个指针上吗?谢谢。如果可以,请阅读有关stackoverflow的教程“如何提问”。我将尽力帮助您。请指定因上述错误而崩溃的行。