我有一个Postgresql转储(用pg_dump创建,自定义压缩格式)。我想将它转换为pg_restore,但是用管道来代替制表符分隔。我已经尝试过在tr中使用管道,但我确实有大量包含制表符的文本字段,而且tr显然不支持引号。有数百亿的输出行(压缩文件大于500 GB),所以我确实需要一个相对有效的解决方案。
发布于 2013-11-19 21:06:21
如果必须很快,请使用C。保存
#include <stdio.h>
int main()
{
int c, quoted = 0;
while (c = getchar(), c != EOF)
{
if (c == '"') quoted = !quoted;
if (c == '\t' && !quoted) c = '|';
putchar(c);
}
return quoted;
}例如,作为bartab.c,用gcc bartab.c -o bartab编译,并通过管道通过结果程序。
发布于 2013-04-13 16:09:14
您最好的选择是使用
COPY tablename TO STDOUT WITH CSV DELIMITER '|';从db内部执行此操作,而不是使用转储文件。
第二种选择是使用-- INSERT开关进行新的转储,然后解析以INSERT开头的行。这也将是缓慢的。
https://stackoverflow.com/questions/13485238
复制相似问题