質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

PostgreSQLのCOPY文での数値項目への空文字インポートについて

Satoshi_Okada
Satoshi_Okada

総合スコア19

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

1回答

0グッド

1クリップ

30892閲覧

投稿2016/03/25 12:18

PostgreSQLデータベースで、
CSVファイルからcopy from文を使ってデータをインポートしようとしております。

・CSVファイル
囲み文字:"(全文字囲われています)
区切り文字:,

・COPY句

COPY {テーブル} FROM '{CSVファイル}' WITH ( FORMAT CSV ,NULL '');

上記のCSVファイルを取り込む際に、numericの項目で下記のエラーが発生しております。

ERROR: invalid input syntax for type numeric: "" CONTEXT: COPY {テーブル名}, line 1, column {数値項目}: ""

numeric属性に対して、文字項目を挿入しようとしてエラーになっているようなのですが、理由がわかりません。

Copy句で「NULL ''」を指定しているので、それによりCSV上の空文字も「NULL」になると期待していたのですが……。

対象の項目は数値項目ですが、空文字が存在しており、空文字と0とは明確に切り分ける必要があります。(データ例:"1234","0","")
上記のような項目を取り込むことはできないのでしょうか?

上記のような現象に何か心当たりなどあるかたがおられましたら、
ご教授いただきたく思います。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

ベストアンサー

csv postgreql numeric null
で google 検索すると次のようなページが見つかりました。

...
インポートのバリエーションとして、NULL で取り込まれている空文字も空文字で取り込みたい場合、 force_not_null オプションを利用する。
...

...
空文字をNULLとして扱うという指定(WITH NULL AS '')をすれば、回避できます。
COPY [テーブル名] FROM [ファイルの絶対パス] WITH NULL AS '';
...

こうして得た情報をもとに、いろいろ試してみたり、さらの別の単語で検索をすると解決できると思います。

投稿2016/03/25 13:24

katoy

総合スコア22306

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

Satoshi_Okada

2016/03/31 07:28

回答ありがとうございます。 コメント頂いた情報を元にさらに調べてみたのですが、 どうにもうまく行かず、別の方法で対応することとしました。 心残りはありますが、一旦解決とさせていただきます。 ありがとうございました。
katoy

2016/03/31 07:32

> ... 別の方法で対応することとしました。... 他の方の参考となるように、さしさわりがなければ その方法を記載するとよいと思います。
Satoshi_Okada

2016/04/04 01:33

>他の方の参考となるように、さしさわりがなければ その方法を記載するとよいと思います。 コメントありがとうございます。 もともと、この処理はワークテーブルにデータを取込、その後、PLSQLで本テーブルにデータを取り込むことを想定しておりました。 今回、数値として取り込むことが難しかったため、ワークテーブルを全て文字型に変更、 PLSQL側で考慮することとしました。 ですので、同じ問題に対する参考になるかはわかりませんが……。 ファイルで来る以上、一度は文字項目として受け取ったほうがいいかもしれませんね、という結論でした。 粗末な結論で申し訳ないのですが、こんな感じです。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。