データベースからJSONの形式でデータをエクスポートしました。これは、基本的に1つの[リスト]であり、その中に{objects}の束(900K)が含まれています。
今、本番サーバーにインポートしようとしていますが、安価なWebサーバーがあります。私が彼らのすべての資源を10分間食べるとき、彼らはそれを好きではありません。
このファイルを小さなチャンクに分割して、1つずつインポートできるようにするにはどうすればよいですか?
編集:実際には、それはPostgreSQLデータベースです。すべてのデータをチャンクでエクスポートする方法について、他の提案を受け入れることができます。サーバーにphpPgAdminをインストールしました。これは、CSV、タブ付き、およびXML形式を受け入れることができると思われます。
phihagのスクリプトを修正する必要がありました。
import json
with open('fixtures/PostalCodes.json','r') as infile:
o = json.load(infile)
chunkSize = 50000
for i in xrange(0, len(o), chunkSize):
with open('fixtures/postalcodes_' + ('%02d' % (i//chunkSize)) + '.json','w') as outfile:
json.dump(o[i:i+chunkSize], outfile)
投げ捨てる:
pg_dump -U username -t table database > filename
戻す:
psql -U username < filename
(pg_restoreが何をするのかわかりませんが、エラーが発生します)
これに関するチュートリアルでは、特にこの情報を省略しておくと便利です。ほとんどの-U
状況でおそらく必要なオプション。はい、manページでこれを説明していますが、気にしない50のオプションをふるいにかけるのは常に苦痛です。
私はケニーの提案に行き着きました...それはまだ大きな苦痛でしたが。テーブルをファイルにダンプし、圧縮し、アップロードし、抽出してからインポートしようとしましたが、本番環境ではデータがわずかに異なり、外部キーが欠落していました(郵便番号は都市に添付されています)。もちろん、新しい都市をインポートすることはできませんでした。それは、それを黙って無視するのではなく、重複したキーエラーをスローするためです。それで、私はそのテーブルを空にし、都市に対して同じプロセスを繰り返さなければなりませんでしたが、何か他のものが都市に結びついていることに気づいたので、私もそのテーブルを空にしなければなりませんでした。都市を取り戻した後、ようやく郵便番号をインポートできるようになりました。すべてがすべてに関連付けられており、すべてのエントリを再作成する必要があったため、これまでにデータベースの半分を消去しました。素晴らしい。私が持っていない良いこと tはまだサイトを立ち上げました。また、テーブルを「空にする」または切り捨てても、シーケンス/自動インクリメントがリセットされないようです。これは、ID 1にしたい魔法のエントリがいくつかあるためです。したがって、削除またはリセットする必要があります。それらも(方法がわかりません)、手動で編集して1に戻しました。
phihagのソリューションでも同様の問題が発生しました。さらに、エクスポートスクリプトと一致する別のインポートスクリプトを作成しない限り、一度に17個のファイルをインポートする必要がありました。彼は私の質問に文字通り答えましたが、ありがとう。