登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-19 17:09:33 151浏览 收藏

学习Golang要努力,但是不要急!今天的这篇文章《go-sqlite3 与journal_mode=WAL 给出“数据库已锁定”错误》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

在 go 中,我使用 mattn/go-sqlite3 模块打开 sqlite3 数据库。我使用 pragmajournal_mode=wal 打开后立即将数据库日志记录模式设置为 wal。

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

我使用的连接字符串是:

"file:mydbfile.db?cache=shared&mode=rwc"

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


解决方案


如果您想启用journal_mode=wal,您应该将其添加到连接字符串中:

"file:mydbfile.db?cache=shared&mode=rwc&_journal_mode=WAL"

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

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

理论要掌握,实操不能落!以上关于《go-sqlite3 与journal_mode=WAL 给出“数据库已锁定”错误》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>