Как вставить данные JSON в PostgreSQL - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть поле 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"
       }]
    }

Я использую один способ создания таблиц:

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 ($1, $2, $3, $4, $5, $6)
            ON CONFLICT (id) DO UPDATE
            SET status = $4
            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 $6 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"}

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

sqlx имеет тип JSONText в github.com / jmoiron / sqlx / types , который будет делать то, что вам нужно.

Пример

0 голосов
/ 27 ноября 2018

Как показывает ошибка, вы пытаетесь связать шестое значение из неподдерживаемого типа данных, handler.Jobs.Вы не сказали нам, что это за тип, но из ошибки ясно, что он не реализует интерфейс driver.Valuer, поэтому он не будет работать, потому что у него нет способа узнать, какчтобы представить это значение в базе данных.

Вам потребуется реализовать этот интерфейс, добавив метод Value() к типу handler.Jobs или использовать другой тип данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...