Spec-Zone.ru › Node.js 22 LTS

SQLite

Добавлено в: v22.5.0
Стабильность: 1.1 — Активная разработка.

Исходный код: lib/sqlite.js

Модуль node:sqlite упрощает работу с базами данных SQLite. Чтобы получить к нему доступ:

Модули JavaScript
import sqlite from 'node:sqlite';
CommonJS
const sqlite = require('node:sqlite');

Этот модуль доступен только в схеме node:.

В следующем примере показано базовое использование модуля node:sqlite: открытие базы данных в памяти, запись данных в базу данных и последующее чтение этих данных.

Модули JavaScript
import { DatabaseSync } from 'node:sqlite';
const database = new DatabaseSync(':memory:');

// Execute SQL statements from strings.
database.exec(`
  CREATE TABLE data(
    key INTEGER PRIMARY KEY,
    value TEXT
  ) STRICT
`);
// Create a prepared statement to insert data into the database.
const insert = database.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
// Execute the prepared statement with bound values.
insert.run(1, 'hello');
insert.run(2, 'world');
// Create a prepared statement to read data from the database.
const query = database.prepare('SELECT * FROM data ORDER BY key');
// Execute the prepared statement and log the result set.
console.log(query.all());
// Prints: [ { key: 1, value: 'hello' }, { key: 2, value: 'world' } ]
CommonJS
'use strict';
const { DatabaseSync } = require('node:sqlite');
const database = new DatabaseSync(':memory:');

// Execute SQL statements from strings.
database.exec(`
  CREATE TABLE data(
    key INTEGER PRIMARY KEY,
    value TEXT
  ) STRICT
`);
// Create a prepared statement to insert data into the database.
const insert = database.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
// Execute the prepared statement with bound values.
insert.run(1, 'hello');
insert.run(2, 'world');
// Create a prepared statement to read data from the database.
const query = database.prepare('SELECT * FROM data ORDER BY key');
// Execute the prepared statement and log the result set.
console.log(query.all());
// Prints: [ { key: 1, value: 'hello' }, { key: 2, value: 'world' } ]

Класс: DatabaseSync

История
Версия Изменения
v22.16.0

Добавлен параметр timeout.

v22.15.0

Аргумент path теперь поддерживает объекты Buffer и URL.

v22.5.0

Добавлено в: v22.5.0

Этот класс представляет собой отдельное подключение к базе данных SQLite. Все API, предоставляемые этим классом, выполняются синхронно.

new DatabaseSync(path[, options])

История
Версия Изменения
v22.18.0

Добавлены новые параметры базы данных SQLite.

v22.5.0

Добавлено в: v22.5.0

  • path <string> | <Buffer> | <URL> Путь к базе данных. Базу данных SQLite можно хранить в файле или полностью в памяти. Для работы с базой данных в файле укажите путь к файлу. Для работы с базой данных в памяти укажите специальное имя ':memory:'.
  • options <Object> Параметры конфигурации подключения к базе данных. Поддерживаются следующие параметры:
    • open <boolean> Если true, база данных открывается конструктором. Если это значение равно false, базу данных необходимо открыть с помощью метода open(). По умолчанию: true.
    • readOnly <boolean> Если true, база данных открывается в режиме только для чтения. Если база данных не существует, открыть ее не удастся. По умолчанию: false.
    • enableForeignKeyConstraints <boolean> Если true, включаются ограничения внешних ключей. Это рекомендуется, однако их можно отключить для совместимости с устаревшими схемами баз данных. Применение ограничений внешних ключей можно включать и отключать после открытия базы данных с помощью PRAGMA foreign_keys. По умолчанию: true.
    • enableDoubleQuotedStringLiterals <boolean> Если true, SQLite принимает строковые литералы в двойных кавычках. Это не рекомендуется, однако такую возможность можно включить для совместимости с устаревшими схемами баз данных. По умолчанию: false.
    • allowExtension <boolean> Если true, включаются функция SQL loadExtension и метод loadExtension(). Позже можно вызвать enableLoadExtension(false), чтобы отключить эту функцию. По умолчанию: false.
    • timeout <number> Время ожидания блокировки в миллисекундах. Это максимальное время, в течение которого SQLite будет ждать снятия блокировки базы данных, прежде чем вернуть ошибку. По умолчанию: 0.
    • readBigInts <boolean> Если true, целочисленные поля считываются как значения JavaScript типа BigInt. Если false, целочисленные поля считываются как числа JavaScript. По умолчанию: false.
    • returnArrays <boolean> Если true, результаты запросов возвращаются в виде массивов, а не объектов. По умолчанию: false.
    • allowBareNamedParameters <boolean> Если true, разрешается привязывать именованные параметры без начального символа (например, foo вместо :foo). По умолчанию: true.
    • allowUnknownNamedParameters <boolean> Если true, неизвестные именованные параметры при привязке игнорируются. Если false, для неизвестных именованных параметров возникает исключение. По умолчанию: false.

Создает новый экземпляр DatabaseSync.

database.aggregate(name, options)

Добавлено в: v22.16.0

Регистрирует в базе данных SQLite новую агрегатную функцию. Этот метод является оберткой для sqlite3_create_window_function().

  • name <string> Имя создаваемой функции SQLite.
  • options <Object> Параметры конфигурации функции.
    • deterministic <boolean> Если true, для создаваемой функции устанавливается флаг SQLITE_DETERMINISTIC. По умолчанию: false.
    • directOnly <boolean> Если true, для создаваемой функции устанавливается флаг SQLITE_DIRECTONLY. По умолчанию: false.
    • useBigIntArguments <boolean> Если true, целочисленные аргументы методов options.step и options.inverse преобразуются в BigInt. Если false, целочисленные аргументы передаются как числа JavaScript. По умолчанию: false.
    • varargs <boolean> Если true, методы options.step и options.inverse можно вызывать с любым количеством аргументов (от нуля до SQLITE_MAX_FUNCTION_ARG). Если false, методы inverse и step необходимо вызывать ровно с length аргументами. По умолчанию: false.
    • start <number> | <string> | <null> | <Array> | <Object> | <Function> Начальное значение агрегатной функции. Это значение используется при инициализации агрегатной функции. Если передана функция <Function>, ее возвращаемое значение будет начальным значением.
    • step <Function> Функция, вызываемая для каждой строки агрегата. Функция получает текущее состояние и значение строки. Она должна возвращать новое состояние.
    • result <Function> Функция, вызываемая для получения результата агрегирования. Функция получает конечное состояние и должна вернуть результат агрегирования.
    • inverse <Function> Если эта функция задана, метод aggregate будет работать как оконная функция. Функция получает текущее состояние и значение удаленной строки. Она должна возвращать новое состояние.

При использовании в качестве оконной функции функция result будет вызываться несколько раз.

CommonJS
const { DatabaseSync } = require('node:sqlite');

const db = new DatabaseSync(':memory:');
db.exec(`
  CREATE TABLE t3(x, y);
  INSERT INTO t3 VALUES ('a', 4),
                        ('b', 5),
                        ('c', 3),
                        ('d', 8),
                        ('e', 1);
`);

db.aggregate('sumint', {
  start: 0,
  step: (acc, value) => acc + value,
});

db.prepare('SELECT sumint(y) as total FROM t3').get(); // { total: 21 }
Модули JavaScript
import { DatabaseSync } from 'node:sqlite';

const db = new DatabaseSync(':memory:');
db.exec(`
  CREATE TABLE t3(x, y);
  INSERT INTO t3 VALUES ('a', 4),
                        ('b', 5),
                        ('c', 3),
                        ('d', 8),
                        ('e', 1);
`);

db.aggregate('sumint', {
  start: 0,
  step: (acc, value) => acc + value,
});

db.prepare('SELECT sumint(y) as total FROM t3').get(); // { total: 21 }

database.close()

Добавлено в: v22.5.0

Закрывает подключение к базе данных. Если база данных не открыта, возникает исключение. Этот метод является оберткой для sqlite3_close_v2().

database.loadExtension(path)

Добавлено в: v22.13.0
  • path <string> Путь к загружаемой разделяемой библиотеке.

Загружает разделяемую библиотеку в подключение к базе данных. Этот метод является оберткой для sqlite3_load_extension(). При создании экземпляра DatabaseSync необходимо включить параметр allowExtension.

database.enableLoadExtension(allow)

Добавлено в: v22.13.0
  • allow <boolean> Разрешить ли загрузку расширений.

Включает или отключает функцию SQL loadExtension и метод loadExtension(). Если при создании параметр allowExtension имеет значение false, включить загрузку расширений нельзя по соображениям безопасности.

database.location([dbName])

Добавлено в: v22.16.0
  • dbName <string> Имя базы данных. Это может быть 'main' (основная база данных по умолчанию) или любая другая база данных, добавленная с помощью ATTACH DATABASE По умолчанию: 'main'.
  • Возвращает: <string> | <null> Расположение файла базы данных. При использовании базы данных в памяти этот метод возвращает null.

Этот метод является оберткой для sqlite3_db_filename()

database.exec(sql)

Добавлено в: v22.5.0
  • sql <string> Выполняемая строка SQL.

Этот метод позволяет выполнить один или несколько операторов SQL без возврата результатов. Он полезен для выполнения операторов SQL, считанных из файла. Этот метод является оберткой для sqlite3_exec().

database.function(name[, options], function)

Добавлено в: v22.13.0
  • name <string> Имя создаваемой функции SQLite.
  • options <Object> Необязательные параметры конфигурации функции. Поддерживаются следующие свойства:
    • deterministic <boolean> Если true, для создаваемой функции устанавливается флаг SQLITE_DETERMINISTIC. По умолчанию: false.
    • directOnly <boolean> Если true, для создаваемой функции устанавливается флаг SQLITE_DIRECTONLY. По умолчанию: false.
    • useBigIntArguments <boolean> Если true, целочисленные аргументы function преобразуются в BigInt. Если false, целочисленные аргументы передаются как числа JavaScript. По умолчанию: false.
    • varargs <boolean> Если true, function можно вызывать с любым количеством аргументов (от нуля до SQLITE_MAX_FUNCTION_ARG). Если false, function необходимо вызывать ровно с function.length аргументами. По умолчанию: false.
  • function <Function> Функция JavaScript, вызываемая при вызове функции SQLite. Эта функция должна возвращать допустимый тип данных SQLite: см. раздел Преобразование типов между JavaScript и SQLite. Если возвращаемое значение равно undefined, результатом по умолчанию будет NULL.

Этот метод используется для создания пользовательских функций SQLite. Он является оберткой для sqlite3_create_function_v2().

database.isOpen

Добавлено в: v22.15.0
  • Тип: <boolean> Открыта ли в данный момент база данных.

database.isTransaction

Добавлено в: v22.16.0
  • Тип: <boolean> Находится ли база данных в данный момент в транзакции. Этот метод является оберткой для sqlite3_get_autocommit().

database.open()

Добавлено в: v22.5.0

Открывает базу данных, указанную в аргументе path конструктора DatabaseSync. Этот метод следует использовать только в том случае, если база данных не открывается конструктором. Если база данных уже открыта, возникает исключение.

database.prepare(sql)

Добавлено в: v22.5.0
  • sql <string> Строка SQL для компиляции в подготовленный оператор.
  • Возвращает: <StatementSync> Подготовленный оператор.

Компилирует оператор SQL в подготовленный оператор. Этот метод является оберткой для sqlite3_prepare_v2().

database.createSession([options])

Добавлено в: v22.12.0
  • options <Object> Параметры конфигурации сеанса.
    • table <string> Отдельная таблица, изменения в которой будут отслеживаться. По умолчанию отслеживаются изменения во всех таблицах.
    • db <string> Имя отслеживаемой базы данных. Это полезно, если с помощью ATTACH DATABASE добавлено несколько баз данных. По умолчанию: 'main'.
  • Возвращает: <Session> Дескриптор сеанса.

Создает сеанс и подключает его к базе данных. Этот метод является оберткой для sqlite3session_create() и sqlite3session_attach().

database.applyChangeset(changeset[, options])

Добавлено в: v22.12.0
  • changeset <Uint8Array> Двоичный набор изменений или набор исправлений.
  • options <Object> Параметры, определяющие способ применения изменений.
    • filter <Function> Пропускает изменения, если при передаче этой функции имени целевой таблицы она возвращает истинное значение. По умолчанию предпринимается попытка применить все изменения.

    • onConflict <Function> Функция, определяющая способ обработки конфликтов. Функция получает один аргумент, который может иметь одно из следующих значений:

      • SQLITE_CHANGESET_DATA: изменение DELETE или UPDATE не содержит ожидаемых значений «до».
      • SQLITE_CHANGESET_NOTFOUND: строка с первичным ключом изменения DELETE или UPDATE не существует.
      • SQLITE_CHANGESET_CONFLICT: изменение INSERT приводит к дублированию первичного ключа.
      • SQLITE_CHANGESET_FOREIGN_KEY: применение изменения приведет к нарушению ограничения внешнего ключа.
      • SQLITE_CHANGESET_CONSTRAINT: применение изменения приводит к нарушению ограничения UNIQUE, CHECK или NOT NULL.

      Функция должна возвращать одно из следующих значений:

      • SQLITE_CHANGESET_OMIT: пропустить конфликтующие изменения.
      • SQLITE_CHANGESET_REPLACE: заменить существующие значения конфликтующими изменениями (допустимо только при конфликтах SQLITE_CHANGESET_DATA или SQLITE_CHANGESET_CONFLICT).
      • SQLITE_CHANGESET_ABORT: прервать операцию при конфликте и выполнить откат базы данных.

      Если обработчик конфликтов выбрасывает ошибку или возвращает любое другое значение, применение набора изменений прерывается, а база данных откатывается.

      По умолчанию: функция, возвращающая SQLITE_CHANGESET_ABORT.

  • Возвращает: <boolean> Успешно ли применен набор изменений без прерывания операции.

Если база данных не открыта, возникает исключение. Этот метод является оберткой для sqlite3changeset_apply().

const sourceDb = new DatabaseSync(':memory:');
const targetDb = new DatabaseSync(':memory:');

sourceDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)');
targetDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)');

const session = sourceDb.createSession();

const insert = sourceDb.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
insert.run(1, 'hello');
insert.run(2, 'world');

const changeset = session.changeset();
targetDb.applyChangeset(changeset);
// Now that the changeset has been applied, targetDb contains the same data as sourceDb. copy

database[Symbol.dispose]()

Добавлено в: v22.15.0
Стабильность: 1 — Экспериментальный

Закрывает подключение к базе данных. Если подключение к базе данных уже закрыто, ничего не происходит.

Класс: Session

Добавлено в: v22.12.0

session.changeset()

Добавлено в: v22.12.0
  • Возвращает: <Uint8Array> Двоичный набор изменений, который можно применить к другим базам данных.

Получает набор изменений, содержащий все изменения с момента создания набора. Метод можно вызывать несколько раз. Если база данных или сеанс не открыты, возникает исключение. Этот метод является оберткой для sqlite3session_changeset().

session.patchset()

Добавлено в: v22.12.0
  • Возвращает: <Uint8Array> Двоичный набор исправлений, который можно применить к другим базам данных.

Подобен описанному выше методу, но создает более компактный набор исправлений. См. раздел Наборы изменений и наборы исправлений в документации SQLite. Если база данных или сеанс не открыты, возникает исключение. Этот метод является оберткой для sqlite3session_patchset().

session.close().

Закрывает сеанс. Если база данных или сеанс не открыты, возникает исключение. Этот метод является оберткой для sqlite3session_delete().

Класс: StatementSync

Добавлено в: v22.5.0

Этот класс представляет один подготовленный оператор. Этот класс нельзя создать с помощью конструктора. Вместо этого экземпляры создаются с помощью метода database.prepare(). Все API, предоставляемые этим классом, выполняются синхронно.

Подготовленный оператор — это эффективное двоичное представление SQL-запроса, использованного для его создания. Подготовленные операторы допускают передачу параметров и могут вызываться несколько раз с разными связанными значениями. Параметры также защищают от атак типа SQL-инъекция. По этим причинам при обработке пользовательского ввода предпочтительнее использовать подготовленные операторы, а не составленные вручную строки SQL.

statement.all([namedParameters][, ...anonymousParameters])

История
Версия Изменения
v22.14.0

Добавлена поддержка DataView и объектов типизированных массивов для anonymousParameters.

v22.5.0

Добавлено в: v22.5.0

  • namedParameters <Object> Необязательный объект для связывания именованных параметров. Ключи этого объекта используются для настройки соответствия.
  • ...anonymousParameters <null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Ноль или более значений для связывания с анонимными параметрами.
  • Возвращает: <Array> Массив объектов. Каждый объект соответствует строке, возвращённой при выполнении подготовленного оператора. Ключи и значения каждого объекта соответствуют именам и значениям столбцов строки.

Этот метод выполняет подготовленный оператор и возвращает все результаты в виде массива объектов. Если подготовленный оператор не возвращает результатов, метод возвращает пустой массив. Параметры подготовленного оператора связываются с помощью значений из namedParameters и anonymousParameters.

statement.columns()

Добавлено в: v22.16.0
  • Возвращает: <Array> Массив объектов. Каждый объект соответствует столбцу подготовленного оператора и содержит следующие свойства:

    • column <string> | <null> Не содержащие псевдонима имя столбца в исходной таблице или null, если столбец является результатом выражения или подзапроса. Это свойство соответствует результату sqlite3_column_origin_name().
    • database <string> | <null> Не содержащее псевдонима имя исходной базы данных или null, если столбец является результатом выражения или подзапроса. Это свойство соответствует результату sqlite3_column_database_name().
    • name <string> Имя, присвоенное столбцу в наборе результатов оператора SELECT. Это свойство соответствует результату sqlite3_column_name().
    • table <string> | <null> Не содержащее псевдонима имя исходной таблицы или null, если столбец является результатом выражения или подзапроса. Это свойство соответствует результату sqlite3_column_table_name().
    • type <string> Объявленный тип данных столбца или null, если столбец является результатом выражения или подзапроса. Это свойство соответствует результату sqlite3_column_decltype().

Этот метод позволяет получить сведения о столбцах, возвращаемых подготовленным оператором.

statement.expandedSQL

Добавлено в: v22.5.0
  • Тип: <string> Исходный SQL-запрос с подставленными значениями параметров.

Исходный текст SQL-запроса подготовленного оператора, в котором заполнители параметров заменены значениями, использованными при последнем выполнении этого подготовленного оператора. Это свойство является обёрткой для sqlite3_expanded_sql().

statement.get([namedParameters][, ...anonymousParameters])

История
Версия Изменения
v22.14.0

Добавлена поддержка DataView и объектов типизированных массивов для anonymousParameters.

v22.5.0

Добавлено в: v22.5.0

  • namedParameters <Object> Необязательный объект для связывания именованных параметров. Ключи этого объекта используются для настройки соответствия.
  • ...anonymousParameters <null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Ноль или более значений для связывания с анонимными параметрами.
  • Возвращает: <Object> | <undefined> Объект, соответствующий первой строке, возвращённой при выполнении подготовленного оператора. Ключи и значения объекта соответствуют именам и значениям столбцов строки. Если база данных не вернула ни одной строки, метод возвращает undefined.

Этот метод выполняет подготовленный оператор и возвращает первый результат в виде объекта. Если подготовленный оператор не возвращает результатов, метод возвращает undefined. Параметры подготовленного оператора связываются с помощью значений из namedParameters и anonymousParameters.

statement.iterate([namedParameters][, ...anonymousParameters])

История
Версия Изменения
v22.14.0

Добавлена поддержка DataView и объектов типизированных массивов для anonymousParameters.

v22.13.0

Добавлено в: v22.13.0

  • namedParameters <Object> Необязательный объект для связывания именованных параметров. Ключи этого объекта используются для настройки соответствия.
  • ...anonymousParameters <null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Ноль или более значений для связывания с анонимными параметрами.
  • Возвращает: <Iterator> Итерируемый итератор объектов. Каждый объект соответствует строке, возвращённой при выполнении подготовленного оператора. Ключи и значения каждого объекта соответствуют именам и значениям столбцов строки.

Этот метод выполняет подготовленный оператор и возвращает итератор объектов. Если подготовленный оператор не возвращает результатов, метод возвращает пустой итератор. Параметры подготовленного оператора связываются с помощью значений из namedParameters и anonymousParameters.

statement.run([namedParameters][, ...anonymousParameters])

История
Версия Изменения
v22.14.0

Добавлена поддержка DataView и объектов типизированных массивов для anonymousParameters.

v22.5.0

Добавлено в: v22.5.0

  • namedParameters <Object> Необязательный объект для связывания именованных параметров. Ключи этого объекта используются для настройки соответствия.
  • ...anonymousParameters <null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Ноль или более значений для связывания с анонимными параметрами.
  • Возвращает: <Object>
    • changes <number> | <bigint> Число строк, изменённых, вставленных или удалённых последним завершённым оператором INSERT, UPDATE или DELETE. Это поле содержит число или BigInt в зависимости от конфигурации подготовленного оператора. Это свойство соответствует результату sqlite3_changes64().
    • lastInsertRowid <number> | <bigint> Идентификатор строки, вставленной последней. Это поле содержит число или BigInt в зависимости от конфигурации подготовленного оператора. Это свойство соответствует результату sqlite3_last_insert_rowid().

Этот метод выполняет подготовленный оператор и возвращает объект со сводной информацией о внесённых изменениях. Параметры подготовленного оператора связываются с помощью значений из namedParameters и anonymousParameters.

statement.setAllowBareNamedParameters(enabled)

Добавлено в: v22.5.0
  • enabled <boolean> Включает или отключает поддержку связывания именованных параметров без символа-префикса.

Имена параметров SQLite начинаются с символа-префикса. По умолчанию node:sqlite требует наличия этого префикса при связывании параметров. Однако, за исключением знака доллара, при использовании этих символов-префиксов в ключах объектов также требуется дополнительное экранирование.

Для удобства этот метод позволяет использовать также именованные параметры без префикса, который не требуется указывать в коде JavaScript. При включении именованных параметров без префикса следует учитывать несколько особенностей:

  • В SQL символ-префикс по-прежнему обязателен.
  • В JavaScript символ-префикс по-прежнему допустим. Более того, связывание имён с префиксом будет немного эффективнее.
  • Использование неоднозначных именованных параметров, таких как $k и @k, в одном подготовленном операторе приведёт к исключению, поскольку определить способ связывания имени без префикса невозможно.

statement.setAllowUnknownNamedParameters(enabled)

Добавлено в: v22.15.0
  • enabled <boolean> Включает или отключает поддержку неизвестных именованных параметров.

По умолчанию при обнаружении неизвестного имени во время связывания параметров выбрасывается исключение. Этот метод позволяет игнорировать неизвестные именованные параметры.

statement.setReturnArrays(enabled)

Добавлено в: v22.16.0
  • enabled <boolean> Включает или отключает возврат результатов запросов в виде массивов.

Если этот параметр включён, методы all(), get() и iterate() будут возвращать результаты запросов в виде массивов, а не объектов.

statement.setReadBigInts(enabled)

Добавлено в: v22.5.0
  • enabled <boolean> Включает или отключает использование BigInt при чтении из базы данных полей INTEGER.

При чтении из базы данных значения INTEGER SQLite по умолчанию преобразуются в числа JavaScript. Однако значения INTEGER SQLite могут быть больше чисел, которые способны представить числа JavaScript. В таких случаях этот метод позволяет читать данные INTEGER с помощью значений BigInt JavaScript. Этот метод не влияет на операции записи в базу данных, где числа и значения BigInt поддерживаются всегда.

statement.sourceSQL

Добавлено в: v22.5.0
  • Тип: <string> Исходный SQL-запрос, использованный для создания этого подготовленного оператора.

Исходный текст SQL-запроса подготовленного оператора. Это свойство является обёрткой для sqlite3_sql().

Преобразование типов между JavaScript и SQLite

При чтении данных из SQLite или записи в неё средствами Node.js необходимо преобразовывать типы данных JavaScript в типы данных SQLite и обратно. Поскольку JavaScript поддерживает больше типов данных, чем SQLite, поддерживается только подмножество типов JavaScript. Попытка записать в SQLite неподдерживаемый тип данных приведёт к исключению.

SQLite JavaScript
NULL <null>
INTEGER <number> или <bigint>
REAL <number>
TEXT <string>
BLOB <TypedArray> или <DataView>

sqlite.backup(sourceDb, destination[, options])

Добавлено в: v22.16.0
  • sourceDb <DatabaseSync> База данных для резервного копирования. Исходная база данных должна быть открыта.
  • destination <string> Путь, по которому будет создана резервная копия. Если файл уже существует, его содержимое будет перезаписано.
  • options <Object> Необязательные параметры резервного копирования. Поддерживаются следующие свойства:
    • source <string> Имя исходной базы данных. Это может быть 'main' (основная база данных по умолчанию) или любая другая база данных, добавленная с помощью ATTACH DATABASE Значение по умолчанию: 'main'.
    • target <string> Имя целевой базы данных. Это может быть 'main' (основная база данных по умолчанию) или любая другая база данных, добавленная с помощью ATTACH DATABASE Значение по умолчанию: 'main'.
    • rate <number> Количество страниц, передаваемых в каждом пакете резервной копии. Значение по умолчанию: 100.
    • progress <Function> Необязательная функция обратного вызова, которая вызывается после каждого шага резервного копирования. В функцию передаётся аргумент <Object> со свойствами remainingPages и totalPages, описывающими текущий ход операции резервного копирования.
  • Возвращает: <Promise> Промис, который при завершении разрешается общим количеством страниц резервной копии или отклоняется в случае ошибки.

Этот метод создаёт резервную копию базы данных. Он абстрагирует функции sqlite3_backup_init(), sqlite3_backup_step() и sqlite3_backup_finish().

Во время создания резервной копии базу данных можно использовать обычным образом. Изменения, внесённые через то же подключение — тот же объект <DatabaseSync>, — сразу отражаются в резервной копии. Однако изменения из других подключений приведут к перезапуску процесса резервного копирования.

CommonJS
const { backup, DatabaseSync } = require('node:sqlite');

(async () => {
  const sourceDb = new DatabaseSync('source.db');
  const totalPagesTransferred = await backup(sourceDb, 'backup.db', {
    rate: 1, // Copy one page at a time.
    progress: ({ totalPages, remainingPages }) => {
      console.log('Backup in progress', { totalPages, remainingPages });
    },
  });

  console.log('Backup completed', totalPagesTransferred);
})();
Модули JavaScript
import { backup, DatabaseSync } from 'node:sqlite';

const sourceDb = new DatabaseSync('source.db');
const totalPagesTransferred = await backup(sourceDb, 'backup.db', {
  rate: 1, // Copy one page at a time.
  progress: ({ totalPages, remainingPages }) => {
    console.log('Backup in progress', { totalPages, remainingPages });
  },
});

console.log('Backup completed', totalPagesTransferred);

sqlite.constants

Добавлено в: v22.13.0
  • Тип: <Object>

Объект, содержащий часто используемые константы для операций SQLite.

Константы SQLite

Следующие константы экспортируются объектом sqlite.constants.

Константы разрешения конфликтов

Одна из следующих констант передаётся в качестве аргумента обработчику разрешения конфликтов onConflict, переданному в database.applyChangeset(). См. также раздел Константы, передаваемые обработчику конфликтов в документации SQLite.

Константа Описание
SQLITE_CHANGESET_DATA При обработке изменений DELETE или UPDATE обработчик конфликтов вызывается с этой константой, если в базе данных присутствует строка с необходимыми полями PRIMARY KEY, но одно или несколько других полей (не являющихся первичным ключом), изменённых при обновлении, не содержат ожидаемых значений «до».
SQLITE_CHANGESET_NOTFOUND При обработке изменений DELETE или UPDATE обработчик конфликтов вызывается с этой константой, если в базе данных отсутствует строка с необходимыми полями PRIMARY KEY.
SQLITE_CHANGESET_CONFLICT Эта константа передаётся обработчику конфликтов при обработке изменения INSERT, если операция приведёт к дублированию значений первичного ключа.
SQLITE_CHANGESET_CONSTRAINT Если обработка внешних ключей включена и применение набора изменений приводит к нарушению ограничений внешнего ключа в базе данных, обработчик конфликтов вызывается с этой константой ровно один раз перед фиксацией набора изменений. Если обработчик конфликтов возвращает SQLITE_CHANGESET_OMIT, фиксируются все изменения, включая те, которые вызвали нарушение ограничения внешнего ключа. Если же он возвращает SQLITE_CHANGESET_ABORT, набор изменений откатывается.
SQLITE_CHANGESET_FOREIGN_KEY Если при применении изменения возникает любое другое нарушение ограничения (например, ограничений UNIQUE, CHECK или NOT NULL), обработчик конфликтов вызывается с этой константой.

Обработчик разрешения конфликтов onConflict, переданный в database.applyChangeset(), должен возвращать одну из следующих констант. См. также раздел Константы, возвращаемые обработчиком конфликтов в документации SQLite.

Константа Описание
SQLITE_CHANGESET_OMIT Конфликтующие изменения пропускаются.
SQLITE_CHANGESET_REPLACE Конфликтующие изменения заменяют существующие значения. Обратите внимание, что это значение можно возвращать только при типе конфликта SQLITE_CHANGESET_DATA или SQLITE_CHANGESET_CONFLICT.
SQLITE_CHANGESET_ABORT При возникновении конфликта во время изменения операция прерывается, а база данных откатывается.

© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v22.x/docs/api/sqlite.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API