2012-02-07 131 views
0

我正在爲Heroku(Postgres)構建一個應用程序,但由於各種原因,使用MySQL在本地開發它。我遇到了一些障礙,涉及到我的MySQL開發環境毫不費力,但是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場是一個真正的datetimespot_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 

BTW:附加條款WHERE和你WHERE datetime_utc = '2012-02-07 10:00'過濾後的ORDER BY datetime_utc只是噪音。但我認爲這只是一個角落案例。

建議的意見:在SO上多次提到:在部署時使用相同的數據庫進行開發通常是一個好主意。所以這是一個糟糕的想法在本地使用MySQL。

最後,數據庫的名稱是PostgreSQL或Postgres的簡稱。沒有「postgre」這樣的東西。

+0

嗨Erwin - 你的意思是「CAST(datetime_utc as time)」嗎?問題是我實際上需要整個日期時間信息 – user1051849 2012-02-07 10:33:36

+0

如果你想比較'時間戳'的時間,你必須將它轉換爲'時間'。無論如何,第一個WHERE條件使用完整的時間戳。是的,'datetime_utc :: time'與'CAST(datetime_utc as time)'相同。 – 2012-02-07 10:39:12

+0

好的非常感謝澄清。不幸的是我很痛苦地意識到爲開發和生產維護不同的dbs所涉及的問題 - 希望儘快解決這些問題。 – user1051849 2012-02-07 11:38:26