Ответы пользователя по тегу PostgreSQL
  • Golang PGX как добавлять значения в jsonb?

    @Wirusnyy-chel
    Когда вы указываете
    '{$1}'
    постгрес воспринимает это как просто строку, а не как параметр для вставки.


    Пробовал явно указывать тип $1
    query := `
    UPDATE type
    SET characteristics = jsonb_insert(
    characteristics, '{$1}'::text, '{"type": "$2", "measure": "$3"}'::jsonb
    )
    WHERE id=$4`

    Так тоже ошибка : function jsonb_insert(jsonb, text, jsonb) does not exist

    У функции jsonb_insert сигнатура
    jsonb_insert(target jsonb, path text[], new_value jsonb [, insert_after boolean])
    Поэтому строка `'{$1}'::text'`, должна быть `'{$1}'::text[]'`. (Но и это не совсем поможет)

    Можно преобразовать это следующим образом:
    query := `
        UPDATE type
        SET characteristics = jsonb_insert(
            characteristics, array[$1::text], 
           jsonb_build_object('type', $2, 'measure', '$3')
        )
        WHERE id=$4`
    
      tag, err := conn.Exec(ctx, query,
        c.Name,      // string
        c.Type,      // string
        c.Measure,   // string
        c.ID,        // uint64
      )


    Или позволить pxg самому собрать jsonb:

    query := `
        UPDATE type
        SET characteristics = jsonb_insert(
            characteristics, array[$1::text], $2
        )
        WHERE id=$3`
    
      tag, err := conn.Exec(ctx, query,
        c.Name,      // string
       struct{ // лучше вынести как отдельный тип
         Type string `json:"type"`
         Measure string `json:"measure"`
        }{c.Type, c.Measure}
        c.ID,        // uint64
      )
    Ответ написан
    3 комментария
  • Как через sequelize-typescript создать связь 1-к-1 с возможностью каскадного удаления?

    @Wirusnyy-chel
    У вас 2 таблицы, user и profile. У пофиля id это внешний ключ на таблицу пользователей. Поэтому если туда можно записывать только значения которые содержаться в колонке id пользователей. Соответственно перед тем как записывать в таблицу профилей нужно создать запись с таким id в таблице пользователей
    Ответ написан
    Комментировать