• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:COPYコマンドによるTEXT取り込みについて)

COPYコマンドによるTEXT取り込みについて

このQ&Aのポイント
  • PostgreSQLにおけるTEXT取り込みの方法について調査中です。
  • Oracleからの移行で、SQLLoaderからCOPYコマンドへの変更を検討しています。
  • しかし、行末に区切文字がある場合、COPYコマンドでは取り込みができないようです。回避策を検討中です。

質問者が選んだベストアンサー

  • ベストアンサー
noname#212058
noname#212058
回答No.1

行末には必ず区切り文字が存在するのでしょうか? 案1A:   1. COPY先テーブルの最後に 1列ダミー列を追加し、     COPY実行。   2. COPY実行後に追加したダミー列を削除。 案1B:  COPY先テーブルにダミー列を入れるのが嫌なら、   1. COPY専用のテーブル (テーブルの最後にダミー列を     入れたもの) を別に作って、そこにCOPY実行。   2. COPY専用テーブルからCOPY先テーブルに     INSERT ~ SELECT ~ でデータを移動。   3. COPY専用テーブルを DROP。 案2:  問題のファイルがテキストであるならば、テキストエディタの  正規表現置換を使って行末の | を空白に置換。  検索文字 |$ 置き換え文字 (空白) で行けるはず。  テキストエディタは何でもよいですが、サクラエディタ等が  使えます。  http://sakura-editor.sourceforge.net/download.html 自分なら、データ量にもよりますが、案1B を使いそうな気が します。(COPYファイル数が多かったりすると案2は面倒なので)

hiroro09
質問者

お礼

回答ありがとうございます。 やはりダミー列を入れるなど一手間加えないとダメなようですね。 対応方法を持ち帰って検討させていただきます。 テキストファイルが多いので案2は少し面倒ですね。 案1で検討させていただきます。

その他の回答 (1)

  • root139
  • ベストアンサー率60% (488/809)
回答No.2

sed で行末の区切り文字を取っ払ったものを流し込んでやるのはどうですか? sed -e 's/[|]$//' hoge.txt | psql -U user_hoge -c "\copy hoge from STDIN delimiters '|';" db_hoge http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230879/

参考URL:
http://www.postgresql.jp/document/9.1/html/app-psql.html
hiroro09
質問者

お礼

回答ありがとうございます。 正規表現はあまり勉強していませんでしたが行末という正規表現もあるのですね。 これを機にもう少し勉強するようにします。

関連するQ&A