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?
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
Utilisez simplement
rake db:setup
qui utilisera soit schema.rb
ou structure.sql
selon votre configuration.
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
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
Une fois que vous avez chargé votre schéma, vous pouvez essayer:
Rails dbconsole < structure.sql
OR
Rails db < structure.sql
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 .