【问题标题】:SQLite - Is it possible to make a non-integer Primary Key work?SQLite - 是否可以使非整数主键工作?
【发布时间】:2010-08-02 07:22:20
【问题描述】:

感谢您的阅读并希望回答,

由于遗留问题和公司政策,我正在使用 SQLite 2.8.17 并有一些 varchars 作为主键。

但是当我运行 “pragma integrity_check” 时,它会报告 “索引中缺少 rowid”“索引中的条目数错误” 在具有 varchar 主键但返回结果为 OK 的表上。

Extended Constant DB 访问和使用(大约一天的负载测试)似乎导致 DB 失败(完整性检查返回 FAIL)和唯一的解释(通过 .explain em>) 与之前的错误相同(“索引中缺少 rowid”“索引中的条目数错误”)。

有人可以帮忙吗?我做错了什么吗?

谢谢。

【问题讨论】:

  • 长度和隐私允许,您可以发布架构吗?从那里可能会收集到一些东西。

标签: sqlite primary-key varchar sqlite2


【解决方案1】:

如果你清理数据库,那么至少应该在没有完整性检查失败的情况下重新构建它。然后,如您所说,尝试一天的访问和使用,看看错误是否仍然存在。

要清理数据库,请在命令行中输入数据库并键入:VACUUM;,或使用命令行:

sqlite2.exe mydb.db "vacuum;"

(虽然我似乎记得 SQLite2 在VACUUM 之后需要一个表名,所以您可能需要进行一些试验。它仍然会影响所有表。)

【讨论】:

  • 不,SQLite 不需要表名。不提供任何参数会清空整个数据库。抽真空后没有变化,错误仍然存​​在。起初 "rowid missing from index""wrong # of entries in index" 只是通过检查得到说明,完整性检查仍然通过,一段时间后,完整性检查将失败并报告 DB-sick 状态。之后的真空或其他完整性检查会挂起我的系统。我不知道是否有 varchar PK 导致的“索引中缺少 rowid”和“索引中的条目数错误”错误,但这是迄今为止唯一的线索。
猜你喜欢
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
相关资源
最近更新 更多