如何在持久性模式下以只读方式打开Sqlite3数据库?

3

我目前使用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只读方式打开我的数据库?


SQLite作为一种基于文件的数据库,没有“连接字符串”这一概念。它甚至没有连接,因为这里的DBMS只是您程序中的一个库。 - Cubic
2个回答

3

3
我认为你链接的是.NET特定的信息,所以它可能不适用于这里。
如果你看代码,persistent只调用SQLite C函数sqlite3_open,它只需要数据库文件名。
如果想要使连接只读,似乎需要使用sqlite3_open_v2,它需要额外的标志。
然而,通过文件权限也可以实现相同的效果,因为如果用户没有写SQLite DB文件的权限,他们将无法写入。

在Persistent上开一个问题看起来是合理的@ruben.moor。你也可以自己实现,这可能不太困难。 - MaxGabriel
我将尝试在数据库文件上使用简单的只读权限来测试这种方法。对于所有实际目的来说,这听起来足够了。虽然有人可能会争论,在Haskell代码中指定只读访问更清晰(取决于情况),我也会研究所需的更改。 - ruben.moor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接