Как выполнить .sql script на герою?

У меня есть .sql файл с кучей команд вставки, которые я хочу выполнить в моей базе данных postgres на heroku. Но я не знаю, как это сделать: -

Если у меня был доступ к консоли postgres, я бы набрал следующее:

psql -h localhost -d database -U username -f datafile.sql

но похоже, что heroku не поддерживает эту команду. Я пробовал с помощью

heroku pg:psql

но это не позволяет мне вводить файл.

Есть ли другие варианты?

Ответ 1

Для таких вещей, как посев базы данных, я рекомендую Ричарду Брауну ответить: вам, возможно, лучше использовать что-то вроде механизма семян Rails или что-то вроде сценария, как грабли.

Тем не менее, возможность обрабатывать sql (raw или файл) является полезной функцией, особенно для идемпотентных вещей, таких как простые поисковые запросы или обычные запросы. В этом случае вы можете выполнить свой локальный sql с любым из следующих действий:

$ 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

Ответ 2

Почему бы просто не использовать psql?

Если вы посмотрите на результат heroku config, вы увидите URL-адреса базы данных (ключ DATABASE_URL), которые использует ваше приложение, - если вы возьмете это и разделите их на нужные биты для использования с помощью psql, все будут быть хорошим.

например,

DATABASE_URL:  postgres://username:[email protected]:port/dbname

становится

psql -h host -p port -d dbname -U username -f datafile.sql

Ответ 3

Мне нравятся обновления, которые можно тестировать и воспроизводить. Когда мне нужно обновить базу данных, я пишу задачу рейка для выполнения обновления; таким образом, вы можете запустить его сначала против теста, чтобы гарантировать правильность вывода перед началом работы.

Вы не упомянули, является ли это начальной загрузкой базы данных или одним запуском позже, но соглашение о загрузке свежих данных в базу данных Rails заключается в создании файла rake db:seed, который можно выполнить после выполнения задачи db:migrate делается.

Смотрите: http://justinfrench.com/notebook/a-custom-rake-task-to-reset-and-seed-your-database И: http://railscasts.com/episodes/179-seed-data