web-dev-qa-db-ja.com

herokuでプレーンテキストのpostgresデータベースダンプを取得するにはどうすればよいですか?

Herokuのpostgresデータベース(9.1)とローカルインストール(8.4)のバージョンの非互換性により、ローカルテスト環境に実稼働データのコピーを配置できるように、プレーンテキストのsqlデータベースダンプファイルが必要です。

Herokuではpg_dumpを使用してダンプを作成することはできませんが、代わりにこれを行うことができます:

$ heroku pgbackups:capture
$ curl -o my_dump_file.dump `heroku pgbackups:url`

...これにより、「プレーンテキスト形式」ではなく「カスタムデータベースダンプ形式」が得られるため、これを行うことはできません。

$ psql -d my_local_database -f my_dump_file.sql
39
user1187534

Herokuデータベースから独自のpg_dumpを直接作成できます。

まず、heroku config:get DATABASE_URLを使用してpostgres文字列を取得します。

Heroku PostgresのURL(例:HEROKU_POSTGRESQL_RED_URL: postgres://user3123:[email protected]:6212/db982398)を探します。形式はpostgres://<username>:<password>@<Host_name>:<port>/<dbname>です。

次に、コマンドラインでこれを実行します。

pg_dump --Host=<Host_name> --port=<port> --username=<username> --password --dbname=<dbname> > output.sql

ターミナルはパスワードを要求し、それを実行してoutput.sqlにダンプします。

次にインポートします:

psql -d my_local_database -f output.sql
53
Alex

HerokuのPGBackups 実際に舞台裏でpg_dumpを使用 であり、「カスタム形式」は実際には pg_dumpのカスタム形式(-Fcパラメーター) であり、Herokuの独自の形式ではありません。

つまり、Postgresの一部であるpg_restoreを使用して、Herokuバックアップを別のデータベースに直接復元できます。

pg_restore -d mydatabase my_dump_file.dump

さらに、 復元するデータベースを指定せずにpg_restoreを呼び出すと、SQLステートメントが標準出力に出力されます ので、HerokuバックアップをそのようにSQLファイルに変換できます。

pg_restore my_dump_file.dump > sql_statements.sql
24
Leigh Brenecki

環境でDATABASE_URLが構成されていると仮定すると、はるかに簡単な方法があります。

heroku run 'pg_dump $DATABASE_URL' > my_database.sql

これにより、コンテナでpg_dumpが実行され、コンテンツがローカルファイルmy_database.sqlにパイプされます。 一重引用符は重要です。二重引用符を使用する場合(または引用符をまったく使用しない場合)、DATABASE_URLは、容器。

とにかくコンテンツをローカルデータベースにロードすることが全体の目的である場合は、そこに直接パイプすることもできます。

createdb myapp_devel  # start with an empty database
heroku run 'pg_dump -xO $DATABASE_URL' | psql myapp_devel

-xOを追加すると、GRANTREVOKE、およびALTER OWNERステートメントのダンプが回避されます。これらのステートメントは、おそらくローカルデータベースサーバーには適用されません。 COPYコマンドのいずれかがエラーERROR: literal carriage return found in data(私のやった)で失敗した場合は、 この回答 を参照してください。

この質問が最初に尋ねられた2年半前には機能しなかった可能性がありますが、Heroku Postgresデータベースのダンプを簡単に取得する方法を探している人にとっては、これが最も簡単な方法のようです今日。

17
tobias.mcnulty