Как установить расширение для SQLite
SQLite — это миниатюрная, но мощная встраиваемая СУБД. У нее есть один недостаток: маловато встроенных функций по сравнению с PostgreSQL или Oracle. К счастью, авторы заложили в SQLite механизм расширений, на котором можно сделать почти все что угодно.
Обычно добавить расширение в SQLite несложно. Скачиваете файл, выполняете одну команду — и готово. Но иногда люди сталкиваются с проблемами, поэтому я решил написать это руководство.
Чтобы использовать расширение, его надо скачать и подключить. Мы разберем каждый из шагов по отдельности.
- Скачать: вручную
- Скачать: через менеджер пакетов
- Подключить: консоль
- Подключить: GUI или IDE
- Подключить: Python
- Подключить: Node.js
- Подключить: Go
- Что дальше
Скачать: вручную
Предположим, вы нашли интересное расширение. Теперь надо его скачать.
Расширение для SQLite — это одиночный файл:
*.dll
для Windows (например,stats.dll
)*.so
для Linux (stats.so
)*.dylib
для macOS (stats.dylib
)
Скачайте файл и сохраните его на диске. Мы будем использовать папку «Загрузки» (Downloads):
%USERPROFILE%\Downloads
на Windows (например,C:\Users\anton\Downloads
)~/Downloads
на Linux или macOS (/home/anton/Downloads
или/Users/anton/Downloads
)
Теперь можно подключать!
Я буду использовать расширение stats
в качестве примера; не забудьте поменять название и путь к файлу, если будете копировать команды.
Скачать: через менеджер пакетов
Раньше я часто сохранял скачанные расширения куда попало и потом не мог их найти. Поэтому, чтобы хранить их централизованно и не терять, сделал sqlpkg
— менеджер пакетов для расширений SQLite.
Чтобы скачать расширение через sqlpkg
, выполните команду install
.
Windows:
sqlpkg.exe install nalgeon/stats
Linux/macOS:
sqlpkg install nalgeon/stats
nalgeon/stats
— это идентификатор расширения. Его можно узнать в реестре пакетов. Загляните туда — там полно расширений!
sqlpkg
сохраняет все расширения в специальный каталог:
%USERPROFILE%\.sqlpkg
в Windows~/.sqlpkg
в Linux/macOS
Для нашего расширения nalgeon/stats
получится так:
C:\Users\anton\.sqlpkg\nalgeon\stats\stats.dll
в Windows/home/anton/.sqlpkg/nalgeon/stats/stats.so
в Linux/Users/anton/.sqlpkg/nalgeon/stats/stats.dylib
в macOS
Не забудьте поменять путь к файлу, если будете копировать команды из примеров ниже.
Подключить: консоль
Консоль SQLite (CLI, она же shell) — это утилита командной строки sqlite3.exe
для Windows или sqlite3
для Linux/macOS).
Запустите ее и подключите расширение командой .load
.
Windows:
.load c:/Users/anton/Downloads/stats
Linux/macOS:
.load /Users/anton/Downloads/stats
Теперь расширение можно использовать! Например, stats
добавляет функции median
и generate_series
:
select median(value) from generate_series(1, 99);
Примечание для macOS. Макось может блокировать неподписанные бинарные файлы и запрещать загрузку расширений. Чтобы это исправить, уберите расширение из карантина, выполнив следующую команду в терминале:
xattr -d com.apple.quarantine /Users/anton/Downloads/stats.dylib
А еще стандартная консоль SQLite на макоси не поддерживает расширения вовсе. Используйте специальную сборку, чтобы они заработали.
Подключить: GUI или IDE
Чтобы подключить расширение в SQLiteStudio, SQLiteSpy, DBeaver и других аналогичных программах, используйте функцию load_extension
.
Windows:
select load_extension('c:\Users\anton\sqlite\stats');
Linux/macOS:
select load_extension('/Users/anton/Downloads/stats');
Подключить: Python
Используйте стандартный модуль sqlite3
.
Windows:
import sqlite3
conn = sqlite3.connect(":memory:")
conn.enable_load_extension(True)
conn.load_extension(r"c:\Users\anton\sqlite\stats")
conn.execute("select median(value) from generate_series(1, 99)")
conn.close()
Linux/macOS:
import sqlite3
conn = sqlite3.connect(":memory:")
conn.enable_load_extension(True)
conn.load_extension("/Users/anton/Downloads/stats")
conn.execute("select median(value) from generate_series(1, 99)")
conn.close()
Примечание для macOS. Стандартный модуль sqlite3
на макоси не умеет загружать расширения. Используйте пакет sqlean.py
— он полностью совместим со стандартным и поддерживает расширения.
Подключить: Node.js
Используйте пакет better-sqlite3
.
Windows:
const sqlite3 = require("better-sqlite3");
const db = new sqlite3(":memory:");
db.loadExtension(`c:\Users\anton\sqlite\stats`);
db.exec("select median(value) from generate_series(1, 99)");
db.close();
Linux/macOS:
const sqlite3 = require("better-sqlite3");
const db = new sqlite3(":memory:");
db.loadExtension("/Users/anton/Downloads/stats");
db.exec("select median(value) from generate_series(1, 99)");
db.close();
Подключить: Go
Используйте пакет mattn/go-sqlite3
.
Windows:
package main
import (
"database/sql"
"fmt"
sqlite3 "github.com/mattn/go-sqlite3"
)
func main() {
sql.Register("sqlite3_with_extensions",
&sqlite3.SQLiteDriver{
Extensions: []string{
`c:\Users\anton\sqlite\stats`,
},
})
db, err := sql.Open("sqlite3_with_extensions", ":memory:")
db.Query("select median(value) from generate_series(1, 99)")
db.Close()
}
Linux/macOS:
package main
import (
"database/sql"
"fmt"
sqlite3 "github.com/mattn/go-sqlite3"
)
func main() {
sql.Register("sqlite3_with_extensions",
&sqlite3.SQLiteDriver{
Extensions: []string{
"/Users/anton/Downloads/stats",
},
})
db, err := sql.Open("sqlite3_with_extensions", ":memory:")
db.Query("select median(value) from generate_series(1, 99)")
db.Close()
}
Обратите внимание: мы используем один и тот же идентификатор sqlite3_with_extensions
в sql.Register
и sql.Open
.
Что дальше
Если вам не хватает функций в SQLite, загляните в реестр пакетов — там наверняка найдется что-нибудь подходящее.
И попробуйте менеджер пакетов, если предпочитаете консольные утилиты.
И реестр, и менеджер — новые проекты, так что в них есть некоторые шероховатости. Но свою задачу они выполняют.
Всем SQLite!
★ Подписывайтесь на новые заметки.