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

this.db.load

do- edited this page Nov 20, 2022 · 14 revisions

Данный метод осуществляет загрузку строк в указанную таблицу из предоставленного потока (Readable).

  try {        
    await this.db.load (
      fs.createReadStream (fn), 
      'my_table', 
      ['id', 'label'], 
      {ENCODING: 'utf-8', NULL: ''}
    )
  }
  catch (x) {
    darn (x)
  }

Поток может быть:

  • символьным:
    • тогда в норме он представляет собой последовательность строк, оканчивающихся на \n, с разделителями записей \t;
  • объектным:
    • тогда его элементы соответствуют добавляемым записям (ключи -- имена столбцов), причём сохраняются только поля из списка, указанного в 3-м параметре.

PostgreSQL

Для PostgreSQL данный вызов транслируется в оператор COPY ... FROM STDIN, где раздел WITH формируется из последнего параметра.

Если он не задан, по умолчанию принимается значение {NULL: ''}, то есть текстовый формат с разделителями-символами табуляции и переводом пустых строк в NULL.

Для использования данного метода необходимо включить в проект модуль pg-copy-streams.

ClickHouse

В ClickHouse массовый пакетный ввод является основной предусмотренной операцией изменения данных, так что используется базовый INSERT. Более того, для этой СУБД this.db.insert реализован через внутренний вызов this.db.load.

На момент написания этого текста 4-й параметр (опции) никак не используется.

Для текстовых потоков единственный поддерживаемый формат строк — TSV.

Для потоков объектов имеется следующее техническое ограничение: все значения полей должны быть отформатированы в соответствии с типами соответствующих столбцов. В основном это касается типов, связанных с датами и временем: например, ClickHouse отказывается принимать для Date значения со временем (даже если это 00:00:00), а для DateTime -- какие-либо миллисекунды.

Чтобы форматировать значения автоматически, можно использовать this.db.insert, но это возможно только для таблиц, описанных в модели.

Clone this wiki locally