- ベストアンサー
COPYコマンドによるTEXT取り込みについて
- PostgreSQLにおけるTEXT取り込みの方法について調査中です。
- Oracleからの移行で、SQLLoaderからCOPYコマンドへの変更を検討しています。
- しかし、行末に区切文字がある場合、COPYコマンドでは取り込みができないようです。回避策を検討中です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
行末には必ず区切り文字が存在するのでしょうか? 案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は面倒なので)
その他の回答 (1)
- root139
- ベストアンサー率60% (488/809)
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/
お礼
回答ありがとうございます。 正規表現はあまり勉強していませんでしたが行末という正規表現もあるのですね。 これを機にもう少し勉強するようにします。
お礼
回答ありがとうございます。 やはりダミー列を入れるなど一手間加えないとダメなようですね。 対応方法を持ち帰って検討させていただきます。 テキストファイルが多いので案2は少し面倒ですね。 案1で検討させていただきます。