-
Notifications
You must be signed in to change notification settings - Fork 17
this.db.insert
Данный метод предназначен для создания в заданной таблице новых записей, представленных "объектами" javaScript.
await this.db.insert ('users', {
id: this.rq.id,
label: this.rq.data.label,
// ... прочие поля
})
Если первичный ключ таблицы состоит из единственного поля, его значение не задано на входе и генерируется на стороне БД, то ключ вновь созданной записи передаётся в качестве результата операции:
let id = await this.db.insert ('news', {label: 'Новая новость'})
Для сценариев, где требуется либо создать запись с заранее известным ключом, либо не менять данные вовсе, предусмотрен отдельный метод this.db.insert_if_absent.
В настоящее время результат this.db.insert здесь сводится к выводу last_insert_rowid(), что приемлемо только для таблиц с первичными ключами типа INTEGER PRIMARY KEY.
Для Clickhouse результат this.db.insert всегда пуст. Поскольку данная СУБД предназначена для хранения неизменяемых архивов данных, сгенерированных другими системами, ограничением данная особенность не является.
Если вместо объекта данных указан массив, в результате вызова создаётся множество записей:
await this.db.insert ('children', [
{parent, ord: 1, label: 'one'},
{parent, ord: 2, label: 'two'},
])
а результат пуст.
По умолчанию пакетный вариант this.db.insert сводится к выполнению this.db.insert для каждой отдельной записи из массива.
Однако для PostgreSQL и ClickHouse он реализован через this.db.load, что существенно эффективнее. В последнем случае вторым параметром можно указывать не только массив, но и stream.Readable объектного режима.
Однако во всех вариантах и для всех диалектов пакетный this.db.insert рассчитан на множество записей одинаковой структуры, поскольку текст SQL генерируется по единственной — первой — записи.
Иногда при создании записи в таблице значения всех полей вычисляются внутри БД автоматически. В таком случае следует указать единственный параметр: имя таблицы.
await db.insert ('my_table')
В настоящее время такой вариант вызова поддерживается тольно для PostgreSQL, где генерирует INSERT INTO ... DEFAULT VALUES.