如何以持久的只读模式打开 Sqlite3 数据库?

How to open a Sqlite3 database in read-only mode with persistent?

我目前使用来自 persistent-sqlite 的createSqlitePool

import Database.Persist.Sqlite

createSqlitePool "mydb.db" 10

根据 Sqlite3 文档,我可以在连接字符串中传递附加参数,例如

"Data Source=c:\mydb.db;Version=3;Read Only=True;"

比照。 https://www.connectionstrings.com/sqlite-net-provider/read-only-connection/

显然,不可能简单地将此连接字符串传递给 createSqlitePool。有没有办法告诉 persistent-sqlite 以只读方式打开我的数据库?

我认为这是您链接到的特定于 .NET 的信息,因此它可能不适用于此处。

如果您查看 the code, persistent just calls the SQLite C function sqlite3_open,它只使用数据库的文件名。

如果您想将连接设为只读,似乎需要使用带有额外标志的 sqlite3_open_v2

虽然您可以使用文件权限实现相同的目的,因为如果用户没有权限,他们将无法写入 SQLite 数据库文件。

Persistent 现在支持连接字符串中的 Sqlite3-URI 语法,如此处所述:

https://github.com/yesodweb/persistent/wiki/Database-Configuration

因此,对于只读,像这样的东西是有效的:

URI 文件名样式,相对路径,只读:

file:sqlite3.db?mode=ro