接下来,我将使用mattn / go-sqlite3模块打开一个sqlite3数据库。打开后,我立即使用PRAGMA journal_mode = WAL将数据库日记模式设置为WAL。
但是,如果我尝试在第一个进程运行时从第二个进程打开数据库,则第二个进程无法打开它,而是出现“数据库已锁定”错误。即使我没有执行任何交易,也会发生这种情况。
我正在使用的连接字符串是:
4
(我打算回答我自己的问题,因为调试花费了很长时间)
答案 0 :(得分:0)
如果要启用journal_mode = WAL,则应将其添加到连接字符串中:
get_absolute_url
作为打开数据库的一部分,go-sqlite3将执行PRAGMA语句以设置各种默认值。这些默认值之一是设置journal_mode = DELETE。但是,如果另一个进程打开了数据库,则无法将模式更改回DELETE。执行此语句失败并显示“数据库已锁定”,因此您将看到打开操作失败并显示该错误。
连接字符串参数的完整列表在https://github.com/mattn/go-sqlite3
中列出