Herokuのpostgresデータベースで実行したい一連の挿入コマンドを含む.sqlファイルがあります。しかし、私はそれを行う方法がわかりません:-
Postgresコンソールにアクセスできる場合、次のように入力します。
psql -h localhost -d database -U username -f datafile.sql
しかし、herokuはこのコマンドをサポートしていないようです。私が試した
heroku pg:psql
しかし、それではファイルを入力できません。
他のオプションはありますか?
データベースのシードのようなものについては、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
なぜ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
私はテスト可能で繰り返し可能なアップデートが好きです。データベースを更新する必要があるときは、更新を実行するrakeタスクを作成します。そうすれば、最初にテストに対して実行して、実稼働環境で実行する前に出力が正しいことを保証できます。
これが最初のデータベースロードであるか、それ以降の実行であるかについては言及しませんが、新しいデータをRailsデータベースにロードするための規則は、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