diff --git a/vendor/magento/module-catalog-rule/Model/Indexer/IndexerTableSwapper.php b/vendor/magento/module-catalog-rule/Model/Indexer/IndexerTableSwapper.php
index 0ddae74ff0a..98443f4a4dc 100644
--- a/vendor/magento/module-catalog-rule/Model/Indexer/IndexerTableSwapper.php
+++ b/vendor/magento/module-catalog-rule/Model/Indexer/IndexerTableSwapper.php
@@ -65,7 +65,9 @@ class IndexerTableSwapper implements IndexerTableSwapperInterface
      */
     private function generateRandomSuffix(): string
     {
-        return bin2hex(random_bytes(4));
+        return bin2hex(
+            random_bytes(4)
+        );
     }

     /**
@@ -91,6 +93,7 @@ class IndexerTableSwapper implements IndexerTableSwapperInterface
         $toDrop = [];
         /** @var string[] $temporaryTablesRenamed */
         $temporaryTablesRenamed = [];
+        $restoreTriggerQueries = [];
         //Renaming temporary tables to original tables' names, dropping old
         //tables.
         foreach ($originalTablesNames as $tableName) {
@@ -99,6 +102,7 @@ class IndexerTableSwapper implements IndexerTableSwapperInterface
                 $tableName . $this->generateRandomSuffix()
             );
             $temporaryTableName = $this->getWorkingTableName($tableName);
+            $restoreTriggerQueries[] = $this->getRestoreTriggerQueries($tableName);
             $toRename[] = [
                 'oldName' => $tableName,
                 'newName' => $temporaryOriginalName,
@@ -121,6 +125,41 @@ class IndexerTableSwapper implements IndexerTableSwapperInterface
         foreach ($toDrop as $tableName) {
             $this->resourceConnection->getConnection()->dropTable($tableName);
         }
+
+        //Restoring triggers
+        $restoreTriggerQueries = array_merge([], ...$restoreTriggerQueries);
+        foreach ($restoreTriggerQueries as $restoreTriggerQuery) {
+            $this->resourceConnection->getConnection()->multiQuery($restoreTriggerQuery);
+        }
+    }
+
+    /**
+     * Get queries for table triggers restoring.
+     *
+     * @param string $tableName
+     * @return array
+     */
+    private function getRestoreTriggerQueries(string $tableName): array
+    {
+        $triggers = $this->resourceConnection->getConnection()
+            ->query('SHOW TRIGGERS LIKE \''. $tableName . '\'')
+            ->fetchAll();
+
+        if (!$triggers) {
+            return [];
+        }
+
+        $result = [];
+        foreach ($triggers as $trigger) {
+            // phpcs:ignore Magento2.SQL.RawQuery.FoundRawSql
+            $result[] = 'DROP TRIGGER IF EXISTS ' . $trigger['Trigger'];
+            $triggerData = $this->resourceConnection->getConnection()
+                ->query('SHOW CREATE TRIGGER '. $trigger['Trigger'])
+                ->fetch();
+            $result[]  = preg_replace('/DEFINER=[^\s]*/', '', $triggerData['SQL Original Statement']);
+        }
+
+        return $result;
     }

     /**
