1

Postgresql ダンプがあります (pg_dump、カスタム圧縮形式で作成)。STDOUT に pg_restore したいのですが、タブ区切りをパイプに置き換えます。tr を介してパイプを使用してみましたが、実際にはタブを含むテキスト フィールドが多数あり、tr は明らかに引用符を尊重しません。数百億の出力行があるため (圧縮ファイルは 500 GB を超えています)、比較的効率的なソリューションが必要です。

4

2 に答える 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 '|';

ダンプファイルを使用するのではなく、データベース内からこれを行います。

2 番目のオプションは、 --inserts スイッチを使用して新しいダンプを作成し、INSERT で始まる行を解析することです。それも遅いでしょう。

于 2013-04-13T08:09:14.337 に答える