Integer out of range in PostgreSQL database

后端 未结 3 1910
终归单人心
终归单人心 2020-12-17 10:41

I\'m trying to save a number representing the length of a file (4825733517). The column is set to type integer. I don\'t have any validations or restrictions set.

3条回答
  •  天命终不由人
    2020-12-17 11:15

    For columns of type integer, the :limit value is the maximum column length in bytes (documentation).

    With 4 byte length, the largest signed integer you can store is 2,147,483,647, way smaller than your value of 4,825,733,517. You can increase the byte limit, for example to 8 bytes to be a long integer (a bigint PostgreSQL type), this will allow you to store signed values up to 9,223,372,036,854,775,807.

    You can do this with a migration create it with something like rails generate migration change_integer_limit_in_your_table, and the following code:

    class ChangeIntegerLimitInYourTable < ActiveRecord::Migration
      def change
        change_column :your_table, :your_column, :integer, limit: 8
      end 
    end
    

提交回复
热议问题