🛤️ Ruby on Rails - PostgreSQL Text Types
Updated at 2015-09-06 21:10
Always use text
. In PostgreSQL, there is no performance difference between text
or string
. They translate to the database as text
and varchar
, both can be limited by constraints and allow up to 1 GB of data. But using text
makes multiple like array operations work without casting to varchar
.
There is also the citext
(case-insensitive text) data type. It's basically text
but all comparisons are done with implicit LOWER()
. Emails is an example of a good citext
field as it is case-insensitive in use.
rails g migration EnableCitext
class EnableCitext < ActiveRecord::Migration
def change
enable_extension 'citext'
end
end
rails g migration AddUsernameToUser
class AddUsernameToUser < ActiveRecord::Migration
def change
add_column :users, :email, :citext
add_index :users, :email, unique: true
end
end