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

このQ&Aのポイント
  • 現在、CSVファイルからCOPYコマンドを使用してデータのINSERTを行いたいと思っていますが、date型に空白を入れるとエラーが発生します。
  • COPYコマンドを使用してデータをINSERTしようとした際に、date型のフィールドに空白が含まれているとエラーが発生します。
  • PostgreSQLのCOPYコマンドを使用してデータをINSERTする際に、date型のフィールドに空白を入れるとエラーになります。
回答を見る
  • ベストアンサー

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は初心者なので、申し訳ございませんが 教えてください。よろしくお願いいたします。

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

perl -p -e "s/\"\"//g" 入力ファイル > ワークファイル で前処理して copy into テーブル from ワークファイル with csv null '' で入力してみては。

hi_sta
質問者

お礼

遅くなりましたが、回答ありがとうございます。 何とかできました

その他の回答 (1)

  • Hardking
  • ベストアンサー率45% (73/160)
回答No.2

insert.csvファイルのDATE型となる項目をNULL値にする。 \Nとします。

hi_sta
質問者

お礼

遅くなりましたが、回答ありがとうございます。 何とかできました。

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

  • エクスポートの方法

    お世話になっております。 postgreSQL初心者です。 エクスポートの方法をご教授頂きたいです。 COPYコマンドでCSVをエクスポートしたいのですが ・カラム順を指定出来ないでしょうか? ・またデータでタイムスタンプが登録されている場合、タイムスタンプ部分を削除してエクスポートする方法はないでしょうか?  例)タイムスタンプ付き 2006-10-12 16:50:01+09    タイムスタンプ削除 2006-10-12 16:50:01 ちなみに ・pg_dump -D でINSERT文を抜き出す際もタイムスタンプを削除出来ませんでしょうか? postgreSQLバージョン:8.03 簡単なことなのかもしれませんが、どうぞよろしくお願いいたします。

  • PostgreSQL リストアエラー

    CentOS5.5×2 PostgreSQL8.4.4×2 リストア時にinvalid command \Nというエラーが出ます insertコマンドであれば普通に通るのですが、 出力ファイルが10G近くありダンプ+アップロード+リストアで一日半近く掛ってしまいます エディタで内容を確認しようにもファイルが大きすぎるため開けません どのようにすればリストアできますでしょうか

  • 大容量のCSVファイルをインポートするには。

    お世話になります。 Windows版のPostgreSQLをインストールしてCSVファイルを読み込ませようとしていますが途中でエラーが発生してしまい困っています。 取り込んでいるCSVファイルの件数は約65万件です。 その際に実行している下記のコマンドは以下の通りです。 SET client_encoding TO 'SJIS'; COPY T_SAMPLE FROM 'C:\test.csv' WITH CSV; また途中で発生したエラーの内容は以下の通りです。 ERROR: メモリ不足です DETAIL: 1073708532バイトを持つ文字列バッファを65534バイト多く、大きくすることができません。 CONTEXT: T_SAMPLEのCOPY。行番号 231916 どのようにしたら大容量のCSVファイルをデータベースにインポートする事ができるのでしょうか。 大変、申し訳ありませんがどうか私を助けて下さい。 些細な事でも何でも構いませんのでアドバイスいただけませんでしょうか。 私の環境のOSは「Windows Vista Ultimate」でPostgreSQLは「PostgreSQL 9.5.4」です。 何卒、宜しくお願いします。では、失礼します。

  • PostgreSQLのnull値について

    PostgreSQL7.2.3 で利用しています。 insert文を発行するときは null値は values(null); と実行します。 これは問題ないのですが COPY toコマンドを発行し、(カンマ区切り)csvに落とすと \N で落ちてきます。何か設定が悪いのでしょうか? 同じく、カンマ区切りのファイル 123,,,,5,66 とかを COPY fromコマンドでの受入を実行することもできません。 123,\N,\N,\N,5,66 だったら成功するようです。 こういうものなのでしょうか?

  • PostgreSQLでエラーinvalid byte sequence for encoding "EUC_JP": 0x9363

    教えてください。 ■環境 Apache2 PHP5 PostgreSQL8 すべて文字コードEUC-JP PHP5にてcsvファイルを取り込み mb_convert_encodingでSJIS→EUC-JPへと変換後 PostgreSQLへinsertしているのですが、 下記エラーが発生してしまいます。 PostgreSQLでエラーinvalid byte sequence for encoding "EUC_JP": 0x9363 http://shimax.cocolog-nifty.com/search/2005/06/invalid_byte_se_6658.html 上記にヒントがありますが、 解決に至っておりません。 取り込めないcsvデータを添付しますので、 どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • INSERTができない

    現在、PostgreSQLを使用し、簡単なテストを しようと思っております。私は素人です。 ただ、下記の問題にぶち当たってます。 createdb --encoding EUC_JP test で「test」というDBを"EUC_JP"で作成 /var/lib/pgsql/data/postgresql.conf の client_encoding = EUC_JP を変更し、 posgre再起動。 INSERT INTO test VALUES (1,'山田太郎'); というINSERT文を投入したところ、下記エラーが発生。 ERROR: invalid byte sequence for encoding "EUC_JP": 0x8be9 HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding". これってどうなんでしょう。 申し訳ないですが素人の私に教えてください!! よろしくお願いいたします。

  • データベースクラスタの変更

    Debian etch (Linux Debian 2.6.25.1-kuroboxHG) な環境に aptitude install postgresql8 として、 PostgreSQL バージョン 8.1.11 を使っています。 インストールした直後のデフォルトのデータベースクラスタは /var/lib/postgresql/8.1/main でしたが、 # df Filesystem 1K-blocks Used Available Use% Mounted on /dev/hda1 2063504 718136 1240548 37% / tmpfs 63504 0 63504 0% /lib/init/rw tmpfs 63504 0 63504 0% /dev/shm /dev/hda3 116413420 3093484 113319936 3% /mnt のような環境ですので、データベースクラスタを /mnt/share/pgsql に作ろうと思い /usr/lib/postgresql/8.1/bin/initdb -D /mnt/share/pgsql としました。 Success. You can now start the database server using: /usr/lib/postgresql/8.1/bin/postmaster -D /mnt/share/pgsql or /usr/lib/postgresql/8.1/bin/pg_ctl -D /mnt/share/pgsql -l logfile start となったので /usr/lib/postgresql/8.1/bin/pg_ctl -D /mnt/share/pgsql -l logfile start したところ server.crt がないと怒られたので /var/lib/postgresql/8.1/main に有ったシンボリックリンクを作成 この時に同じフォルダにある二つも作成 root.crt -> /etc/postgresql-common/root.crt server.crt -> /etc/ssl/certs/ssl-cert-snakeoil.pem server.key -> /etc/ssl/private/ssl-cert-snakeoil.key としたのですが 再起動してもPostgreSQLがもとのまま /var/lib/postgresql/8.1/main を使って起動しています。 どこを見直すのかご享受ください。 よろしくお願いします。

  • shで、パスがとおりません

    シェル内の リダイレクトのパスが通らない原因は何でしょうか? ◆シェル実行時のエラー bash: ./bb.sh: bad interpreter: No such file or directory ◆シェル(PostgresqlへCSVデータ取込) #!/bin/sh /usr/local/pgsql/bin/psql -d swan2 -c "copy abctbl_wk from stdin using delimiters ',' with null as ''" < ./csv/abcTBL.csv

  • Encoding変更

    RedHat8.0であるため、postgresql-7.2.3.tar.gzをインストール(初期化を含む)していましたが、検証をしているうちに、下記コマンドを実行できないこと COPY tablename FROM '/var/test/testdata.csv' WITH CSV; また、encodingにUTF8を指定できことが分かりました。そこで、postgresql-7.2.3.tar.gzをアンインストールし、postgresql-8.0.26.tar.gzをインストール(初期化を含む)しましたが、Encodingを確認したところ、EUC_JPのままになっていました。アンインストールが上手くできなかったためと考えられますが、どのようにすれば、UTF8に変更できるでしょうか?