gpt4 book ai didi

go - 从虚拟文件系统加载 SQLite3 数据库 (afero)

转载 作者:IT王子 更新时间:2023-10-29 02:09:14 26 4
gpt4 key购买 nike

设置:

1) SQLite3 数据库文件被上传到文件服务器

2) 文件被存储到虚拟文件系统

3) 我想在那个数据库上执行sql查询

目前我正在使用 go-sqlite3数据库文件位于 afero .


问题:

是否有可能使用来自 os 文件系统的文件以外的其他来源将数据库文件加载到 go-sqlite3。


当前方法:

我目前的解决方案是将文件从 afero 复制到 os.TempDir() 目录中,但是我们的 ci 失败了并且不是实际的解决方案,因为它不再使用专用文件系统。

最佳答案

经过一点源代码潜水后,我在 sqlite3.go 中看到了这个

name := C.CString(dsn)
defer C.free(unsafe.Pointer(name))
rv := C._sqlite3_open_v2(name, &db,
mutex|C.SQLITE_OPEN_READWRITE|C.SQLITE_OPEN_CREATE,
nil)

所以这回答了你的问题,数据库的实际打开发生在 sqlite3 库的“外部”和“内部”。如果我们检查函数 sqlite3_open_v2,我们可以看到它需要一个文件名:

int sqlite3_open_v2(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb, /* OUT: SQLite db handle */
int flags, /* Flags */
const char *zVfs /* Name of VFS module to use */
);

我认为这里唯一的方法是实现你自己的 Sqlite VFS它以某种方式与 afero 抽象交互。

关于go - 从虚拟文件系统加载 SQLite3 数据库 (afero),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52077914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com