Embulk で配列型のカラムを PostgreSQL に outputするときは column_options で {value_type: 'string'} を指定する

結論

例えば、my_hobbies のようなカラムがあり、配列型で定義されているとします*1。そのようなカラムを含んだテーブルを特に何もせずに embulk-output-postgresql で PostgreSQL に書き込むと、以下のようなエラーが出て怒られます。

org.embulk.exec.PartialExecutionException: java.lang.UnsupportedOperationException: Unsupported type _VARCHAR (sqlType=2003, size=2147483647, scale=0)

このとき、当該カラムを {value_type: 'string'} と明示的に指定することで正常に書き込めます。Yaml の例は以下のとおりです。

out:
  type: postgresql
  (中略)
  column_options:
    my_hobbies: {value_type: 'string'}

補足

インポート時にエラーが出た場合、一時テーブルが残ってしまうことがあるので適宜削除しましょう。

*1:例えば Rails なら t.string "my_hobbies", array: true と定義されるでしょう

Powered by はてなブログ