【PostgreSQL】「ERROR: Invalid digit, Value ‘ ‘, Pos 0, Type: Integer」の解消方法

目次

この記事を書く目的

  • 掲題のエラーに遭遇した時の備忘のため
  • 課題解決のステップを参考として

結論

原因

0または1が格納されているべきカラムがNULLであったため

対応方法

レコードの該当カラムを0で更新した
→ カラムのしようとして0または1であれば良いので1でもOK

経緯

データ分析ツールの一部機能を開発中にユニットテストを実施した際に掲題のエラーが発生しました。
エラー全文は以下の通り

SQLエラー [XX000]: ERROR: Invalid digit, Value ' ', Pos 0, Type: Integer
  詳細:
  -----------------------------------------------
  error:  Invalid digit, Value ' ', Pos 0, Type: Integer
  code:      1207
  context:  
  query:     37551053
  location:  :0
  process:   query0_125_37551053 [pid=0]
  -----------------------------------------------

原因考察のプロセス

  • 前日の開発中にSQLを実行した際は特に問題なく実行完了した
  • エラーメッセージで調べたがRedshiftのこと(関係なさそうなページ)ばかり
    • 経験則による直感だがググって出てきたことは解決に結びつかなさそうな気がした
  • エラーの内容的に数値が来てほしいところに空文字が来てそう
    • 例外処理が抜けている?
      • 確かに例外処理は抜けていた
      • NULLとか空文字だったらゼロとして処理しようかな
      • テーブル定義確認
        • 0か1どちらかは来るデータじゃん = 空文字とかNULLは来るはずがない
      • 例外処理を入れる必要はなさそう
        • あってもいいけど必要ではなさそうなので対応しないと判断
    • テーブル確認
      • 該当のカラムに何もデータ入ってないじゃん!
      • データ入れる、とりあえず0で
  • 再実行→解消!

今回は対応しなかったけど他に考えられる対応方法

  • 該当カラムの型はInteger、けど0/1ならbooleanでも良いのでは?
    • カラムの型を変更するとか
      • 理由があってできなかった、理由は忘れた、確認しておこう

さいごに

BI関連の開発をやっており、今後また遭遇しそうなエラーだと思ったので備忘のために書きました。

また、
『エラーが起こったらこんなふうに解決していくんだよ』的な思考のプロセスは言語化しておくと未来の自分のためにもなるかなと思ったこと、
「最近プログラミング始めました」みたいな人のためにもなればと思って書きました。

ご参考までに。

目次