diff options
| -rw-r--r-- | activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb | 27 | ||||
| -rw-r--r-- | activerecord/test/schema/schema.rb | 1 | 
2 files changed, 20 insertions, 8 deletions
| diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index 4d5459939b..5ec1ffd704 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -1216,14 +1216,25 @@ module ActiveRecord        # Maps logical Rails types to PostgreSQL-specific data types.        def type_to_sql(type, limit = nil, precision = nil, scale = nil) -        return super unless type.to_s == 'integer' -        return 'integer' unless limit - -        case limit -          when 1, 2; 'smallint' -          when 3, 4; 'integer' -          when 5..8; 'bigint' -          else raise(ActiveRecordError, "No integer type has byte size #{limit}. Use a numeric with precision 0 instead.") +        case type.to_s +        when 'binary' +          # PostgreSQL doesn't support limits on binary (bytea) columns. +          # The hard limit is 1Gb, because of a 32-bit size field, and TOAST. +          case limit +          when nil, 0..0x3fffffff; super(type) +          else raise(ActiveRecordError, "No binary type has byte size #{limit}.") +          end +        when 'integer' +          return 'integer' unless limit +   +          case limit +            when 1, 2; 'smallint' +            when 3, 4; 'integer' +            when 5..8; 'bigint' +            else raise(ActiveRecordError, "No integer type has byte size #{limit}. Use a numeric with precision 0 instead.") +          end +        else +          super          end        end diff --git a/activerecord/test/schema/schema.rb b/activerecord/test/schema/schema.rb index cef08cd99c..b18f9779be 100644 --- a/activerecord/test/schema/schema.rb +++ b/activerecord/test/schema/schema.rb @@ -78,6 +78,7 @@ ActiveRecord::Schema.define do    create_table :binaries, :force => true do |t|      t.string :name      t.binary :data +    t.binary :short_data, :limit => 2048    end    create_table :birds, :force => true do |t| | 
