0

我正在寻找一个工具/脚本来将千兆字节大小的 postgresql 转储文件转换为批处理事务提交文件。

它应该像这样在转储文件中插入BEGINCOMMIT事务:

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

是的。任何事情都会比插入语句更好。问题是数据由数千兆字节的插入语句组成,并且交付伙伴无法发送另一种转储格式。

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

4

2 回答 2

1

您应该考虑使用COPY命令\copy元命令psqlpg_bulkload实用程序。其中任何一个都应该比您展示的 Ruby 脚本快得多,并且已经过正确处理数据中的换行符和其他奇数字符的良好测试。

于 2012-08-07T16:21:42.253 回答
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

于 2012-08-07T15:47:38.280 回答