I'm building an app for Heroku (Postgres) but for various reasons, developing it locally using MySQL. I've hit a roadblock concerning something that my MySQL dev environment takes with no trouble but that the heroku Postgres environment hangs up on. Here is the log stream from Heroku:
2012-02-07T10:00:00+00:00 app[web.1]: Report Load (2.5ms) SELECT id, datetime_utc FROM "reports" WHERE (datetime_utc = '2012-02-07 10:00:00.000000') AND (datetime_utc > spot_sunrise_utc AND datetime_utc > spot_sunset_utc) ORDER BY datetime_utc ASC LIMIT 500
2012-02-07T10:00:00+00:00 app[web.1]: PGError: ERROR: operator does not exist: timestamp without time zone > time without time zone
2012-02-07T10:00:00+00:00 app[web.1]: LINE 1: ...EEN 0.4573170731707317 and 200) AND (datetime_utc > spot_sun...
2012-02-07T10:00:00+00:00 app[web.1]: ^
2012-02-07T10:00:00+00:00 app[web.1]: HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
The datetime_utc
field is a real datetime
whereas the spot_sunrise
/ sunset_utc
fields are just time values.
What is causing this, and how do I work around it?
To alleviate the type incompatibility, cast the timestamp
value datetime_utc
to time
:
SELECT id, datetime_utc
FROM reports
WHERE datetime_utc = '2012-02-07 10:00'
AND datetime_utc::time > spot_sunrise_utc
AND datetime_utc::time < spot_sunset_utc -- you mean <, right?
ORDER BY datetime_utc -- noise
LIMIT 500;
See:
The added ORDER BY datetime_utc
is just noise after filtering with WHERE datetime_utc = '2012-02-07 10:00'
.
Aside 1: It is generally a good idea to develop with the same DB locally as you deploy with. So it is a bad idea to use MySQL locally.
Aside 2: The name of the database is PostgreSQL or Postgres for short. No such thing as "postgre".
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.