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

Mat*_*use 9 sqlite postgresql ruby-on-rails heroku

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

spi*_*ike 13

我在开发中使用了sqlite3,并在生产中使用了一段时间,但最近在各地切换到了postgres.

如果你同时使用两者,注意事项:

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

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

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

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

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

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


Bil*_*kil 2

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

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

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