pg-prom UPDATE возвращает успешный код возврата, но фактически не обновляет таблицу

Я пытаюсь обновить строку в таблице pgsql с помощью помощников pg-prom. Запрос выполняется успешно и возвращает успешный код возврата. Но изменения не отражаются в таблице. Должен ли я выдавать COMMIT после запроса на обновление или он будет фиксироваться автоматически?

const condition = pgp.as.format(` WHERE key = '${value}'`, putData);
const table = new pgp.helpers.TableName({ table: 'mytab', schema: 'myschema'});
const query = pgp.helpers.update(putData, [updateCols], table) + condition;

await db.none(query).then(() => {
  status = 200;
  response['status'] = 'success';
})
.catch(error => {
  status = 500;
  response['status'] = 'failed';
  response['error'] = error.message;
  response['errorCode'] = error.code;
});


person Giri    schedule 16.08.2020    source источник
comment
Если вы не BEGIN транзакция, все операторы в Postgres находятся в режиме автоматической фиксации.   -  person Bergi    schedule 16.08.2020
comment
@Bergi Хорошо, но я не вижу обновленную запись в таблице после того, как она вернет успешный код возврата.   -  person Giri    schedule 16.08.2020
comment
Вы уверены, что он обновляет правильные строки? Ваше WHERE состояние выглядит неудачным. Также посмотрите журналы вашей базы данных.   -  person Bergi    schedule 16.08.2020
comment
Какое значение имеет putData.value? Какой тип столбца key? Не могли бы вы распечатать полный query и разместить его здесь?   -  person Bergi    schedule 16.08.2020
comment
pgp.as.format('WHERE key = '${value}'', putData); выглядит неправильно, вы не должны использовать строки ES6 с format и тем более конкатенацией строк. Обработайте событие query, чтобы увидеть, что вы на самом деле выполняете. .   -  person vitaly-t    schedule 16.08.2020
comment
Спасибо @Bergi за то, что уделили время, чтобы разобраться в моем вопросе.   -  person Giri    schedule 20.08.2020
comment
Спасибо @ vitaly-t. Я исправил две вещи, которые публикую в ответе.   -  person Giri    schedule 20.08.2020


Ответы (1)


Причина, по которой соответствующая запись не обновляется, - недопустимый ввод в условии where. Пробелы / Null перешли в условие WHERE. Так что он возвращает успех, ничего не обновляя. Теперь код исправлен и работает нормально.

Во-вторых (это не связано с вопросом), я использовал формат строки ES6 в моем средстве форматирования запросов. В соответствии с комментарием @ vitaly-t я изменил его, как показано ниже.

pgp.as.format('WHERE key = $1', [keyValue]);

or

pgp.as.format('WHERE key = ${keyValue}', {keyValue});

person Giri    schedule 20.08.2020