diff --git a/fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java b/fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java
index bad61892b9..a35858e498 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java
@@ -776,16 +776,23 @@ public class RestoreJob extends AbstractJob {
if (localTbl != null) {
Preconditions.checkState(localTbl.getType() == TableType.VIEW);
View localView = (View) localTbl;
- if (!localView.getSignature(BackupHandler.SIGNATURE_VERSION)
- .equals(remoteView.getSignature(BackupHandler.SIGNATURE_VERSION))) {
- status = new Status(ErrCode.COMMON_ERROR, "View "
- + jobInfo.getAliasByOriginNameIfSet(backupViewName)
- + " already exist but with different schema");
- return;
+ String localViewSignature = localView.getSignature(BackupHandler.SIGNATURE_VERSION);
+ // keep compatible with old version, compare the signature without reset view def
+ if (!localViewSignature.equals(remoteView.getSignature(BackupHandler.SIGNATURE_VERSION))) {
+ // reset view def to dest db name and compare signature again
+ String srcDbName = jobInfo.dbName;
+ remoteView.resetViewDefForRestore(srcDbName, db.getName());
+ if (!localViewSignature.equals(remoteView.getSignature(BackupHandler.SIGNATURE_VERSION))) {
+ status = new Status(ErrCode.COMMON_ERROR, "View "
+ + jobInfo.getAliasByOriginNameIfSet(backupViewName)
+ + " already exist but with different schema");
+ return;
+ }
}
} else {
String srcDbName = jobInfo.dbName;
- remoteView.resetIdsForRestore(env, srcDbName, db.getFullName());
+ remoteView.resetViewDefForRestore(srcDbName, db.getName());
+ remoteView.resetIdsForRestore(env);
restoredTbls.add(remoteView);
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java
index 0eed9534f0..eec5bf2b2a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java
@@ -213,6 +213,10 @@ public class Database extends MetaObject implements Writable, DatabaseIf
return fullQualifiedName;
}
+ public String getName() {
+ return ClusterNamespace.getNameFromFullName(fullQualifiedName);
+ }
+
public void setNameWithLock(String newName) {
writeLock();
try {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
index 795d1b52d3..48c70917da 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
@@ -643,7 +643,7 @@ public class OlapTable extends Table implements MTMVRelatedTableIf {
baseIndexId = newIdxId;
}
MaterializedIndexMeta indexMeta = origIdxIdToMeta.get(entry.getKey());
- indexMeta.resetIndexIdForRestore(newIdxId, srcDbName, db.getFullName());
+ indexMeta.resetIndexIdForRestore(newIdxId, srcDbName, db.getName());
indexIdToMeta.put(newIdxId, indexMeta);
indexNameToId.put(entry.getValue(), newIdxId);
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/View.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/View.java
index d9e4ac84d9..54a8f87dc1 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/View.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/View.java
@@ -244,9 +244,11 @@ public class View extends Table {
return copied;
}
- public void resetIdsForRestore(Env env, String srcDbName, String dbName) {
+ public void resetIdsForRestore(Env env) {
id = env.getNextId();
+ }
+ public void resetViewDefForRestore(String srcDbName, String dbName) {
// the source db name is not setted in old BackupMeta, keep compatible with the old one.
if (srcDbName != null) {
inlineViewDef = inlineViewDef.replaceAll(srcDbName, dbName);
diff --git a/regression-test/suites/backup_restore/test_backup_restore_with_view.groovy b/regression-test/suites/backup_restore/test_backup_restore_with_view.groovy
index eee4a70c74..4ba7c652be 100644
--- a/regression-test/suites/backup_restore/test_backup_restore_with_view.groovy
+++ b/regression-test/suites/backup_restore/test_backup_restore_with_view.groovy
@@ -93,6 +93,23 @@ suite("test_backup_restore_with_view", "backup_restore") {
assertTrue(show_view.contains("${tableName}"))
+ // restore to db1, test the view signature.
+ sql """
+ RESTORE SNAPSHOT ${dbName1}.${snapshotName}
+ FROM `${repoName}`
+ PROPERTIES
+ (
+ "backup_timestamp" = "${snapshot}",
+ "reserve_replica" = "true"
+ )
+ """
+
+ syncer.waitAllRestoreFinish(dbName1)
+ restore_result = sql_return_maparray """ SHOW RESTORE FROM ${dbName1} WHERE Label ="${snapshotName}" """
+ restore_result.last()
+ logger.info("show restore result: ${restore_result}")
+ assertTrue(restore_result.last().State == "FINISHED")
+
sql "DROP TABLE ${dbName}.${tableName} FORCE"
sql "DROP VIEW ${dbName}.${viewName}"
sql "DROP DATABASE ${dbName} FORCE"