小编And*_*lov的帖子

如何防止 SQLite 数据库锁定?

从 SQLite FAQ 我知道:

多个进程可以同时打开同一个数据库。多个进程可以SELECT同时进行。但是,任何时候只有一个进程可以对数据库进行更改。

所以,据我所知,我可以:1) 从多个线程 ( SELECT) 读取数据库 2) 从多个线程 ( SELECT)读取数据库并从单线程 ( CREATE, INSERT, DELETE)写入

但是,我读到了Write-Ahead Logging,它提供了更多的并发性,因为reader do not block writers and a writer do not block readings。读和写可以同时进行。

最后,当我找到时,我完全糊涂,当指定时:

以下是出现 SQLITE_LOCKED 错误的其他原因:

  • 试图CREATEDROP表或索引而SELECT声明仍悬而未决。
  • 当 aSELECT在同一张表上处于活动状态时尝试写入表。
  • 尝试SELECT在多线程应用程序中同时在同一张表上执行两个操作,如果 sqlite 未设置为这样做。
  • fcntl(3,F_SETLK 对 DB 文件的调用失败。例如,这可能是由 NFS 锁定问题引起的。此问题的一种解决方案是将 DB 移走,然后将其复制回来,使其具有新的 Inode 值

所以,我想为自己澄清一下,有必要避免锁吗?我可以从两个不同的线程同时读取和写入吗?谢谢。

sqlite locking

14
推荐指数
1
解决办法
6万
查看次数

检查 postgresql 数据库是否存在(不区分大小写的方式)

是否有一种“优雅的内置”不区分大小写的方式来检查 db 是否存在?

我只找到了SELECT datname FROM pg_catalog.pg_database WHERE datname='dbname',但这是 CS 检查。想到的第一件事是检索所有数据库名称并手动过滤它们,但我认为有更优雅的方法来做到这一点。

postgresql catalogs

12
推荐指数
2
解决办法
3万
查看次数

标签 统计

catalogs ×1

locking ×1

postgresql ×1

sqlite ×1