sqlite3vfs is a Cgo API that allows you to create custom sqlite Virtual File Systems (VFS) in Go. You can use this with the sqlite3
https://github.com/mattn/go-sqlite3 SQL driver.
To use, simply implement the VFS and File interfaces. Then register your VFS with sqlite3vfs and include the vfs name when opening the database connection:
// create your VFS
vfs := newTempVFS()
vfsName := "tmpfs"
err := sqlite3vfs.RegisterVFS(vfsName, vfs)
if err != nil {
panic(err)
}
db, err := sql.Open("sqlite3", fmt.Sprintf("foo.db?vfs=%s", vfsName))
if err != nil {
panic(err)
}
A full example can be found in sqlite3vfs_test.go.
sqlite3vfs can also be built as a SQLite3 loadable module. This allows you to load your vfs at runtime into applications that support SQLite3 modules, including the SQLite3 cli tool.
To build as a loadable module, set the -tags SQLITE3VFS_LOADABLE_EXT
build tag. Both DonutDB and sqlite3vfshttp have working examples of building a SQLite3 loadable module.
- DonutDB: SQLite on top of DynamoDB (read/write)
- sqlite3vfshttp: Query a SQLite database over HTTP using range requests
- sqlitezstd: Query a SQLite database that had been compressed with zstd seekable