我以JSON的形式从我的数据库中导出了一些数据,基本上只有一个[list],里面有一堆(900K)的{objects}.
现在尝试在我的生产服务器上导入它,但我有一些便宜的Web服务器.当我吃掉所有资源10分钟时,他们不喜欢它.
如何将此文件拆分为较小的块,以便我可以逐个导入它?
编辑:实际上,它是一个PostgreSQL数据库.我对如何以块的形式导出所有数据的其他建议持开放态度.我的服务器上安装了phpPgAdmin,据说可以接受CSV,Tabbed和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)
Run Code Online (Sandbox Code Playgroud)
倾倒:
pg_dump -U username -t table database > filename
Run Code Online (Sandbox Code Playgroud)
恢复:
psql -U username < filename
Run Code Online (Sandbox Code Playgroud)
(我不知道什么是pg_restore,但它给了我错误)
有关这方面的教程可以方便地提供这些信息,尤其是 -U在大多数情况下可能需要的选项.是的,手册页解释了这一点,但筛选50个您不关心的选项总是很痛苦.
我最终选择了Kenny的建议......虽然这仍然是一个很大的痛苦.我不得不将表转储到一个文件,压缩它,上传,提取它,然后我尝试导入它,但数据在生产上略有不同,并且有一些丢失的外键(邮政编码附加到城市).当然,我不能只导入新的城市,因为它会抛出一个重复的键错误,而不是默默地忽略它,这本来是不错的.所以我不得不清空那张桌子,为城市重复这个过程,只是意识到其他东西与城市联系在一起,所以我也必须清空那张桌子.让城市重新进入,最后我可以导入我的邮政编码.到目前为止,我已经删除了一半的数据库,因为一切都与所有内容联系在一起,我不得不重新创建所有条目.可爱.好的我还没有推出这个网站.同样"清空"或截断表似乎没有重置我想要的序列/自动增量,因为有几个魔术条目我想要ID 1.所以..我将不得不删除或重置那些(我不知道怎么做),所以我手动编辑了那些回到1的PK.
我会遇到与phihag解决方案类似的问题,而且我不得不一次导入一个文件,除非我写了另一个导入脚本来匹配导出脚本.虽然他的字面意思确实回答了我的问题,但是谢谢.