2012-02-07 2 views
0

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

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

ответ

2

Для облегчения типа несовместимости, отлитого значения временной метки 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'. Но я предполагаю, что это всего лишь угловой случай.

Одно из советов: здесь было сказано много раз: «Как правило, рекомендуется разрабатывать с той же БД локально, когда вы развертываете». Таким образом, идея bad использовать MySQL локально.

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

+0

привет Эрвин - вы имели в виду «CAST (datetime_utc как время)»? проблема в том, что я действительно нуждаюсь во всей информации о времени и времени. – user1051849

+0

Если вы хотите сравнить временную метку времени, вам придется отдать ее на «время». Первое условие WHERE использует всю временную метку. И да, 'datetime_utc :: time' совпадает с' CAST (datetime_utc как время) '. –

+0

хорошо спасибо за разъяснения. к сожалению, я боюсь осознавать проблемы, связанные с поддержанием различных dbs для dev и производства - надеясь как можно скорее решить эту проблему. – user1051849

Смежные вопросы