web-dev-qa-db-fra.com

Chargez un structure.sql dans une base de données Rails via rake

rake db:schema:load chargera un schema.rb fichier dans une base de données Rails. Existe-t-il un moyen de charger un structure.sql fichier dans la base de données par râteau ou dois-je simplement le faire manuellement?

47
locoboy

Utilisation rake db:structure:load, qui chargera db/structure.sql.

[Mise à jour]

Si vous souhaitez charger un autre fichier, vous pouvez spécifier son chemin via

  • SCHEMA variable d'environnement (Rails 5.0 ou version ultérieure)
  • DB_STRUCTURE variable d'environnement (Rails 4.x)

Par exemple, exécutez

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

ou

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

Utilisez simplement

rake db:setup

qui utilisera soit schema.rb ou structure.sql selon votre configuration.

27
nathanvda

Utilisez le propre mécanisme de chargement SQL de la base de données.

Pour Postgres, cela devrait fonctionner (au moins si la base de données existe et que vous n'avez pas besoin d'un mot de passe):

psql -d databaseName < db/structure.sql

Sur Heroku où rake db: setup ne fonctionne pas car vous ne pouvez pas créer une base de données comme celle-ci, vous pouvez le faire:

heroku pg:psql < db/structure.sql
6
Joseph Lord

Parfois, vous souhaitez charger un fichier qui n'est pas la valeur par défaut db/structure.sql.

Pour Rails 4.2 et versions antérieures, utilisez

DB_STRUCTURE=some_file.sql rake db:structure:load

À partir de Rails 5 use

SCHEMA=some_file.sql rake db:structure:load

2
jpayne

Une fois que vous avez chargé votre schéma, vous pouvez essayer:

Rails dbconsole < structure.sql

OR

Rails db < structure.sql
2
JstRoRR

Faites votre fichier seeds.rb comme:

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 .

1