我正在搜索工具/脚本,将千兆字节大小的postgresql转储文件转换为批处理事务提交文件。
它应该在转储文件中插入BEGIN
和COMMIT
个事务,如下所示:
BEGIN;
CREATE...;
INSERT...;
INSERT...;
INSERT...;
...
COMMIT;
BEGIN;
CREATE...;
INSERT...;
INSERT...;
INSERT...;
....
是。任何东西都比插入语句更好。问题是数据包含千兆字节的插入语句,并且无法访问交付伙伴以发送另一种转储格式。
您知道转换/加速导入的工具吗?
答案 0 :(得分:1)
您应该考虑使用COPY
command,\copy
meta-command of psql
或pg_bulkload
utility。其中任何一个都应该比你显示的Ruby脚本快得多,并且已经过充分测试,可以正确处理数据中的换行符和其他奇数字符。
答案 1 :(得分:0)
因为我找不到工具,所以我创建了自己的脚本来完成这项工作:
#!/usr/bin/ruby
i=0
File.open(ARGV[1],"a"){|t|
File.open(ARGV[0]){|f|
a=[]
while(l=f.gets(";"))
if(a.length==80)
i+=1
puts "i: #{i}" if(i%1000==0)
t.write("BEGIN;\n#{a.join(" ")}\nCOMMIT;\n")
a=[]
else
a<<l
end
end
t.write("BEGIN;\n#{a.join(" ")}\nCOMMIT;\n")
}
}
用法:ruby batchtransact.rb input.sql output.sql