2011-06-15 3 views
15

Possible Duplicate:
Integer out of range on Postgres DBComment définissons-nous les grands entiers?

Lorsque mon code tente d'insérer de grands nombres tels que 100001857905525 dans une base de données sur Heroku, je reçois l'erreur:

ActiveRecord::StatementInvalid (PGError: ERROR: integer out of range) 

La colonne a été définie comme un entier. J'utilise une base de données sqlite3. Mon code est déployé à heroku.

Cela fonctionne très bien quand je cours sur localhost. Mais je reçois l'erreur ci-dessus seulement quand je cours le code sur heroku. Peut-être que je peux résoudre le problème en définissant la colonne comme un entier long ou un double. Comment est-ce que je fais ceci dans Ruby/Rails?

+1

cette question a déjà été posée et répondue ici http://stackoverflow.com/questions/999570/integer -out-of-range-on-postgres-db –

+0

SQLite est très tolérant (c'est-à-dire que tout le texte est du texte, donc pas de limite de taille de chaîne, en regardant leurs [types de données] (http://www.sqlite.org/datatype3. html) il semble que les ints grossissent au besoin jusqu'à 8 bits), mais PostgreSQL (ce que Heroku utilise) est optimisé pour les performances, il faut donc trouver le bon type. C'est une manière subtile d'introduire du code qui fonctionne en développement mais pas en production. –

Répondre

35

dans votre migration, vous pouvez essayer ceci:

t.integer :uid, :limit => 8 

qui produira une colonne d'entier de 64 bits.

(Just integer sans limit spécifié permettra, selon le PostgreSQL docs, jusqu'à 10 chiffres).

+0

Merci! Je vais essayer ça. –

+0

Fonctionne comme un charme. Merci – Crystark

+0

La valeur par défaut de la colonne a été fixée à un nombre supérieur à 8 chiffres, mais cela fonctionnera toujours, c'est une façon étrange de définir bigint pour la colonne !! plus d'informations sont disponibles à: https://moeffju.net/blog/using-bigint-columns-in-rails-migrations – whizcreed

Questions connexes