我有一个 Postgresql 转储(使用 pg_dump 创建,自定义压缩格式)。我想将其 pg_restore 为 STDOUT,但用管道替换制表符分隔。我试过只通过 tr 使用管道,但我确实有大量实际包含选项卡的文本字段,并且 tr 显然不尊重引号。有数百亿的输出行(压缩文件> 500 GB),所以我确实需要一个相对高效的解决方案。
问问题
294 次
2 回答
1
如果它必须很快,请使用 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-11-19T13:06:20.910 回答
0
你最好的选择是使用
COPY tablename TO STDOUT WITH CSV DELIMITER '|';
从数据库内部执行此操作,而不是使用您的转储文件。
第二种选择是使用 --inserts 开关进行新的转储,然后解析以 INSERT 开头的行。那也会很慢。
于 2013-04-13T08:09:14.337 回答