J'ai un fichier .sql avec un tas de commandes d'insertion que je veux exécuter sur ma base de données postgres sur heroku. Mais je ne sais pas comment faire: -
Si j'avais accès à la console postgres, je taperais ce qui suit:
psql -h localhost -d database -U username -f datafile.sql
mais il semble que heroku ne supporte pas cette commande. J'ai essayé avec
heroku pg:psql
mais cela ne me permet pas d'entrer un fichier.
Il y a-t-il des alternatives?
Pour des choses comme l'amorçage d'une base de données, je recommande la réponse de Richard Brown: il vaut sans doute mieux utiliser quelque chose comme Rails mécanisme de graines, ou quelque chose de scripté comme une tâche de râteau.
Cela dit, être capable de diriger SQL (brut ou un fichier) est une fonctionnalité utile, en particulier pour les choses idempotentes comme les simples recherches ou les requêtes de routine. Dans ce cas, vous pouvez exécuter votre sql local avec l'un des éléments suivants:
$ cat file.sql | heroku pg:psql --app app_name
$ echo "select * from table;" | heroku pg:psql --app app_name
$ heroku pg:psql --app app_name < file.sql
Pourquoi ne pas simplement utiliser psql?
Si vous regardez la sortie de heroku config
vous verrez les URL de base de données (clé DATABASE_URL) que votre application utilise - si vous prenez ceci et les séparez en les bons bits pour les utiliser avec psql
tout ira bien.
par exemple
DATABASE_URL: postgres://username:password@Host:port/dbname
devient
psql -h Host -p port -d dbname -U username -f datafile.sql
J'aime les mises à jour testables et répétables. Lorsque j'ai besoin de mettre à jour la base de données, j'écris une tâche de râteau pour effectuer la mise à jour; De cette façon, vous pouvez d'abord l'exécuter contre test pour garantir que la sortie est correcte avant de l'exécuter en production.
Vous ne mentionnez pas s'il s'agit d'un chargement de base de données initial ou d'une exécution ultérieure, mais la convention pour charger de nouvelles données dans une base de données Rails consiste à créer un db:seed
fichier rake que vous pouvez exécuter après votre db:migrate
la tâche est terminée.
Voir: http://justinfrench.com/notebook/a-custom-rake-task-to-reset-and-seed-your-database Et: http: // railscasts. com/episodes/179-seed-data