将postgres转储插入转换为批处理事务?

时间:2012-08-07 15:47:38

标签: postgresql

我正在搜索工具/脚本,将千兆字节大小的postgresql转储文件转换为批处理事务提交文件。

它应该在转储文件中插入BEGINCOMMIT个事务,如下所示:

BEGIN;
CREATE...;
INSERT...;
INSERT...;
INSERT...;
...
COMMIT; 
BEGIN;
CREATE...;
INSERT...;
INSERT...;
INSERT...;
....

是。任何东西都比插入语句更好。问题是数据包含千兆字节的插入语句,并且无法访问交付伙伴以发送另一种转储格式。

您知道转换/加速导入的工具吗?

2 个答案:

答案 0 :(得分:1)

您应该考虑使用COPY command\copy meta-command of psqlpg_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