2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PostgreSQLでcopyコマンドで数値型にcsv空文字を入力したときにERROR: invalid input syntax for type numeric: ""エラーが出たときの対処

Posted at

前提

root@f6f006004a3a:/# psql -U postgres
psql (13.3 (Debian 13.3-1.pgdg100+1))

CSVファイル

test.csv
root@f6f006004a3a:/# cat test.csv
"Bob","123"
"Tom",""

テーブル定義

postgres=# create table test(name varchar(50), saraly numeric);
CREATE TABLE

エラーになるパターン

postgres=# copy test from '/test.csv' with (format csv, null '');
ERROR:  invalid input syntax for type numeric: ""
CONTEXT:  COPY test, line 2, column saraly: ""
postgres=#

空文字はnullとして扱うよう、「null ''」を指定しているのに、numericに空文字はダメという感じのエラーが出る。

正常パターン

postgres=# copy test from '/test.csv' with (format csv, null '', force_null(saraly));
COPY 2
postgres=# select * from test;
 name | saraly
------+--------
 Bob  |    123
 Tom  |
(2 rows)

postgres=# select * from test where saraly is null;
 name | saraly
------+--------
 Tom  |
(1 row)

postgres=#

saralyカラムをforce_null指定することで、正常にCSVファイルをテーブルデータに登録できました。force_nullのオプション名から、全ての行でnullになってしまうかも?という疑惑もありましたが、CSVファイル上空文字になっていない行については、正しく値が入ってます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?