method
rename_table
rails latest stable - Class:
ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaStatements
rename_table(table_name, new_name, **options)public
Renames a table. Also renames a table’s primary key sequence if the sequence name exists and matches the Active Record default.
Example:
rename_table('octopuses', 'octopi')
# File activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb, line 380
def rename_table(table_name, new_name, **options)
validate_table_length!(new_name) unless options[:_uses_legacy_table_name]
clear_cache!
schema_cache.clear_data_source_cache!(table_name.to_s)
schema_cache.clear_data_source_cache!(new_name.to_s)
execute "ALTER TABLE #{quote_table_name(table_name)} RENAME TO #{quote_table_name(new_name)}"
pk, seq = pk_and_sequence_for(new_name)
if pk
# PostgreSQL automatically creates an index for PRIMARY KEY with name consisting of
# truncated table name and "_pkey" suffix fitting into max_identifier_length number of characters.
max_pkey_prefix = max_identifier_length - "_pkey".size
idx = "#{table_name[0, max_pkey_prefix]}_pkey"
new_idx = "#{new_name[0, max_pkey_prefix]}_pkey"
execute "ALTER INDEX #{quote_table_name(idx)} RENAME TO #{quote_table_name(new_idx)}"
# PostgreSQL automatically creates a sequence for PRIMARY KEY with name consisting of
# truncated table name and "#{primary_key}_seq" suffix fitting into max_identifier_length number of characters.
max_seq_prefix = max_identifier_length - "_#{pk}_seq".size
if seq && seq.identifier == "#{table_name[0, max_seq_prefix]}_#{pk}_seq"
new_seq = "#{new_name[0, max_seq_prefix]}_#{pk}_seq"
execute "ALTER TABLE #{seq.quoted} RENAME TO #{quote_table_name(new_seq)}"
end
end
rename_table_indexes(table_name, new_name)
end Related methods
- Instance methods
- ON
- add_column
- add_column_for_alter
- add_exclusion_constraint
- add_foreign_key
- add_index
- add_index_opclass
- add_index_options
- add_options_for_index_columns
- add_unique_constraint
- assert_valid_deferrable
- build_change_column_default_definition
- build_change_column_definition
- build_create_index_definition
- change_column
- change_column_comment
- change_column_default
- change_column_for_alter
- change_column_null
- change_column_null_for_alter
- change_table_comment
- check_constraints
- client_min_messages
- client_min_messages=
- collation
- column_names_from_column_numbers
- columns_for_distinct
- create_alter_table
- create_database
- create_schema
- create_schema_dumper
- create_table_definition
- ctype
- current_database
- current_schema
- data_source_sql
- default_sequence_name
- drop_database
- drop_schema
- drop_table
- encoding
- exclusion_constraint_for
- exclusion_constraint_for!
- exclusion_constraint_name
- exclusion_constraint_options
- exclusion_constraints
- extract_constraint_deferrable
- extract_foreign_key_action
- extract_schema_qualified_name
- fetch_type_metadata
- foreign_key_column_for
- foreign_keys
- foreign_table_exists?
- foreign_tables
- index_name
- index_name_exists?
- indexes
- new_column_from_field
- pk_and_sequence_for
- primary_keys
- quoted_include_columns_for_index
- quoted_scope
- recreate_database
- reference_name_for_table
- remove_exclusion_constraint
- remove_index
- remove_unique_constraint
- rename_column
- rename_index
- rename_table
- reset_pk_sequence!
- schema_creation
- schema_exists?
- schema_names
- schema_search_path
- schema_search_path=
- sequence_name_from_parts
- serial_sequence
- set_pk_sequence!
- table_comment
- table_options
- type_to_sql
- unique_constraint_for
- unique_constraint_for!
- unique_constraint_name
- unique_constraint_options
- unique_constraints
- update_table_definition
- validate_check_constraint
- validate_constraint
- validate_foreign_key