我以 JSON 的形式从数据库中导出了一些数据,它本质上只是一个[列表],其中包含一堆(900K){objects}。
现在尝试将其导入到我的生产服务器上,但我有一些便宜的网络服务器。他们不喜欢我在 10 分钟内吃掉他们所有的资源。
如何将该文件分割成更小的块,以便我可以逐块导入它?
Edit:实际上,它是一个 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)
dump:
pg_dump -U username -t table database > filename
restore:
psql -U username < filename
(我不知道 pg_restore 到底做了什么,但它给了我错误)
有关此的教程很方便地忽略了这些信息,尤其是。这-U
在大多数情况下这可能是必要的选项。是的,手册页对此进行了解释,但是筛选 50 个您不关心的选项总是很痛苦。
我最终接受了肯尼的建议……尽管这仍然是一个很大的痛苦。我必须将表转储到文件中,压缩它,上传它,提取它,然后尝试导入它,但生产中的数据略有不同,并且缺少一些外键(邮政编码附加到城市)。当然,我不能只导入新城市,因为这样它会抛出重复的键错误,而不是默默地忽略它,这本来就很好。所以我不得不清空那张桌子,对城市重复这个过程,却发现还有其他东西与城市相关,所以我也不得不清空那张桌子。回到城市,然后我终于可以导入我的邮政编码了。到目前为止,我已经删除了一半的数据库,因为一切都相互关联,我必须重新创建所有条目。迷人的。还好我还没有启动该网站。另外,“清空”或截断表似乎不会重置序列/自动增量,这是我想要的,因为有几个神奇的条目我想要 ID 1。所以..我必须删除或重置这些也是(我不知道怎么做),所以我手动将它们的 PK 编辑回 1。
我会在 phihag 的解决方案中遇到类似的问题,而且我必须一次导入 17 个文件,除非我编写另一个导入脚本来匹配导出脚本。虽然他确实从字面上回答了我的问题,所以谢谢。