MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / renameDatabase

Method renameDatabase

src/Databases/DatabaseAtomic.cpp:724–796  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

722}
723
724void DatabaseAtomic::renameDatabase(ContextPtr query_context, const String & new_name)
725{
726 auto component_guard = Coordination::setCurrentComponent("DatabaseAtomic::renameDatabase");
727 /// CREATE, ATTACH, DROP, DETACH and RENAME DATABASE must hold DDLGuard
728 createDirectories();
729 waitDatabaseStarted();
730 std::lock_guard lock(mutex);
731
732 bool check_ref_deps = query_context->getSettingsRef()[Setting::check_referential_table_dependencies];
733 bool check_loading_deps = !check_ref_deps && query_context->getSettingsRef()[Setting::check_table_dependencies];
734 if (check_ref_deps || check_loading_deps)
735 {
736 for (auto & table : tables)
737 {
738 checkTableNameLengthUnlocked(new_name, table.first, getContext());
739
740 DatabaseCatalog::instance().checkTableCanBeRemovedOrRenamed({database_name, table.first}, check_ref_deps, check_loading_deps);
741 }
742 }
743
744
745 try
746 {
747 auto db_disk = getDisk();
748 if (db_disk->isSymlinkSupported())
749 db_disk->removeFileIfExists(path_to_metadata_symlink);
750 }
751 catch (...)
752 {
753 LOG_WARNING(log, getCurrentExceptionMessageAndPattern(/* with_stacktrace */ true));
754 }
755
756 auto old_metadata_file_path = DatabaseCatalog::getMetadataFilePath(database_name);
757 auto new_metadata_file_path = DatabaseCatalog::getMetadataFilePath(new_name);
758 auto default_db_disk = getContext()->getDatabaseDisk();
759 default_db_disk->moveFile(old_metadata_file_path, new_metadata_file_path);
760
761 String old_path_to_table_symlinks;
762
763 {
764 {
765 Strings table_names;
766 table_names.reserve(tables.size());
767 for (auto & table : tables)
768 table_names.push_back(table.first);
769 DatabaseCatalog::instance().updateDatabaseName(database_name, new_name, table_names);
770 }
771 database_name = new_name;
772
773 for (auto & table : tables)
774 {
775 auto table_id = table.second->getStorageID();
776 table_id.database_name = database_name;
777 table.second->renameInMemory(table_id);
778 }
779
780 for (auto & [detached_table_name, snapshot] : snapshot_detached_tables)
781 {

Callers

nothing calls this directly

Calls 15

setCurrentComponentFunction · 0.85
getDatabaseDiskMethod · 0.80
updateDatabaseNameMethod · 0.80
getContextFunction · 0.50
isSymlinkSupportedMethod · 0.45
removeFileIfExistsMethod · 0.45
moveFileMethod · 0.45
reserveMethod · 0.45
sizeMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected