[pgsql-jp: 37261] 改行コードの自動エスケープ

EBIHARA, Yuichiro ebihara @ iplocks.co.jp
2006年 6月 20日 (火) 20:17:53 JST


こんにちは、海老原です。
ちょっとお知恵を拝借したく。

前提: PostgreSQL 7.2、及び7.3

あるテーブルのtext型の列には、改行コードを含む文字列が格納
されています。

iplocksdb=# create table test (value text);
CREATE TABLE
iplocksdb=# insert into test values('ABC\nabc\n123');
INSERT 156449 1
iplocksdb=# select value from test;
    value
-------------
 ABC
abc
123
(1 row)

このような値を「psqlから」SELECTしたときに、改行文字がエス
ケープされた状態で値を取得するのが目的です。
つまり次のような結果を得たいのです。

iplocksdb=# select replace(value, '\n', '\\n') from test;
    replace
---------------
 ABC\nabc\n123
(1 row)

これを全てのテーブル、全てのカラムについて常に適用したいので、
いちいちreplace関数を使いたくないのですが、何か良いアイディア
はありませんでしょうか。
psqlのオプションか何かをうまく使えれば非常にうれしいのですが。

最終的にやりたいことはpg_dumpやCOPYコマンドのようなデータエ
クスポートなのですが、いくつかの列をスキップしたり、列順を入
れ替えたりする必要があり、pg_dumpや7.2のCOPYでは対応できな
いため、頭を捻っているところです。

手間さえ惜しまなければ回避策は色々と考えられますので、適当な
フィルターでも作ろうかとは思っていますが、できることなら手を
抜きたいのです。

良い考えがあればぜひ教えて下さい。

--
海老原 雄一郎 / EBIHARA, Yuichiro
  Email: ebihara @ iplocks.co.jp





pgsql-jp メーリングリストの案内