2011-10-10 4 views
3

私は、Postgresのダンプ(pg_dump)をフォーマットして、JDBC接続を使ってそれをインポートできるようにしようとしています。 pg_dumpは、改行を含むテキストフィールドを改行付きのテキストとしてエクスポートします。後でJDBCを使用してインポートしようとすると、行末に達し、その文は失敗します。Postgresのダンプで改行を削除する

ダンプを取ってsedを通過させてすべての改行をエスケープすると、1行に1つのINSERT文が表示されます。問題は、すべての改行を削除できないだけですが、が一致しないすべての改行を削除できることです。);\nINSERT INTOです。これを行う簡単な方法はありますか?

更新: サンプルは次のようになります。

INSERT INTO sometable (123, And here goes some text 
with 
newlines 
in 
it', 'some more fields'); 

と私が探している結果は、このようなものである:各INSERT文が上になるように

INSERT INTO sometable (123, And here goes some text\nwith\nnewlines\nin\nit', 'some more fields'); 

文字列の改行をエスケープした1行。

+1

問題の説明は非常に混乱しています。サンプル 'ダンプ'と、最終出力として必要なもの(前または後の行だけ)を表示できますか?がんばろう。 – shellter

+0

サンプルを追加して、私が探しているものを表示しました。 – cdecker

+0

SQLパーサを変更する方が、複数の行にまたがる文字リテラルに対処できるようにする方がよいでしょう。 –

答えて

1

解決策はありませんが、次の作業がありますか?

cat test_dump.txt | perl -pe "s/[^(\);INSERT INTO)]\n/\\$1\\n/" 
0

あなたはvimのでそれを行うことができます。

vim my_dump.sql 

:%s/\();\)\@<!\n\(INSERT\)\@!//c 

%は...全ラインについて行う
S ..
\ nは..改行(Unixのスタイルを、あなたはWindowsが改行のための\r\nとApple \rを持っていることを、認識している?)に置き換え

フラグ:
cが...(最初のテストのために)否定先読みで

情報を各置換を確認し、
を後読み:ヘルプの\ @!
:help \ @ <!


が正常にライン上で動作し、それは改行を置き換えるために、その方法の外に行く必要のsed。
Google for "sed multi-line replace"は、thisのようなものを見つけるでしょう。

関連する問題