Question

À l'origine, un champ de coordonnées sur mon modèle utilisait un nombre entier, mais lorsque j'ai essayé de déployer sur Heroku, on m'a rappelé (par un crash) que j'avais besoin que ce soit un flottant à la place (car j'avais des points décimaux dans mes coordonnées).J'ai donc généré une migration change_column sur ma machine locale, pour les changer_column afin qu'ils soient flottants à la place.et tout s'est bien passé.

J'ai essayé de déployer à nouveau sur Heroku, d'abord avec un heroku pg:reset puis avec un heroku db:setup.Lors de l'exécution de db:setup, j'obtiens l'erreur suivante :

PGError: ERROR: precision for type float must be less than 54 bits : CREATE TABLE "landmarks" ("id" serial primary key, "name" character varying(255), "xcoord" float(255), "ycoord" float(255), "created_at" timestamp, "updated_at" timestamp)

J'ai donc généré une autre migration change_column, cette fois avec également l'option :precision (définie sur :precision => 50, ce qui est inférieur à 54).J'ai recommencé tout le processus de déploiement et cela m'a donné la même erreur.

Est-ce que je fais quelque chose de mal?J'ai déjà déployé une autre application sur Heroku qui utilisait float sans aucune modification...

J'utilise SQLite sur ma machine locale et je pense qu'Heroku utilise Postgres ?

Merci d'avance!

[MODIFIER:Je dois également mentionner que la sortie SQL de l'erreur affichée après avoir modifié le :precision la valeur de mes coordonnées disait toujours 'float(255)'... je ne sais pas pourquoi]

Était-ce utile?

La solution

N'utilisez pas float(255) comme type de colonne.Utilisez soit real ou double precision.Lisez s'il vous plaît http://www.postgresql.org/docs/8.3/static/datatype-numeric.html#DATATYPE-FLOAT

Comme nous fortement Je recommande d'utiliser Postgres localement pour le développement.Il est trop courant de rencontrer des incohérences, comme celle-ci, lors du basculement radical de parties importantes de votre pile entre le développement et la production.Et votre base de données est une partie importante de votre pile.

Autres conseils

Je pense que Postgres se plaint de la différence entre les bits et les chiffres - quelque chose qui a 50 chiffres de précision a bien plus de 50 bits.Autrement dit, 2 ^ 53 = 9 007 199 254 740 992, soit 16 chiffres significatifs de précision.Essayez de le régler sur :scale => 12, :precision => 15 - cela devrait vous donner trois chiffres avant la virgule décimale et 12 chiffres après, et je croire cela vous met sous la limite de 53 bits.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top