如何将 JSON 数据插入 PostgreSQL
How to insert JSON data to PostgreSQL
我有像 blow 这样的 json 字段,我想将其存储在数据库中
{
id: 1
name: "test entity 1"
description: "a test entity for some guy's blog"
status: "passed"
web_url: "http://localhost:3000"
jobs: [{
id: "1"
name: "test1"
status: "passed"
},
{
id: "2"
name: "test2"
status: "passed"
},
{
id: "3"
name: "test3"
status: "failed"
}]
}
我继续使用一种方法来创建 table 使用:
CREATE TABLE test3 (id INT PRIMARY KEY, name VARCHAR, description VARCHAR, status VARCHAR, web_url VARCHAR, jobs JSON[]);
插入数据使用:
sqlStatement := `
INSERT INTO jobs (id, name, description, status, web_url, jobs)
VALUES (, , , , , )
ON CONFLICT (id) DO UPDATE
SET status =
RETURNING id`
id := 0
err = database.Db.QueryRow(sqlStatement, y[i].ID, y[i].Name, y[i].Description, y[i].Status, y[i].WebURL, jobsdata).Scan(&id)
if err != nil {
panic(err)
}
但是不行,需要帮助!!
出现错误:
panic: sql: converting argument type: unsupported type handler.Jobs, a slice of struct
我想要的:
postgres=# SELECT * FROM test3;
id | name | description | status | web_url | jobs
------+------------------------------------------+--------+---------+----------------------------------------------------------+----------------------------------------------------------
1 | test entity 1 | a test entity for some guy's blog | passed | https://localhost:3000 | {id: "1",name: "test1", status: "passed"},{id: "2",name: "test2", status: "passed"},{id: "3",name: "test3", status: "failed"}
如错误所示,您正在尝试从不受支持的数据类型 handler.Jobs
绑定第六个值。你还没有告诉我们这个类型是什么,但是从错误中可以看出它没有实现 driver.Valuer
接口,所以它不会工作,因为它无法知道如何表示那个值到数据库。
您需要通过向 handler.Jobs
类型添加 Value()
方法或使用不同的数据类型来实现该接口。
sqlx 有一个类型 JSONText in github.com/jmoiron/sqlx/types 可以满足您的需要。
我有像 blow 这样的 json 字段,我想将其存储在数据库中
{
id: 1
name: "test entity 1"
description: "a test entity for some guy's blog"
status: "passed"
web_url: "http://localhost:3000"
jobs: [{
id: "1"
name: "test1"
status: "passed"
},
{
id: "2"
name: "test2"
status: "passed"
},
{
id: "3"
name: "test3"
status: "failed"
}]
}
我继续使用一种方法来创建 table 使用:
CREATE TABLE test3 (id INT PRIMARY KEY, name VARCHAR, description VARCHAR, status VARCHAR, web_url VARCHAR, jobs JSON[]);
插入数据使用:
sqlStatement := `
INSERT INTO jobs (id, name, description, status, web_url, jobs)
VALUES (, , , , , )
ON CONFLICT (id) DO UPDATE
SET status =
RETURNING id`
id := 0
err = database.Db.QueryRow(sqlStatement, y[i].ID, y[i].Name, y[i].Description, y[i].Status, y[i].WebURL, jobsdata).Scan(&id)
if err != nil {
panic(err)
}
但是不行,需要帮助!!
出现错误:
panic: sql: converting argument type: unsupported type handler.Jobs, a slice of struct
我想要的:
postgres=# SELECT * FROM test3;
id | name | description | status | web_url | jobs
------+------------------------------------------+--------+---------+----------------------------------------------------------+----------------------------------------------------------
1 | test entity 1 | a test entity for some guy's blog | passed | https://localhost:3000 | {id: "1",name: "test1", status: "passed"},{id: "2",name: "test2", status: "passed"},{id: "3",name: "test3", status: "failed"}
如错误所示,您正在尝试从不受支持的数据类型 handler.Jobs
绑定第六个值。你还没有告诉我们这个类型是什么,但是从错误中可以看出它没有实现 driver.Valuer
接口,所以它不会工作,因为它无法知道如何表示那个值到数据库。
您需要通过向 handler.Jobs
类型添加 Value()
方法或使用不同的数据类型来实现该接口。
sqlx 有一个类型 JSONText in github.com/jmoiron/sqlx/types 可以满足您的需要。