Я хочу удалить все записи с датами до 20 минут назад.Postgres (или Sequelize) не устраивает пустой объект javascript Date
, который я предоставляю в качестве значения для сравнения.
Я использую sequelize 4.37 поверх базы данных postgres 9.6.
рассматриваемый столбец был объявлен с type: Sequelize.DATE
, что, как показывают исследования, эквивалентно TIMESTAMP WITH TIME ZONE
: полная дата и время с точностью до микросекунды и указатель часового пояса.(Это также то, что я вижу, когда использую инструмент CLI psql для описания таблицы.)
Итак, я делаю это:
const Sequelize = require('sequelize')
const { SomeModel } = require('../models.js')
// calculate 20 minutes ago
async function deleteStuff() {
const deletionCutoff = new Date()
deletionCutoff.setMinutes( deletionCutoff.getMinutes() - 20 )
await SomeModel.destroy({
where: {
[ Sequelize.Op.lt ]: { dateColumn: deletionCutoff }
}
})
Но я получаю эту ошибку:
Error: Invalid value { dateColumn: 2018-11-21T21:26:16.849Z }
Документы предполагают, что я должен иметь возможность предоставить либо чистую дату JavaScript, либо строку ISO8601, но оба выдают одну и ту же ошибку Invalid Value
.Разница лишь в том, что, если я передаю строку, ошибка показывает одинарные кавычки вокруг значения:
// error when dateColumn: deletionCutoff.toISOString()
Error: Invalid value { dateColumn: '2018-11-21T21:26:16.849Z' }