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