在现有的rails应用程序上从Sqlite3切换到PostgreSQL

时间:2013-08-09 14:37:27

标签: ruby-on-rails ruby-on-rails-3 postgresql sqlite

当我尝试在现有应用程序中从sqlite3切换到postgresql时,我遇到了rake db:migrate的问题,我做了以下

1 - rake db:create

2- rake db:migrate我收到了这个错误:

== AddColumn1: migrating ===================================================== -- add_column(:users, :first_name, :string) rake aborted! An error has occurred, this and all later migrations canceled: PG::Error: ERROR: relation "users" does not exist

3- rake db:reset

4- rake db:migrate,现在完成迁移没有错误

我丢失了我的数据,特别是我的管理员用户因为rake db:reset而我的问题是:

1-为什么我被迫使用rake db:reset

2-有没有办法将我的数据从数据库引擎传输到另一个引擎而不会在下一次丢失它?

3-对于PostgreSQL我不能使用空白密码,它说fe_sendauth: no password supplied,添加密码后这个错误消失了,在另一个数据库引擎中使用密码而不是Sqlite3是必须的吗?

如果我在开发中使用另一个数据库引擎,那么Heroku是否还需要重置或类似Github会接受数据?

4 个答案:

答案 0 :(得分:4)

这个Railscast是一个很好的迁移资源,应该回答你的大部分问题:

http://railscasts.com/episodes/342-migrating-to-postgresql

答案 1 :(得分:3)

那么,你说的是你在sqlite3数据库中丢失了数据?这不应该发生。您是否更改了config文件夹中的database.yml以将您的应用指向新的Postgres数据库?如果您确实将其指向新数据库,那么您不应该丢失sqlite3数据库中的任何数据,因为该应用程序不再会出现这种情况。

如果您确实已将db配置更改为使用新数据库,则可能没有丢失任何数据。我希望是这样的。 :)

1-为什么我被迫使用rake db:reset?

我不认为你必须在你的新数据库上运行rake db:reset,除非你的迁移文件搞砸了。

2-有没有办法将我的数据从数据库引擎传输到另一个引擎而不会在下一次丢失它?

您可以创建一个rake任务或指向两个数据库实例的脚本(旧实例和要迁移到的新实例)。然后,您可以从旧数据库中提取数据,然后根据需要按摩数据(每个RDBM都有自己的小的语法差异)并将它们加载到新数据库。

3,对于PostgreSQL我无法使用空白密码,它说fe_sendauth:没有提供密码,添加密码后这个错误消失了,在另一个数据库引擎中使用密码而不是Sqlite3是必须的吗?

这取决于您如何设置您创建的Postgres数据库实例...

如果我在开发中使用另一个数据库引擎,那么Heroku是否还需要重置或类似Github会接受数据?

在Heroku上设置数据库非常简单。您所要做的就是:

heroku crate your-app-name
git push heroku master
heroku run db:migrate

但是,我认为您的迁移文件存在一些问题。不过,您实际上可以在Heroku上获取数据库的用户名/密码,然后使用您的脚本将数据从本地数据库推送到它。

我希望这有帮助!

答案 2 :(得分:1)

如果您使用的是Devise,则可以使用以下方式重新加载用户帐户信息:

rake db:seed

答案 3 :(得分:0)

请参阅本指南https://www.digitalocean.com/community/tutorials/how-to-set-up-ruby-on-rails-with-postgres,以便您可以通过更改database.yml和Gemfile来手动重新创建该过程。

如果您需要迁移数据库信息,请运行

pgloader ./production.sqlite3 postgres://username:password@localhost/database

选中https://migara.li/2017/07/24/migrating-from-sqlite-to-postgres/

水龙头等其他替代品目前无法正常工作 http://railscasts.com/episodes/342-migrating-to-postgresql