2011-04-06 56 views
1

當在Heroku(postgres)上將Rails 3應用程序投入生產時,本地(sqlite)代碼正常工作時出現錯誤 - 我在查看Postgres手冊時看到no果:Sqlite到Postgres(Heroku)日期/時間

我的代碼:

(strftime('%s','now') - strftime('%s', posts.created_at)

錯誤:

LINE 1: SELECT posts.*, ((strftime('%s','now') -...
HINT: No function matches the given name and argument types. You might need to add explicit type casts.

回答

2

Postgres裏QL你沒有一個函數strftime。爲了計算的秒數之間的約會,你可以使用:

SELECT extract(epoch from now() - posts.created_at); 

同樣重要此言,在PostgreSQL裏你有時間間隔的數據類型,所以如果你只是減去(NOW() - posts.created_at)它會爲你返回一個很好的間隔類型,這可以通過to_char很容易地形成。

0

該功能應該做什麼?

要格式化日期或時間戳列中使用to_char()

爲了計算兩個日期之間的天的差異簡單地使用:now() - posts.created_at(假設created_at是date類型的一列)

如果created_at不是date列(這將是一個大錯誤),您需要使用to_date()將字符串轉換爲日期。

+0

這是一個Rails應用程序,所以'created_at'應該是'timestamp'。 – 2011-04-06 16:34:15

0

formatting與postgres的日期/時間typesfunctions之間,您需要計算出確切的語法。

如果你打算在sqlite和postgres之間移植一個可能的解決方案是在postgres中定義strftime函數。