fluent-plugin-postgres
Fluentd の plugin にfluent-plugin-postgres
という PostgreSQL 用の plugin があります。こいつの設定(conf ファイルでの記述)でハマった話です。
正常に動作しない記述
以下のような conf を書くと正しく動作しません。
<match mysql_replicator> @type postgres host hostname port 5432 database hogehoge username foo password bar key_names id, name, age, gender sql INSERT INTO fugafuga.members (id, name, age, gender) VALUES ($1, $2, $3, $4) </match>
なぜか。それはkey_names
のキーの区切りにおいて、カンマの後に空白があるからです。したがって次のように書けば正しく動作します。
正常に動作する記述
<match mysql_replicator> @type postgres host hostname port 5432 database hogehoge username foo password bar key_names id,name,age,gender sql INSERT INTO fugafuga.members (id, name, age, gender) VALUES ($1, $2, $3, $4) </match>
所感
このkey_names
の部分はプラグインがパースしている部分なので、カンマの後にスペースがあると正しくパースできないというのは当然だとは思います。一般的な言語でのコードを書く感覚でカンマの後にスペースを入れているとハマってしまいますね。