带有journal_mode = WAL的go-sqlite3给出“数据库已锁定”错误

时间:2019-07-19 19:31:52

标签: go go-sqlite3

接下来,我将使用mattn / go-sqlite3模块打开一个sqlite3数据库。打开后,我立即使用PRAGMA journal_mode = WAL将数据库日记模式设置为WAL。

但是,如果我尝试在第一个进程运行时从第二个进程打开数据库,则第二个进程无法打开它,而是出现“数据库已锁定”错误。即使我没有执行任何交易,也会发生这种情况。

我正在使用的连接字符串是:

4

(我打算回答我自己的问题,因为调试花费了很长时间)

1 个答案:

答案 0 :(得分:0)

如果要启用journal_mode = WAL,则应将其添加到连接字符串中:

get_absolute_url

作为打开数据库的一部分,go-sqlite3将执行PRAGMA语句以设置各种默认值。这些默认值之一是设置journal_mode = DELETE。但是,如果另一个进程打开了数据库,则无法将模式更改回DELETE。执行此语句失败并显示“数据库已锁定”,因此您将看到打开操作失败并显示该错误。

连接字符串参数的完整列表在https://github.com/mattn/go-sqlite3

中列出