通过rake将structure.sql加载到rails数据库中

时间:2014-04-15 18:40:45

标签: ruby-on-rails schema

rake db:schema:load会将schema.rb文件加载到rails数据库中。有没有办法通过rake将structure.sql文件加载到数据库中,还是只需要手动执行此操作?

6 个答案:

答案 0 :(得分:75)

使用rake db:structure:load,即会加载db/structure.sql

[更新]

如果要加载其他文件,可以通过

指定其路径
  • SCHEMA环境变量(Rails 5.0或更高版本)
  • DB_STRUCTURE环境变量(Rails 4.x)

例如,运行

rake db:structure:load SCHEMA=db/another.sql

rake db:structure:load DB_STRUCTURE=db/another.sql

答案 1 :(得分:27)

只需使用

rake db:setup

将使用schema.rbstructure.sql,具体取决于您的配置。

答案 2 :(得分:6)

使用数据库自​​己的SQL加载机制。

对于Postgres,这应该有效(至少如果数据库存在且您不需要密码):

psql -d databaseName < db/structure.sql

在Heroku上,rake db:setup不能正常工作,因为你可以创建一个数据库,你可以这样做:

heroku pg:psql < db/structure.sql

答案 3 :(得分:2)

加载架构后,您可以尝试:

rails dbconsole < structure.sql

OR

rails db < structure.sql

答案 4 :(得分:2)

有时您希望加载的文件不是默认的db/structure.sql

对于rails 4.2及更早版本,请使用

DB_STRUCTURE=some_file.sql rake db:structure:load

从轨道5开始使用

SCHEMA=some_file.sql rake db:structure:load

答案 5 :(得分:1)

制作您的seeds.rb文件,如:

unless Rails.env.production?
  connection = ActiveRecord::Base.connection

  sql = File.read('db/structure.sql')
  statements = sql.split(/;$/)
  statements.pop  # the last empty statement

  ActiveRecord::Base.transaction do
    statements.each do |statement|
      connection.execute(statement)
    end
  end
end

Source