Как преобразовать команду PostgresQL в синтаксис построителя запросов SQL

1

У меня есть следующая команда Postgres:

UPDATE users SET weightsovertime = weightsovertime || '{"weight":35,"date":"1/9/97"}'::jsonb where id = 20;

и я хотел бы преобразовать его в команду SQL query builder, используя библиотеки, такие как Knex.js.

Я попробовал это:

postgres('users')
.where('id','=',id)
.update({
    weightsovertime: weightsovertime +'||' + data + '::jsonb' 
})
.returning('weightsovertime')
.then(response => {
    res.json(response[0]);
})
.catch(err => res.status(400).json('unable to get entries'));

Но это не сработает, я также попытался обернуть "weightsoverime" в кавычки, но я получил ошибку "не удалось получить записи".

Я бы очень признателен за любую помощь.

  • 0
    Если вы используете pg-promise , то почему такое осложнение? Это просто однострочный запрос с pg-promise .
  • 0
    Я попробовал pg обещание, но оно тоже не сработало
Показать ещё 2 комментария
Теги:
pg-promise
knex.js

2 ответа

0

С pg-обещанием это будет:

const data = {
    id: 20,
    weightsovertime: {
        weight: 35,
        date: '1/9/97'
    }
};

db.none('UPDATE users SET weightsovertime = weightsovertime || ${weightsovertime}::jsonb WHERE id = ${id}', data)
    .then(() => {
        /* success */
    })
    .catch(error => {
         /* failure */
    });
0

С knex (https://runkit.com/embed/3ppka63pplpa):

knex('users').update({
  weightsovertime: knex.raw('?? || ?::jsonb', [
    'weightsovertime', 
    JSON.stringify({ weight: 35, date: '1/9/97' })
  ])
}).where('id', 20)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню