前提・実現したいこと
使用しているDB
- 開発環境 MySQL
- 本番環境 PostgreSQL
Ruby on Railsで月毎の残業時間を集計したいと考えています。
この際、以下のテーブルから、
monthly_minute_data = Overtime.group("DATE_FORMAT(date,'%Y年%m月')").sum(:work_time_minute)
というコードにて、
{"2019年4月"=>○○, "2019年5月"=>○○, …}
というハッシュを生成しています。
発生している問題・エラーメッセージ
herokuにpushしたところ、以下のエラーが出ました。
2020-04-05T10:47:06.184059+00:00 app[web.1]: I, [2020-04-05T10:47:06.183994 #4] INFO -- : [a586f90a-2fb2-4fe5-8507-8b4ee1915e2e] Completed 500 Internal Server Error in 6ms (ActiveRecord: 3.1ms) 2020-04-05T10:47:06.184532+00:00 app[web.1]: F, [2020-04-05T10:47:06.184471 #4] FATAL -- : [a586f90a-2fb2-4fe5-8507-8b4ee1915e2e] 2020-04-05T10:47:06.184570+00:00 app[web.1]: F, [2020-04-05T10:47:06.184525 #4] FATAL -- : [a586f90a-2fb2-4fe5-8507-8b4ee1915e2e] ActiveRecord::StatementInvalid (PG::UndefinedFunction: ERROR: function date_format(date, unknown) does not exist 2020-04-05T10:47:06.184571+00:00 app[web.1]: LINE 1: ...mes"."work_time_minute") AS sum_work_time_minute, DATE_FORMA... 2020-04-05T10:47:06.184572+00:00 app[web.1]: ^ 2020-04-05T10:47:06.184572+00:00 app[web.1]: HINT: No function matches the given name and argument types. You might need to add explicit type casts. 2020-04-05T10:47:06.184573+00:00 app[web.1]: : SELECT SUM("overtimes"."work_time_minute") AS sum_work_time_minute, DATE_FORMAT(date,'%Y年%m月') AS date_format_date_y_m FROM "overtimes" WHERE "overtimes"."user_id" = $1 GROUP BY DATE_FORMAT(date,'%Y年%m月')):
エラーメッセージと、次のサイトの情報MySQLとPostgreSQL日付フォーマット関数の違いより、
- MySQLで使用出来る
DATE_FORMAT
がPostgreSQLがは使用できない。 - PostgreSQLで同じ事をしたいのであれば、
TO_CHAR
を使用する。
と理解しています。
開発環境と本番環境の両方で動作し、 {"2019年4月"=>○○, "2019年5月"=>○○, …}
というハッシュを生成するには、どのような手立てを講じれば良いかご教示いただきたいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。