SQLite在开发中,PostgreSQL在生产中 - 为什么不呢?

时间:2012-06-02 01:42:09

标签: ruby-on-rails sqlite postgresql heroku

由于可能出现的问题,Heroku建议不要这样做。我是一个SQL菜鸟,你能解释使用不同数据库可能遇到的问题类型吗?

3 个答案:

答案 0 :(得分:13)

我在开发中使用了sqlite3并在生产中使用了一段时间,但最近转到了postgres。

如果您同时使用两者,请注意以下事项:

  • sqlite3和postgres之间存在差异会让你感到困惑。我遇到的一个常见问题是postgres对查询中的类型更严格(where :string_column => <integer>在sqlite中工作正常并在postgres中中断)。如果你的dev是sqlite,你肯定想要一个使用postgres的暂存区域,如果你的生产应用程序由于sql错误而关闭,这很重要。

  • 在本地计算机上更容易设置Sqlite ,并且能够在db /目录中删除/移动.sqlite文件非常棒。

  • taps允许您将heroku postgres数据镜像到本地sqlite数据库中。随着数据库变大,速度变慢,在几十个表和100K +行中,它开始需要20多分钟才能恢复。

  • 您不会获得像ilike这样的postgres功能,新的键/值存储,全文搜索

  • 因为您必须只使用广泛支持的SQL功能,所以将应用程序迁移到mysql可能更容易

那我为什么要换?我想要一些postgres专用功能,不断碰到未通过测试捕获的bug,并且需要能够更快地镜像我的生产数据库(pg_restore需要约1分钟而不是20+用于点击)。我的建议是在dev中使用sqlite,因为它很简单,然后在/需要时切换。从sqlite切换到postgres进行开发就像设置postgres一样简单 - 等待没有增加复杂性。

答案 1 :(得分:2)

不同的数据库以不同的方式解释和遵守SQL标准。比如,如果你要将一些代码从SQLite复制粘贴到PostgreSQL,那么很有可能它不会立即起作用。如果它只是基本的查询,那么也许,但在处理任何特定的事情时,完全兼容性的可能性非常小。

有些数据库也更符合标准。这是与互联网浏览器类似的战场。如果你曾经做过一些网站,你就会知道兼容性是一个痛苦的屁股,必须让它适用于旧版本和Internet Explorer。由于某些数据库比其他数据库更老,有些数据库甚至比标准版本更旧,因此他们会有自己的做事方式,他们不仅可以废弃并跳到标准,因为他们会失去对现有大客户的支持(对于名为Oracle的数据库引擎来说尤其如此。 PostgreSQL有点像谷歌Chrome,在标准合规方面相当高,但仍有一些自己的小怪癖。顾名思义,SQLite是一种轻量级数据库系统。您可以假设它缺少标准中的一些更高级的功能。

数据库引擎也以不同方式执行相同的操作。值得了解和理解一个数据库及其工作原理(不仅仅是查询级别),这样您就可以充分利用它。

答案 2 :(得分:0)

我处于类似的情况。通常,使用不同的数据库引擎进行生产和测试是一个非常糟糕的主意。有多种原因

  • SQL语法差异,包括DML,DDL语句,存储过程,触发器等
  • 在一个数据库上执行的性能优化在另一个数据库上无效
  • SQLite是嵌入式数据库,PostgreSQL不是
  • 他们不支持相同的数据类型
  • 配置/设置db的不同语法/命令。 SQLite使用PRAGMA

除非你有一个非常非常好的理由,否则应该坚持使用一个数据库引擎。我想不出任何一个。