Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6164659
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 23, 20262026-05-23T22:01:54+00:00 2026-05-23T22:01:54+00:00

Say, we have something like this: add_column :users, :single, :boolean add_index :users, :single and

  • 0

Say, we have something like this:

add_column :users, :single, :boolean
add_index :users, :single

and then later we do

rename_column :users, :single, :married

Will ActiveRecord and/or the database handle the renaming of the index as well or do I have to manually drop the index and add it again?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-23T22:01:55+00:00Added an answer on May 23, 2026 at 10:01 pm

    For PostgreSQL, rename_column is implemented as a simple ALTER TABLE ... RENAME COLUMN ... and that does preserve the indexes.

    The MySQL versions (both of them) do an ALTER TABLE ... CHANGE ... and that also preserves the indexes.

    The SQLite version appears to copy the entire table (with indexes), drop the old one, and then copy the copy back to the original table name. The copying does appear to handle the column rename while copying the indexes:

    def copy_table(from, to, options = {})
      #...
      copy_table_indexes(from, to, options[:rename] || {})
    

    and inside copy_table_indexes:

    columns = index.columns.map {|c| rename[c] || c }.select do |column|
      to_column_names.include?(column)
    end
    

    So, the standard drivers will preserve your indexes when you do a rename_column and the SQLite driver goes to some effort to do so.

    The API documentation doesn’t specify any particular behavior though so other drivers may do other things. The closest the documentation comes to saying anything about indexes is this in active_record/migration.rb:

    rename_column(table_name, column_name, new_column_name): Renames a column but keeps the type and content.

    I think any driver would preserve the indexes but there’s no guarantee; a driver writer would certainly be foolish not to preserve the indexes.

    This isn’t a definitive or authoritative answer but your indexes should be preserved if you use the standard PostgreSQL, MySQL (either one of them), or SQLite drivers.


    Note that even though the index itself survives the column renaming there’s no guarantee that the index name will be changed. This shouldn’t be a problem unless you’re doing something (such as manually dropping it) that cares about the index name rather than what columns are involved.

    The above behavior changed in Rails 4:

    • In Rails 4.0 when a column or a table is renamed the related indexes are also renamed. If you have migrations which rename the indexes, they are no longer needed.

    So ActiveRecord will automatically rename indexes to match the new table or column names when you rename the table or column. Thanks to sequielo for the heads-up on this.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Sounds like a weird question, but say I have something like this: $.post( /myajax.php,
Let's say I have data structures that're something like this: Public Class AttendenceRecord Public
Let's say I have a class that implements the IDisposable interface. Something like this:
Let's say I have some code like this if(isset($_GET['foo'])) //do something if(isset($_GET['bar'])) //do something
Say you have something like an ASP.NET ASP:DetailsView to show and edit a single
Say you have some boiler plate using statements. Say something like this: #if !NUNIT
Let's say have something like: SELECT energy_produced, energy_consumed, timestamp1 AS timestamp FROM ( SELECT
Lets say we have something like: <div class=row> <div class=box> <a class=more href=#more/> </div>
Say I have the classic 4-byte signed integer, and I want something like print
I have a simple GridView ; something like this for a regular Item or

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.