2011-04-06 4 views
1

Je reçois une erreur en poussant un Rails 3 application dans la production sur Heroku (postgres), tandis que localement (sqlite) le code fonctionne très bien - je pris à consulter le manuel de Postgres pas succès:Sqlite à Postgres (Heroku) Date/heure

Mon code:

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

erreur:

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.

Répondre

2

En postgres QL vous n'avez pas de fonction strftime. Pour calculer le nombre de secondes entre deux dates, vous pouvez utiliser:

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

Il est également important de remarquer que, dans PostgreSQL vous avez le type de données d'intervalle, donc si vous soustrayez juste (maintenant() - posts.created_at) il retournera un gentil type d'intervalle pour vous, qui peut être facilement formulé avec to_char.

0

Qu'est-ce que la fonction supposée faire exactement?

Pour utiliser le format d'une colonne de date ou horodatage to_char()

Pour calculer la différence de jours entre deux dates utilisez simplement: now() - posts.created_at (en supposant created_at est une colonne de type date)

Si created_at n'est pas un date colonne (ce qui serait une grosse erreur) vous devez utiliser to_date() pour convertir une chaîne à une date.

+0

Ceci est une application Rails donc 'created_at' devrait être un' timestamp'. –

0

Entre formatting et postgres 'date/heure types et functions vous devez trouver la syntaxe exacte.

Si vous visez pour la portabilité entre SQLite et Postgres une solution possible est de définir la fonction strftime dans Postgres.

Questions connexes