• ベストアンサー

copy コマンドの動作

テキストファイルをpostgresの 'COPY'コマンドにてテーブルへ取り込みを行っています。 文字コードはEUC(CSV)からEUC(POSTGRES)です。 CSVの中で、半角のカナや記号のようなものが混じっていた場合など、COPYコマンドがエラーをおこします。 そこで実行が止まってしまい、テーブルへは何も入っていない状態になります。 COPYコマンドでエラーの起きた行は読み飛ばして取り込みを続けることは出来ないのでしょうか?

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

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

私も似たような経験がありますが、その都度データを直していました。 実際、copy コマンドのオプションにはあなたの欲する機能はなかったと思います。 CSV のデータを一回 Perl か何かを使って、半角カナを全角に変換してみてはどうでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • tomy06
  • ベストアンサー率25% (58/224)
回答No.2

私の場合、PHPのmb_convert_kanaコマンドを使って全て、全角に統一してから登録しました

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • COPY時のtimestamp型について

    どなたかご存知の方、ご教示下さい! CSVファイルよりCOPYコマンドでテーブルにレコードをインポートしようとしているのですが、 その際、timestamp型についてNULLだった場合には\Nを記述する様にしました。 ところが下記の様なテーブルの場合に、COPYが上手くいきません。 <テーブル TEST> AAA varchar(10) BBB timestamp CCC varchar(10) DDD timestamp <CSVファイル TEST.csv> てすと,\N,てすと,\N <実行したコマンド> COPY TEST from 'TEST.csv' using delimiters ','; <psqlのエラーメッセージ> ERROR: copy: line 1, Bad timestamp external representation '\N カラムBBBは問題ないのですが、 カラムDDD(最後尾のカラム)がNULLの場合にエラーになってしまいます。 何か特別な記述が必要なのでしょうか??? 情報お持ちの方いらっしゃいましたらどうぞよろしくお願い致します。

  • テーブルにcsvファイルをインポートできない

    かなり困っています。REDHAT LINUXでpostgresのテーブルにpsqlからのCOPYコマンドでcsvファイルのデータをインポートしようとしているのですが、文字数オーバーのエラーがでてしまいます。テーブルは2列で1つ目の列はCHAR(10)で2列目はINT4型です。csvファイルの内容はとりあえず1行だけ入れていて「"1234567890","1234"」を入れています。コマンドはpsqlで「COPY テーブル FROM 'ファイルのパス' USING DELIMITER ","」で行いました。エラーはおそらくインポートしたデータがおかしくなって変な桁数になっているのですが、どういうふうにおかしくなっているのかがよくわからないので対策できません。

  • PostgresのCOPY文はできない?

    Postgres7.3.4 を使用しています。 サーバ内にファイルを作成し、 それをまとめてDBに受入れるシステムを作成中です。 ファイルを作成するところまでは問題ないのですが、 JDBC経由で COPY文を発行できず困っています。 具体的には Statement stmt = conn.createStatement(); Stirng sql = "COPY table FROM 'file'"; stmt.execute(sql); ということをしたいのですが実行時エラーになります。 Exception in thread "main" java.sql.SQLException: ERROR: copy: line 1, Invalid EUC_JP character sequence found (0xbb00) 「文字シーケンスが無効です。」ということですが・・・ Connectionはスーパーユーザ権限で作成しています。 psqlコマンドで直接COPY文を実行すると成功します。 文字コードの問題なのでしょうか? あるいは insert文を使うようにするしかないのでしょうか?

    • ベストアンサー
    • Java
  • postgreSQLのCOPY コマンド&serial型について。

    はじめまして。 最近からpostgreSQLを使ってデータベースを作っています。初めてのデータベース作成なので、少し手間取っていますが、宜しくお願いします。 テキストエディタを使って、タブ区切りで保存したファイルは、postgreSQLに、\copyコマンドでテーブルの中へ 流し込むことができると思いますが、テーブルを作成した際に、 CREATE TABLE ***(←テーブル名) (id SERIAL PRIMARY KEY,○○ △△,..........,); とテーブルを作ったのですが、1列目のSERIALが邪魔をするのか、COPYコマンドを使ってもテーブル内にデータが入っていきません・・・ エラーは『": can't parse "ne 119, pg_atoi: error in "』と返ってきます。 タブ区切りテキストファイルで、一括登録する際、serial型でうまく自動発番できるファイルの書き方とかありますか? 現在、仕事でデータベースを作っているのですが、扱っているデータの数が、12万件近くあるので、全てを手動で登録するのは、ちょっとキツイです・・・ 回答の方、宜しくお願いします。(質問の内容が、うまく伝わっていなかったら、ゴメンナサイ。)

  • COPYコマンドの対象テーブルのフォールドを配列にした場合

    COPYコマンドを利用し、CSVファイルデータをテーブルへ登録しようと思うのですが、CSVファイルの1行のデータ数が300あります。300のフィールドを作成せずにフィールドを配列にしたみましたが、うまくいきません。配列では不可能でしょうか。 CSVファイルの1行のデータ数が多い場合は、何かよい方法がありますでしょうか。 CSVファイル No,Data1,Data2,....Data300 テーブル CREATE TABLE Data_log ( No int4, IN_data float8[] ) WITHOUT OIDS; SQL文 COPY Data_log from '" & ファイルパス & "' WITH DELIMITER ',';" 上の様に作成しましたが、SQLがうまくいきません。 どうぞ宜しくお願い致します。

  • コマンド DIRの動作について

    バッチファイルのDIRコマンドでよく分からない事が あるので、ご存知の方、ご教授願います。 あるフォルダ(仮にC:\test\とします。)の中に1行だけ記述された CSVファイルが大量にあります。 これをCOPYコマンドで1ファイルにまとめたいと思います。 しかし、そのフォルダの中にはサブディレクトリがあり、その中にも COPYコマンドの対象としたいCSVファイルがあります。 COPYコマンドはサブディレクトリまで処理対象としてくれない ようですし、サブディレクトリの数は不特定なので、どうしょうかと 困っていたら、あるWebページを見つけました。 ttp://www.fpcu.jp/dosvcmd/bbs/log/copyxcopy/4-1567.html やりたい事はまさにドンピシャで、そのページのコマンドを 自分流に書き換えつつ、完成したのが、以下のコードです。 MKDIR "C:\test2\" XCOPY "C:\test\*.csv" "C:\test2\" /E /Y for /f %%a in ('dir "C:\test\" /b') do XCOPY "C:\test\\%%a\*.csv" "C:\test2\" /E /Y COPY "C:\test2\*.csv" "C:\test2\log.csv" ※変な所で改行が入って見難くなっていたらゴメンナサイ。 上記、コードで試してみた所、WindowsXPでは問題なく動作しました。 しかし、Windows2000で試してみた所、うまく動きませんでした。 PAUSEコマンドを入れて、どんなコマンドが吐かれているのか見たら サブディレクトリを動的に変えようとしてい%%aの中に「ドライブ」 とか「ボリューム」とか入ってくるのです。最初は意味不明でしたが DIRのbオプションを付けない時に、そういう文字がコマンドプロンプト の画面に表示され、それを取得しているんじゃないかという事に 気づきました。ちなみにWindows2000でもDIR C:\test /bとやると フォルダ名、ファイル名しかコマンドプロンプトの画面には表示されません。 気づいたはいいんですが、解決方法が分かりません。 どなたか、コマンドに詳しい方、ご教授ください。 よろしくお願いします。

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

    PostgreSQLバージョン 9 OS:RedHat 現在Oracleからの移行でPostgreSQLにてTEXT取り込み処理を作成しています。 OracleではSQLLoaderを使用して取り込んでいましたが、 PostgreSQLではCOPYコマンドを使用すれば取り込みできるところまで調べました。 しかし、行末に区切文字があるためうまく取り込みできません。 【コマンド】 \copy hoge from 'hoge.txt' delimiters '|'; 【行末に区切文字がある場合NG】 AAA|BBB|CCC| ERROR: extra data after last expected column CONTEXT: COPY hoge, line 1: "AAA|BBB|CCC|" 【行末に区切文字がない場合OK】 AAA|BBB|CCC SQLLoaderでは行末の区切文字があっても取り込めましたが COPYコマンドでは取り込めないようです。 回避策はないのでしょうか? (取引先からのTEXTなので相談はして見ますがレイアウトの変更は難しいかもしれません。) 回避策がない場合、行末の区切文字を削除する方法はありますでしょうか? 行末だけの区切文字を削除する方法が分かりません。 (テキストは固定長でないため、桁数を指定した削除ができません) 行末区切文字削除の方法だけでも良いのでお願いします。

  • csvデータをインポートできない

    書籍にLinux(RedHat8.0)、PostgreSQLのユーザ名とデータベース名とを同一にするように記載されていました。このため、"database_6"というもの作成しました。ところが、テーブル作成、テーブル確認には、データベース接続後、所定のコマンドを実行することで問題はありませんでしたが、インポート時には、 ERROR: could not open file "/home/database_6/database_euc_4.csv" for reading: 許可がありませえん とエラーメッセージが表示されます。そこで、アクセス権限を調べると、 -r-xr-xr-x 1 database_6 database_6 113166 6月 5 19:37 database_euc_4.csv これは、Linuxの"database_6"であって、PostgreSQLの"database_6"ではないと考えられます。どのようにすれば、アクセス権限を変更できるでしょうか?ここでは、同一名称にしたことが、仇になっているようです。こうならないようにするために、同一名称にするのかと思っていましたが…。 ちなみに、database_6のOwnerは"postgres"になっています。"postgres"にアクセス権限を与えるのも1つの方法かと思いますが、インポートを実行しようとすると、 -bash: COPY: command not found とエラーメッセージが表示され、パスが通っていないようです。これは、~/.bash_profileが上手く読み込まれていないということでしょうか?

  • vb.netからpsqlコマンドを実行するには

    DBサーバー:Linux、Postgresql 8.4.9 クライアント:Windows7 pro、vb.net 2010 にて開発を行っております。 ■経緯 copyコマンドを使用して、クライアントにあるcsvファイルのデータを DBテーブルに一括登録したいと考えております。 まず、「COPY table FROM 'csvファイルパス' 」で試したところ、  ファイル経由のCOPY FROM、COPY TOを行うにはスーパーユーザでなければなりません  標準入出力経由のCOPYは誰でも実行可能です。またpsqlの\\copyも誰でも実行できます 旨のエラーが返ってきた為、下記の方法を考えております。 ■質問内容 psqlからのcopyにより、登録を行おうと考えている。 その際に、vb.netからpsqlコマンドの実行がそもそも可能なのかどうか、 (Linux上のpsqlコマンドなのだから、vb.netから実行できない?) 根本的なところからの質問となってしまいますが よろしくお願いいたします。 また、上記実装を開設してるサイトなどもございましたら、 ご教授願います。よろしくお願いいたします。

  • COPYコマンドで結合すると余計な改行コードができる

    batファイル内でCOPYコマンドで2つのファイルを結合するコードを書いています。 しかし、中身が空の0KBのデータ同士を結合すると、改行データが1つ含まれる1KBのデータが作成されてしまいます。 この改行データの作成を防ぐにはどのようなコマンドを書けばよろしいでしょうか。どなたかご存知の方がいれば宜しくお願い致します。 【2つのファイルを用意】 test01.txt 0KB test02.txt 0KB ↓ 【結合】 COPY test*.txt test.txt ↓ 【改行コードを含むテキストが作成される】 text.txt 1KB

このQ&Aのポイント
  • EP-705Aの接続方法について、初心者の方に分かりやすく解説します。
  • EP-705Aの中古機を購入しましたが、印刷ができない場合のトラブルシューティング方法をご紹介します。
  • EP-705Aのインク交換や接続の問題に関する質問にお答えします。
回答を見る