Heroku でホスティングしている PostgreSQL に
Sequelize から接続しようとしたときに SSL 必須のエラーが出てた.
エラーは解決はしたもののドキュメントに詳しい説明がなく
調査したときに関連する Sequelize のコードを読んだでわかったことをまとめた.
まずはエラー対策の結論
環境.dialect.dialectOptions.ssl: true
にすると
SSLでの接続が可能になる.
{ "production": { "dialect": "postgres", "dialectOptions": { "ssl": true } } }
dialectOptions とは?
Sequelize のドキュメントには dialectOptions にどのようなパラメータが設定できるか
といった記述はない.
Sequelize は MySQL は mysql2, PostgreSQL は pg といったように
内部的には DB への接続部分に各 Node.js 実装のライブラリを使用している.
dialectOptions についてドキュメントに記述がないのは
dialectOptions は各ライブラリへそのまま設定値を受け渡すのが役割なためである.
主要な dialectOptions の設定項目
とはいえ今回の ssl のように
主要なパラメータのドキュメントはあった方が親切だと感じたので
調査していく過程で見つけたものをまとめておく.
PostgreSQL
application_name
pg_stat_activity で表示されるログに表示される名前を設定する.
これを使うことで DB 側で接続元ごとの状況を確認することが可能になる.
PostgreSQL: Documentation: 9.3: Error Reporting and Logging
ssl
true
で DB に SSL 接続を行う.
client_encoding
接続する際の文字エンコーディングを指定する.
auto
を指定すると接続元の環境をそのまま利用する.
Unix システムであれば LC_CTYPE
の値を利用.
keepAlive
true
でkeepAlive を有効にする.
statement_timeout
クエリをタイムアウトさせる時間(ミリ秒)
ドキュメントにミスみつけたので PR 出した
マージされた🎉
まとめ
- SSL 必須のエラーを解決した.
- Sequelize のコードを読んで主要な dialectOptions をまとめた.
- ↑を追記する PR もまとめて出そう.