Сравнение времени и даты в PostgreSQL (Heroku) - PullRequest
0 голосов
/ 07 февраля 2012

Я создаю приложение для Heroku (Postgres), но по разным причинам разрабатываю его локально с использованием MySQL.Я столкнулся с препятствиями, связанными с тем, что моя среда разработки MySQL проходит без проблем, но что окружение heroku Postgres зависает.Вот поток журнала от 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.

Поле datetime_utc является действительным datetime, тогда как поля spot_sunrise / sunset_utc являются только значениями времени.

Что вызывает это и как мне обойти это?

1 Ответ

2 голосов
/ 07 февраля 2012

Чтобы уменьшить несовместимость типов, приведите значение временной метки datetime_utc ко времени, как я демонстрирую:

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
ORDER  BY datetime_utc 
LIMIT  500

Кстати: дополнительные условия WHERE и ORDER BY datetime_utc - это просто шум после фильтрациис WHERE datetime_utc = '2012-02-07 10:00'.Но я предполагаю, что это всего лишь угловой пример.

Несколько советов: здесь, на SO, уже много раз говорилось: как правило, рекомендуется разрабатывать локально с той же БД, с которой вы развертываете.Так что плохая идея использовать локально MySQL.

Наконец, имя базы данных - PostgreSQL или, для краткости, Postgres.Нет такой вещи, как "postgre".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...