• 締切済み

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の場合にエラーになってしまいます。 何か特別な記述が必要なのでしょうか??? 情報お持ちの方いらっしゃいましたらどうぞよろしくお願い致します。

みんなの回答

  • zebedeer
  • ベストアンサー率66% (80/121)
回答No.1

>カラムBBBは問題ないのですが、 >カラムDDD(最後尾のカラム)がNULLの場合にエラーになってしまいます。 改行コードに一票

skunkskunk
質問者

お礼

回答ありがとうございます! 私も改行が何か関係あるのか?と思い、NULLの場合の値指定を変えてみたり(\Nではなくて空白文字列とか)、 さらに改行コードを最後に付け足して試したりとかやってみたのですが、 エラーは出なくなっても本来NULLであるべき所に""が入ってしまったりで結局解決する事が出来ませんでした・・・。 時間的にも余裕が無かったので、苦肉の策ではありますが、 テンポラリのカラムを最終カラムに付け足して、COPYの後にALTER TABLEのDROP COLUMNで削除・・・という手段を取りました。 私が何か見落としてる、又はミスってると思うのですけどねぇ・・今後も調査したいと思っています。 ご回答、どうもありがとうございました。また、これまで閲覧頂いた方もありがとうございました。

関連するQ&A

  • date型に空白を入れるとエラーになる

    現在、CSVファイルからCOPYコマンドを使用し、 データのINSERTを行いたいと思っております。 で試したところ、 COPY test from '/var/lib/pgsql/csv/insert.csv' USING DELIMITERS ','; とコマンドを入力した結果 ERROR: invalid input syntax for type date: "" CONTEXT: COPY test, line 1, column purchase: "" となってしまいます。 これを回避するためには、どうすればよいでしょう。 postgresqlは初心者なので、申し訳ございませんが 教えてください。よろしくお願いいたします。

  • copy コマンドの動作

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

  • timestamp が空のデータを除いて、データを選択したい

    テスト用に簡単なテーブルを作成してみました。 テーブル名:timetest フィールド: test_id : integer NOT NULL test_date : timestamp without time zone テストデータとして 1,2005-11-15 14:01:40.026 2,NULL 3,2005-11-14 11:11:11.001 このときに test_date がNULL以外のものだけを選択したいのですが、 slect * from timetest where test_date != null; では1件も選択されず、 select * from timetest where test_date != ''; では、 ERROR: invalid input syntax for type timestamp: "" というエラーになってしました。 どなたかご教授お願い致します。

  • TIMESTAMP型のカラムに作成日時がセットされません

    WindowsでMySQL4.1.12を使っていますが、mysqlimport でインポートした時、TIMESTAMP型のカラムに作成日時 がうまく自動的にセットされません。MySQLの マニュアルにはTIMESTAMP型のカラムには\N(NULL値) を設定すればいいとあるのですが、うまくいきません。 どうしたらうまく自動的にセットされるでしょうか? よろしくお願いします。

  • 異なるキーで取得したデータの合成

    SQLに関して質問です。 以下のようなテーブルA、Bがあった場合、 【テーブルA】  カラム1  カラム2  ------------------------  AAA   CCC  BBB   DDD 【テーブルB】  カラム3  カラム4  ------------------------  AAA   1  BBB   2  CCC   3  DDD   4 次のような結果を得るにはどのようなSQL文を記述すれば良いでしょうか? 【求める結果】  カラム1  カラム2 カラム4(1) カラム4(2)  ---------------------------------------------------  AAA   CCC    1      3  BBB   DDD    2      4 非常に初歩的な質問かもしれませんが宜しくお願いいたします。

  • 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なので相談はして見ますがレイアウトの変更は難しいかもしれません。) 回避策がない場合、行末の区切文字を削除する方法はありますでしょうか? 行末だけの区切文字を削除する方法が分かりません。 (テキストは固定長でないため、桁数を指定した削除ができません) 行末区切文字削除の方法だけでも良いのでお願いします。

  • SQLPLUSにて演算子を使う方法と条件文を使いたい・・

    以下のようにspoolコマンドにてselectの結果をCSVに出力したいのですが、カンマ区切りしたいため連結していますがエラーが発生します。 spool aaa.csv select AAA || ',' || BBB || ',' ||   CCC - DDD || ',' || EEE from table_A ・・・ そうすると、引き算が引っかかっているらしく、 「ORA-01722:数値が無効です」エラーが発生します。 連結をやめて、「|| ',' ||」→「,」にすれば正常に終了します。 連結の場合に演算子を使うにはどのようにすればよいのでしょうか? また、例えば「AAA<0」の場合には、BBBに100を掛けるとかのような 他カラムでの条件により、別カラムの計算結果を変えるといったことは 可能なのでしょうか? よろしくお願い致します。

  • [MYSQL]TIMESTAMPをWHERE句に指定しUPDATEする方法

    以下のようにテーブルを作成し、TIMESTAMP型のカラムをキーにUPDATEをしたいと考えています。 create table test(time timestamp, amount int); insert into test values('2008-01-07 19:15:12',0); update test set amount = -1 where time = '2008-01-07 19:15:12'; ところがMYSQLではUPDATE後、TIMESTAMPのカラムが2008年から2009年に変化します。ORACLEで試しましたが、TIMESTAMP型のカラムは変わりませんでした。 +---------------------+--------+ | time | amount | +---------------------+--------+ | 2009-06-30 10:04:53 | -1 | +---------------------+--------+ MYSQLの独自の仕様があるのでしょうか? MYSQL 5.1.35(mysql-essential-5.1.35-win32.msi) Windows 2003 Server Standard Edition R2 MYISAM

    • ベストアンサー
    • MySQL
  • mysql_fetch_arrayで配列に格納する

    例えばtable1というテーブルにtest1というカラムがあったとして、そのtest1に aaa bbb ccc ddd というデータが入っているとき、$item[0]にaaa, $item[1]にbbb・・・・というように格納したいのですが、 $item[0]にしか格納できません・・・。 どのように書けばできますか?もしくはmysql_fetch_arrayでは無理でしょうか?

    • ベストアンサー
    • PHP
  • LEFT JOIN とRIGHT JOINの合体版のような結合方法。

    LEFT JOIN とRIGHT JOINの合体版のような結合方法。 使用DBはMySQL5.0.45です。 2つのテーブルの結合方式で、結合条件に合致しなかった場合、 両方のデータを結果セットに含めることはできますか? LEFT JOINだと、左側のテーブルのデータは結果に返ってきて、右側のデータはNULLになります。 RIGHT JOINだと、右側のテーブルのデータは結果に返ってきて、左側のデータはNULLになります。 これを「左側データあり右側NULL」「左側NULL右側データあり」というレコードを混ぜて結果として返したいです。 具体的には、 以下二つのテーブルがあるとします。 table : test1 value  id ------------------- ああ   3 いい   4 うう     5 table : test2 value  id -------------------- AAA   1 BBB   2 CCC   3 DDD   4 id を結合条件のキーとして、以下のような結果を得たいです。 NULL  NULL  AAA   1 NULL  NULL  BBB   2 ああ   3     CCC   3 いい   4     DDD   4 うう    5    NULL   NULL LEFT JOINだと以下の結果に、 SELECT * FROM test1 LEFT JOIN test2 ON test1.id=test2.id ああ   3     CCC   3 いい   4     DDD   4 うう    5    NULL   NULL RIGHT JOINだと以下の結果になってしまいます。 SELECT * FROM test1 RIGHT JOIN test2 ON test1.id=test2.id NULL  NULL  AAA   1 NULL  NULL  BBB   2 ああ   3     CCC   3 いい   4     DDD   4 以上、ご教示お願い致します。

    • ベストアンサー
    • MySQL