-
Notifications
You must be signed in to change notification settings - Fork 17
this.db.delete
Данный метод осуществляет удаление из указанной таблицы множества записей, удовлетворяющих заданному критерию.
Удаление — жёсткое, посредством SQL-оператора DELETE, а не установка каких-либо статусов, флагов и прочих полей данных.
Второй аргумент this.db.delete представляет собой js-объект, из которого формируется раздел DELETE ... WHERE. Он в точности соответствует набору фильтров this.db.query. В действительности SQL генерируется именно this.db.query — а потом перед FROM ставится DELETE.
В простейшем случае ключи — имена полей, а значения передаются как соответствующие параметры.
Если полученный SQL не предполагает ни одного параметра, вместо его запуска генерируется сообщение об ошибке: всё-таки осмысленный и необходимый DELETE на все записи в таблице представляется настолько гораздо более редким случаем, нежели следствие ошибки разработчика. Для полной зачистки таблицы всегда можно воспользоваться this.db.do с явно заданным SQL — и в большинстве таких случаев лучше подходит не DELETE, а TRUNCATE.
Пример:
return this.db [['delete', 'upsert'] [data.is_on]] ('user_options', {
id_user: this.user.uuid,
id_voc_user_option: data.id_voc_user_option
})
Для PostrgeSQL поддерживается 3-й аргумент: набор опций, единственная из которых в настоящий момент — vacuum. Соответственно, при её указании для заданной таблицы инициируется сборка мусора (без параметров), которой на всякий случай предшествует COMMIT.
do_purge__archive:
async function () {
const {db, rq: {id}} = this
return db.delete (id, {_is_to_delete: true}, {vacuum: true})
},
}
Для Clickhouse реализовано через ALTER TABLE ... DELETE.