Skip to content
This repository was archived by the owner on Mar 2, 2025. It is now read-only.

this.db.delete

do- edited this page Aug 15, 2022 · 6 revisions

Данный метод осуществляет удаление из указанной таблицы множества записей, удовлетворяющих заданному критерию.

Удаление — жёсткое, посредством 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.

Clone this wiki locally