简体   繁体   中英

Load a structure.sql into a rails database via rake

rake db:schema:load will load a schema.rb file into a rails database. Is there a way to load a structure.sql file into the database through rake or do I just need to do this manually?

Use rake db:structure:load , which will load db/structure.sql .

[Update]

If you want to load another file, you can specify its path via

  • SCHEMA environment variable (Rails 5.0 or later)
  • DB_STRUCTURE environment variable (Rails 4.x)

For example, run

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

or

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

Just use

rake db:setup

which will use either schema.rb or structure.sql depending on your configuration.

Use the database's own SQL load mechanism.

For Postgres this should work (at least if the database exists and you don't need a password):

psql -d databaseName < db/structure.sql

On Heroku where rake db:setup doesn't work as you can't create a database like that you can do this:

heroku pg:psql < db/structure.sql

Once you load your schema, you can try:

rails dbconsole < structure.sql

OR

rails db < structure.sql

Sometimes you want to load a file that is not the default db/structure.sql .

For rails 4.2 and earlier, use

DB_STRUCTURE=some_file.sql rake db:structure:load

As of rails 5 use

SCHEMA=some_file.sql rake db:structure:load

Make your seeds.rb file like:

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 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM