":memory:?cache=shared&mode=rwc&_mutex=no&_journal=WAL&_sync=NORMAL"
,我们偶尔会在测试中看到错误“没有这样的表:配置”。令人困惑的是,有问题的查询已经在测试用例中成功使用,并且该表随后显示在 sqlite_master 的查询中,无论是在数据库连接还是引发错误的事务对象中。但是,一旦发生错误,查询就不会再成功。,我意识到这是一个相当模糊的问题,但有人至少可以建议去哪里看吗?数据库连接始终具有相同的指针值。,更新:,第二次尝试时,我几乎可以在此 SSCCE 中重现问题:,它与实际问题不同,因为 showTables 不显示 SSCCE 中的表,但在实际测试中显示。此示例显示使用 :memory:
而不是 example.db
的问题,但前提是事务未关闭。这是内存数据库已知的或预期的行为吗?,Go database/sql
隐式使用连接池,但 :memory:
数据库默认是打开它们的连接的私有。请参阅:https://www.php.cn/link/d346256ad566cf97801e5cecc45a2557,由于在幕后创建/关闭多个 SQLite 连接,因此您并不真正知道哪个连接正在运行每个语句以及针对哪个数据库,因此很自然,某些连接可以看到某些数据,而其他连接则看不到。,共享连接的一种方法是使用
cache=shared
,正如您所尝试的那样。但 SQLite 要求将其指定为 URI:file::memory:?cache=shared
(file:
很重要)。,打开共享内存数据库的更可靠方法是:,file:memdb1?mode=memory&cache=shared
(命名为 memdb1
),file:/memdb1?vfs=memdb
(命名为 /memdb1
,并使用 memdb
VFS),您的其他参数可能是不必要的,甚至可能有害(对于内存数据库)。,