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

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

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

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

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

我在开发和postgres中使用了sqlite3一段时间,但最近在任何地方切换到postgres。

如果您同时使用两者,请注意:

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

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

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

  • 你不会得到像ilike,新的键/值存储,全文搜索等postgresfunction

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

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

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

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

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