[pgsql-jp: 33602] 改行の問題について( Re: EOFの問題について)

Koichi Hyodo sio-0 @ rh.to
2004年 7月 10日 (土) 02:02:58 JST


兵藤です
すでに以前のスレッドで加藤さんがヒントを書かれているのですが
その後のスレッドがあさっての方向に走り出しているみたいですので
質問に答えるために表題を変えました。

> From: Takao Kato <sirius @ jp.fujitsu.com>
> Date: Thu, 08 Jul 2004 19:28:21 +0900
> Subject: [pgsql-jp: 33552] Re: 改行コード、文字コードの変換について
> 
> # まぁ大多数の人が原因が何であるか予想はついていると思いますが。
> # 改行〜ってところまでたどり着いているんですからねぇ。

> From: Ryutaro Amano <wn9r-amn @ asahi-net.or.jp>
> Date: Fri, 9 Jul 2004 20:07:03 +0900
> Subject: [pgsql-jp: 33596] Re: EOFの問題について
> 
> MacOSX10.3.4にPostgreSQL7.4.3をインストールしています。
> 今回の問題は、インポートする際のファイルの改行コードの問題かと思います。


私も加藤さんや天野さんと同じように改行コードが原因だと予想しています。

まず、最初に確認したいのは、二宮さんがMacの改行コードが特殊だという事実と
元のファイルの改行コードが何であるかということをご存じかということです。

その次に、二宮さんがとるとよいと考えられることは、元データファイルの改行
コードが何であるかを元データファイルを出力したソフトにあたって確認するこ
と、それから、それを取り込む先のPostgreSQLの改行コードをどのように設定し
たかということです。
もし、ファイルをテキストエディタなどで編集したのなら、そのエディタが
その両方の改行コードを支障なく扱えるものなのかどうかを確認する必要も
あります。

天野さんの解説で十分ですが、主に二宮さんのために勝手に補足すると
改行コードなどの制御コードを表現するときに、バックスラッシュを使った
(バックスラッシュでエスケープした)表現がUnixの世界ではよく使われます。
それぞれもっと一般的に書くと
 バックスラッシュ + r は CR(キャリッジリターン)
 バックスラッシュ + n は LF(ラインフィード)
と表現されます。(GUIな変換ツールではそう表現されているものが多いです)
つまり改行コード(行区切り)は
    Macでは基本的にはCRのみ
    WindowsではCR-LF
    UnixはいろいろありますがここではLFのみと考えてよい
という相違があるということです。

もし改行コードが異なるのなら、変換する方法はたくさんあります。
MacOSXで改行コードを変換する方法は以下のメーリングリスト・ログで
話題になっていたとおもいます。(全部には目を通していないので
間違っていたらすみません)。私のお薦めは perl を使う方法です :-)

http://www.tech-arts.co.jp/macosx/macosx-jp/htdocs/17400/17427.html


ところで話を振り出しに戻します。最初のエラーに対する二宮さんの考えが
最初のメールから少し遅れて以下のようにあきらかにされています。

> From: Yasuharu Ninomiya <ninomii @ fml.nirs.go.jp>
> Date: Fri, 09 Jul 2004 16:05:55 +0900
> Subject: [pgsql-jp: 33580] Re: EOF の問題について
> 
> エラーメッセージの
> ERROR:  literal newline found in data
> HINT:  Use "¥n" to represent newline.
> を¥nを最後に書けという意味にとらえまして、

どう考えたのかをあきらかにしていただけたので
少しヒントを差し上げることができます。

これは「このアプリでは改行を表現するものとして LF を使いなさい」
という意味です。アプリが想定していない改行コードが現れたのでしょう。
こういうときには改行コードを確認したり変換したりしてみるのが定石です。

Unix世界には詳しくありませんが明示的なEOFコードが使われることは
滅多にないとおもいます。






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