Skip to content

Commit 9458c37

Browse files
committed
Fix #8663: Problem with restore time when DB has many indices
1 parent 92d929f commit 9458c37

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

src/jrd/ini.epp

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,8 @@ void INI_format(thread_db* tdbb, const string& charset)
732732
}
733733
END_STORE
734734

735+
HalfStaticArray<QualifiedName, 2> predefinedSchemas;
736+
735737
// Store SYSTEM schema
736738

737739
handle.reset();
@@ -749,13 +751,14 @@ void INI_format(thread_db* tdbb, const string& charset)
749751
}
750752
END_STORE
751753

752-
storeGrant(tdbb, attachment->getUserName().c_str(), obj_user, QualifiedName(SYSTEM_SCHEMA),
753-
obj_schema, USAGE_PRIVILEGES, false);
754+
const QualifiedName systemSchema(SYSTEM_SCHEMA);
755+
predefinedSchemas.add(systemSchema);
754756

755-
storeGrant(tdbb, "PUBLIC", obj_user, QualifiedName(SYSTEM_SCHEMA),
757+
storeGrant(tdbb, ownerName.c_str(), obj_user, systemSchema,
756758
obj_schema, USAGE_PRIVILEGES, false);
757759

758-
GRANT_privileges(tdbb, QualifiedName(SYSTEM_SCHEMA), obj_schema, transaction);
760+
storeGrant(tdbb, "PUBLIC", obj_user, systemSchema,
761+
obj_schema, USAGE_PRIVILEGES, false);
759762

760763
if (!attachment->isGbak() || !(attachment->att_flags & ATT_gbak_restore_has_schema))
761764
{
@@ -774,19 +777,26 @@ void INI_format(thread_db* tdbb, const string& charset)
774777
}
775778
END_STORE
776779

777-
storeGrant(tdbb, attachment->getUserName().c_str(), obj_user, QualifiedName(PUBLIC_SCHEMA),
778-
obj_schema, USAGE_PRIVILEGES, true);
780+
const QualifiedName publicSchema(PUBLIC_SCHEMA);
781+
predefinedSchemas.add(publicSchema);
779782

780-
storeGrant(tdbb, "PUBLIC", obj_user, QualifiedName(PUBLIC_SCHEMA),
783+
storeGrant(tdbb, ownerName.c_str(), obj_user, publicSchema,
781784
obj_schema, USAGE_PRIVILEGES, true);
782785

783-
GRANT_privileges(tdbb, QualifiedName(PUBLIC_SCHEMA), obj_schema, transaction);
786+
storeGrant(tdbb, "PUBLIC", obj_user, publicSchema,
787+
obj_schema, USAGE_PRIVILEGES, true);
784788
}
785789

786790
// Create indices for system relations
787791

788792
store_indices(tdbb);
789793

794+
// Grant schema privileges. This is defered until system indices are created
795+
// to avoid some system queries being badly optimized.
796+
797+
for (const auto& schema : predefinedSchemas)
798+
GRANT_privileges(tdbb, schema, obj_schema, transaction);
799+
790800
// Create parameter types
791801

792802
handle.reset();

0 commit comments

Comments
 (0)