web-dev-qa-db-ja.com

herokuで.sqlスクリプトを実行する方法は?

Herokuのpostgresデータベースで実行したい一連の挿入コマンドを含む.sqlファイルがあります。しかし、私はそれを行う方法がわかりません:-

Postgresコンソールにアクセスできる場合、次のように入力します。

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

しかし、herokuはこのコマンドをサポートしていないようです。私が試した

heroku pg:psql

しかし、それではファイルを入力できません。

他のオプションはありますか?

59
Byron Singh

データベースのシードのようなものについては、Richard Brownの答えをお勧めします。Railsシードメカニズム、またはrakeタスクのようにスクリプト化されたもののようなものを使用するほうが間違いなく良いでしょう。

とはいえ、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
108
catsby

なぜpsqlを使用しないのですか?

heroku configの出力を見ると、アプリケーションが使用しているデータベースURL(DATABASE_URLキー)が表示されます。これを取得し、psql all良いだろう。

例えば

DATABASE_URL:  postgres://username:password@Host:port/dbname

になる

psql -h Host -p port -d dbname -U username -f datafile.sql
19
John Beynon

私はテスト可能で繰り返し可能なアップデートが好きです。データベースを更新する必要があるときは、更新を実行するrakeタスクを作成します。そうすれば、最初にテストに対して実行して、実稼働環境で実行する前に出力が正しいことを保証できます。

これが最初のデータベースロードであるか、それ以降の実行であるかについては言及しませんが、新しいデータをRailsデータベースにロードするための規則は、db:seeddb:migrateタスクの完了後に実行できます。

参照: http://justinfrench.com/notebook/a-custom-rake-task-to-reset-and-seed-your-database そして: http:// railscasts。 com/episodes/179-seed-data

3
Richard Brown