Rails和SQlite3 - 从SQlite3迁移到PostgreSQL

时间:2014-06-10 09:55:08

标签: ruby-on-rails ruby postgresql sqlite

我正在使用M Hartls Rails教程书学习RoR。我对数据库世界非常陌生。我创建了应用程序(简单的一个,仅在第3章)并完成了我的RSpec并制作了一些静态页面。我想从sqllite3迁移到postgres。 我将database.yml更改为postgres删除完整的sqlite3规范。现在我运行我的应用程序它不起作用?它说' PG:'错误。

我首先需要了解数据如何存储在sqlite中?我搜索了db目录,找不到development.rb或任何数据库文件(可能是因为我更改了database.yml文件)

在这种情况下,我没有输入任何数据,(它仍然不起作用,给我错误)但一般来说,数据存储在哪里?自从我将database.yml文件更改为postgres后,现有数据会发生什么?

rake db:migrate命令的作用是什么?

如果有人给出一个简单的类比或解释是如何存储它然后找到解决这个问题的解决方案变得容易得多。

1 个答案:

答案 0 :(得分:0)

sqlite使用自己的存储系统将其数据存储在文件系统文件夹中的文件中。

postgres会做类似的事情,但在不同的文件夹中,使用不同的系统。

您通常不会触摸这些文件夹。您不需要知道它们的位置或dbms(数据库管理系统,例如sqlite或postgres)如何存储数据。您与dbms的所有交互都将通过终端或dmbs的shell客户端(您在终端中也称为shell),或通过桌面客户端,或通过rails应用程序自己与dbms的连接完成。

当你创建一个新的rails项目时,你需要创建它将使用的数据库。如果切换到使用不同的dbms,则需要在该dbms中创建一个新数据库供您的应用程序使用。谷歌如何做到这一点。

如果您在一个dbms中有数据并且想要将其带入不同的dbms,则需要从第一个dbms导出它并将其导入第二个dbms。谷歌如何做到这一点。

rake db:migrate将运行尚未在当前数据库中运行的任何迁移(即database.yml中的迁移)。 Rails在您的数据库中创建一个表来存储已经运行的迁移:这是它跟踪的方式。如果您尚未创建数据库,它将失败。