2011-06-15 11 views
15

Possible Duplicate:
Integer out of range on Postgres DB¿Cómo definimos enteros grandes?

Cuando mi código intenta insertar números grandes tales como 100001857905525 en una base de datos en Heroku, me sale el error:

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

La columna se ha definido como un entero. Yo uso una base de datos sqlite3. Mi código se implementa en heroku.

Funciona bien cuando ejecuto en localhost. Pero obtengo el error anterior solo cuando ejecuto el código en heroku. Quizás pueda resolver el problema definiendo la columna como un entero largo o doble. ¿Cómo hago esto en Ruby/Rails?

+1

esta pregunta ya ha sido formulada y respondida aquí http://stackoverflow.com/questions/999570/integer -out-of-range-on-postgres-db –

+0

SQLite es muy indulgente (es decir, todo el texto es texto, por lo que no hay límites en el tamaño de cadena, mirando sus [tipos de datos] (http://www.sqlite.org/datatype3). html) parece que los ints crecen según sea necesario hasta 8 bits), pero PostgreSQL (lo que Heroku usa) está optimizado para el rendimiento, por lo que debe encontrar el tipo correcto. Esta es una forma sutil de introducir código que funciona en el desarrollo pero no en la producción. –

Respuesta

35

en su migración, puede probar esto:

t.integer :uid, :limit => 8 

que producirá una columna entero de 64 bits.

(Sólo integer sin limit especificada permitirá, según el PostgreSQL docs, hasta 10 dígitos.)

+0

¡Gracias! Lo probaré. –

+0

Funciona como un encanto. Gracias – Crystark

+0

El valor predeterminado de la columna se estableció en un número de más de 8 dígitos, pero seguirá funcionando, ¡es una manera extraña de configurar bigint para la columna! más información está disponible en: https://moeffju.net/blog/using-bigint-columns-in-rails-migrations – whizcreed

Cuestiones relacionadas