如何以只读模式打开Sqlite3数据库并使用持久性?

时间:2015-07-10 16:09:15

标签: haskell sqlite readonly yesod 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以只读方式打开我的数据库?

2 个答案:

答案 0 :(得分:3)

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

如果查看the code,persistent只调用SQLite C函数sqlite3_open,该函数只接受数据库的文件名。

如果您想将连接设为只读,看起来需要使用带有其他标志的sqlite3_open_v2

但是,您可以使用文件权限实现相同的功能,因为如果用户没有权限,则无法编写SQLite DB文件。

答案 1 :(得分:0)

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

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

因此,对于只读这样的东西:

URI文件名样式,相对路径,只读:"文件:sqlite3.db?mode = ro"