74

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

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

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

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

heroku pg:psql

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

他に選択肢はありますか?

4

4 に答える 4

128

データベースのシードなどについては、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
于 2013-03-06T01:56:10.857 に答える
25

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

出力を見るとheroku config、アプリケーションが使用しているデータベースURL(DATABASE_URLキー)が表示されます。これを取得して、allで使用するための正しいビットに分割psqlするとよいでしょう。

例えば

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

になります

psql -h host -p port -d dbname -U username -f datafile.sql
于 2013-03-07T08:59:35.650 に答える
3

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

これが最初のデータベースロードなのか、それとも後で実行するのかはわかりませんが、新しいデータをRailsデータベースにロードするための規則は、タスクの完了db:seed後に実行できるrakeファイルを作成することです。db:migrate

参照: http: //justinfrench.com/notebook/a-custom-rake-task-to-reset-and-seed-your-databaseおよび:http ://railscasts.com/episodes/179-seed-data

于 2013-03-06T01:36:39.523 に答える
0

私はすでにこの質問の恩恵を受けており、それを行うためのより良いオプションを探していたので、別のアプローチを提案します(迅速性の観点から)。

データベースシードを環境変数に条件付けました。WithSequelizeは次のようになります(以下のコードは条件付けを示すためだけのものです):

// Node.js app
if (process.env.RESTARTDB) {
  sequelize.sync({ force: true }).then(() => {
    // "init" is a raw SQL query
    sequelize.query(init);
  });
}

このファイルをクエリするたびにアプリを再起動したくない場合は、この方法はお勧めSQLしませんが、を使用するよりもはるかに高速ですheroku pg:psql

ここでは、変数を構成する方法の詳細を確認できます。

于 2020-09-03T19:00:47.197 に答える