- Notifications
You must be signed in to change notification settings - Fork22.1k
MySQL: Support:size option to change text and blob size#35071
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
jeremy left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Nice feature for Active Record migrations! And great to expand Action Text support to PostgreSQL. Changelog entries for both, too?
actiontext/test/dummy/db/migrate/2018052816_create_action_text_tables.rb OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
activerecord/lib/active_record/connection_adapters/mysql/schema_dumper.rb OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
kamipo commentedJan 28, 2019
hm... I've realized that rails/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb Lines 553 to 558 in5a8f0c7
I think that using |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Changed from mediumtext (16 MiB) to longtext (4 GiB).
activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
:size option to change text and blob sizeIn MySQL, the text column size is 65,535 bytes by default (1 GiB inPostgreSQL). It is sometimes too short when people want to use a textcolumn, so they sometimes change the text size to mediumtext (16 MiB) orlongtext (4 GiB) by giving the `limit` option.Unlike MySQL, PostgreSQL doesn't allow the `limit` option for a textcolumn (raises ERROR: type modifier is not allowed for type "text").So `limit: 4294967295` (longtext) couldn't be used in Action Text.I've allowed changing text and blob size without giving the `limit`option, it prevents that migration failure on PostgreSQL.
…ther optionsWhen I've added new `:size` option inrails#35071, I've found that invalid`:limit` and `:precision` raises `ActiveRecordError` unlike otherinvalid options.I think that is hard to distinguish argument errors and statementinvalid errors since the `StatementInvalid` is a subclass of the`ActiveRecordError`.https://github.com/rails/rails/blob/c9e4c848eeeb8999b778fa1ae52185ca5537fffe/activerecord/lib/active_record/errors.rb#L103```rubybegin # execute any migrationrescue ActiveRecord::StatementInvalid # statement invalidrescue ActiveRecord::ActiveRecordError, ArgumentError # `ActiveRecordError` except `StatementInvalid` is maybe an argument errorend```I'd say this is the inconsistency worth fixing.Before:```rubyadd_column :items, :attr1, :binary, size: 10 # => ArgumentErroradd_column :items, :attr2, :decimal, scale: 10 # => ArgumentErroradd_column :items, :attr3, :integer, limit: 10 # => ActiveRecordErroradd_column :items, :attr4, :datetime, precision: 10 # => ActiveRecordError```After:```rubyadd_column :items, :attr1, :binary, size: 10 # => ArgumentErroradd_column :items, :attr2, :decimal, scale: 10 # => ArgumentErroradd_column :items, :attr3, :integer, limit: 10 # => ArgumentErroradd_column :items, :attr4, :datetime, precision: 10 # => ArgumentError```
MySQL: Support `:size` option to change text and blob sizerails/rails#35071
Uh oh!
There was an error while loading.Please reload this page.
In MySQL, the text column size is 65,535 bytes by default (1 GiB in
PostgreSQL). It is sometimes too short when people want to use a text
column, so they sometimes change the text size to mediumtext (16 MiB) or
longtext (4 GiB) by giving the
limitoption.Unlike MySQL, PostgreSQL doesn't allow the
limitoption for a textcolumn (raises ERROR: type modifier is not allowed for type "text").
So
limit: 4294967295(longtext) couldn't be used in Action Text.I've allowed changing text and blob size without giving the
limitoption, it prevents that migration failure on PostgreSQL.