28

本番のHerokuデータベースを開発マシンにインポートしようとしています。

私のローカルデータベースはPostgreSQLです。

まず、ダンプをHerokuから自分のマシンにエクスポートします

curl -o latest.dump `heroku pgbackups:url`

次に、でローカルデータベースを削除してrake db:dropから、を使用して空のデータベースを再度作成しますrake db:create

私が得ている問題は、実際にダンプをデータベースにインポートしようとしたときです

psql -d app_development -U myusername -f mydumpfile.sql

このようなエラーが表示され始めます

psql:latest.dump:24: ERROR:  syntax error at or near "PGDMP"
LINE 1: PGDMP
        ^
psql:latest.dump:28: ERROR:  syntax error at or near ""
LINE 1:     INCREMENT BY 1
        ^
psql:latest.dump:36: ERROR:  syntax error at or near ""
LINE 1:     id integer NOT NULL,
        ^
psql:latest.dump:40: ERROR:  syntax error at or near ""
LINE 1:     INCREMENT BY 1
        ^
psql:latest.dump:45: ERROR:  syntax error at or near ""
LINE 1:     id integer NOT NULL,
        ^
psql:latest.dump:49: ERROR:  syntax error at or near ""
LINE 1:     INCREMENT BY 1

... 

psql:latest.dump:1601: invalid command \S4???(?̭?A?|c?e0<00K?A?}FϚ?????A(??~?t?I?????G(?    K???l??k"?H?ȁ?ͲS?,N*?[(@??a5J??j}
psql:latest.dump:1602: invalid command \??k???|??w???h?
psql:latest.dump:1603: invalid command \=??????o?h?
psql:latest.dump:1609: invalid command \????^.?????????E???/-???+??>#?ؚE?.2)Ȯ&????    g????"7},_??]?:?f?Tr|o???)?p????h?KO?08[Rqu???|3?cW?ڮ?ahbm??H?H8??$???2?a?-أ
psql:latest.dump:1613: invalid command \D!qVS???L??*??׬R??I!???
psql:latest.dump:1614: invalid command \??-?}Q
psql:latest.dump:12565: ERROR:  invalid byte sequence for encoding "UTF8": 0xb0

これが何が起こっているのか、そしてそれをどのように解決するのか、何か考えはありますか?

4

6 に答える 6

55

psqlが実際に圧縮ダンプを提供しているときにSQLクエリを解釈しようとするため、エラーが表示されます(これは、herokuが使用するものです)。

ダンプを読み取ることはできませんがpg_restore -O latest.dump、psqlにパイプできる有効なSQLが提供されますが、簡単な解決策は次のとおりです。

pg_restore -O -d app_development latest.dump

ノート :

  • -Oリモートのherokupostgresdbのランダムなユーザー名をおそらく使用しないために使用します。
  • Herokuはタップの使用を推奨していませんが、それがどれほど危険かはわかりません。
于 2012-07-09T08:37:28.063 に答える
39


ターミナル(Heroku Dev Center)で次の4つの簡単な手順に従います。

  1. データベースのバックアップコピーを作成します。

    $ heroku pg:backups capture DATABASE_NAME
    
  2. curlを使用してHerokuから(ローカルマシンに)コピーをダウンロードします。

    $ curl -o latest.dump `heroku pg:backups public-url`
    
  3. ロードする*:

    $ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U YOUR_USERNAME -d DATABASE_NAME latest.dump
    
    • YOUR_USERNAMEを取得し、config/database.ymlファイルから目的のデータベースを選択します。
    • DATABASE_NAMEは、開発/テスト/本番データベースにすることができます(例:mydb_development)

それでおしまい!

于 2014-03-19T02:58:00.543 に答える
3

Tapsジェムを使用してください。heroku db:pullこれにより、ローカルデータベースに簡単にデータを入力することができます。

于 2012-06-01T15:33:10.003 に答える
0

ローカルマシンにPostgresをセットアップする必要を避けたかったのです(簡単な手順を探しているだけなら、データベースを吹き飛ばして再作成するのは面倒です)。Dockerを実行しているローカルのPostgresデータベースでこれを行うための正確な手順をまとめました。グーグルが私をこの質問に連れて来続けたので、私はここにリンクを追加しています(そしてそれはおそらくあなたが探しているものではありませんが、可能な解決策です): https ://gist.github.com/locofocos/badd43131f14b3e40c760741d5a26471

于 2017-12-01T05:32:17.400 に答える
0

Herokuは、dbの.dump拡張子ファイルをエクスポートして、独自の基準と条件を設定することにより、任意のリレーショナルDBにインポートします。ローカルのpostgresDBにインポートする際、まずファイルlatest.dumpをローカルマシンにダウンロードしてから実行します。

pg_restore -h localhost -p 5432 -U postgres_username -d db_name -v latest.dump

Railsサーバーを再起動します。

于 2020-06-10T07:01:05.677 に答える
0

これまでの最高投票数の回答に対する2021年後半の更新(うまく機能します):

$ rails db:drop db:create db:migrate

$ heroku pg:backups Capture DATABASE_URL

$ curl -olatest.dumpheroku pg:backups public-url

$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U YOUR_USERNAME -d DATABASE_NAME latest.dump

  • ローカルマシンでYOUR_USERNAMEを取得します

  • DATABASE_NAMEは、config / database.ymlファイルからの開発/テスト/本番データベース(例:rails_react_bootstrap_development)にすることができます。

  • DATABASE_URLは、設定する必要のある変数またはサンプルコードではありません。有効なherokuオプションです

于 2021-12-05T10:44:06.563 に答える