繁体   English   中英

pg_restore分隔符

[英]pg_restore delimiter

我有一个Postgresql转储(使用pg_dump创建,自定义压缩格式)。 我想将它pg_restore到STDOUT,但是用管道替换制表符分隔。 我已经尝试过通过tr使用管道,但是我确实有很多文本字段实际上包含制表符,tr显然不尊重引号。 有数百亿个输出行(压缩文件> 500 GB),因此我确实需要一个相对有效的解决方案。

如果必须快速,请使用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编译,并通过结果程序进行管道gcc bartab.c -o bartab

最好的选择是使用

COPY tablename TO STDOUT WITH CSV DELIMITER '|';

从数据库内部执行此操作,而不要使用转储文件。

第二种选择是使用--inserts开关进行新的转储,然后解析以INSERT开头的行。 那也太慢了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM