diff --git a/arkindex/documents/export/__init__.py b/arkindex/documents/export/__init__.py
index 4643b1fdb31ab500d08f876f30548368089f2005..3c5b3f3a4ff9f23c4eab52f07e2d821e97426f56 100644
--- a/arkindex/documents/export/__init__.py
+++ b/arkindex/documents/export/__init__.py
@@ -135,7 +135,18 @@ def update_state(corpus_export: CorpusExport, state: CorpusExportState):
         corpus_export.save()
 
 
+@job("high", timeout=settings.RQ_TIMEOUTS["export_corpus"])
+def local_export(corpus_export: CorpusExport) -> None:
+    assert corpus_export.source == "default"
+    export_corpus(corpus_export)
+
+
 @job("export", timeout=settings.RQ_TIMEOUTS["export_corpus"])
+def remote_export(corpus_export: CorpusExport) -> None:
+    assert corpus_export.source != "default"
+    export_corpus(corpus_export)
+
+
 def export_corpus(corpus_export: CorpusExport) -> None:
     _, db_path = tempfile.mkstemp(suffix=".db")
     try:
diff --git a/arkindex/documents/tests/test_export.py b/arkindex/documents/tests/test_export.py
index 66f1bb801317d05dd524c4cc440d751829bbc9ec..3ad88dce2f42e7ed38e2488a9448f9c3ac98d101 100644
--- a/arkindex/documents/tests/test_export.py
+++ b/arkindex/documents/tests/test_export.py
@@ -5,6 +5,7 @@ from django.test import override_settings
 from django.urls import reverse
 from rest_framework import status
 
+from arkindex.documents.export import local_export, remote_export
 from arkindex.documents.models import Corpus, CorpusExportState
 from arkindex.project.tests import FixtureAPITestCase
 from arkindex.users.models import Role
@@ -12,7 +13,7 @@ from arkindex.users.models import Role
 
 class TestExport(FixtureAPITestCase):
 
-    @patch("arkindex.project.triggers.export.export_corpus.delay")
+    @patch("arkindex.project.triggers.export.local_export.delay")
     @override_settings(EXPORT_TTL_SECONDS=420)
     def test_start(self, delay_mock):
         self.client.force_login(self.superuser)
@@ -41,7 +42,7 @@ class TestExport(FixtureAPITestCase):
             description="Export of corpus Unit Tests"
         ))
 
-    @patch("arkindex.project.triggers.export.export_corpus.delay")
+    @patch("arkindex.project.triggers.export.local_export.delay")
     def test_start_requires_login(self, delay_mock):
         response = self.client.post(reverse("api:corpus-export", kwargs={"pk": self.corpus.id}))
         self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
@@ -49,7 +50,7 @@ class TestExport(FixtureAPITestCase):
         self.assertFalse(self.corpus.exports.exists())
         self.assertFalse(delay_mock.called)
 
-    @patch("arkindex.project.triggers.export.export_corpus.delay")
+    @patch("arkindex.project.triggers.export.local_export.delay")
     def test_start_requires_verified(self, delay_mock):
         self.user.verified_email = False
         self.user.save()
@@ -61,7 +62,7 @@ class TestExport(FixtureAPITestCase):
         self.assertFalse(self.corpus.exports.exists())
         self.assertFalse(delay_mock.called)
 
-    @patch("arkindex.project.triggers.export.export_corpus.delay")
+    @patch("arkindex.project.triggers.export.local_export.delay")
     @patch("arkindex.users.utils.get_max_level", return_value=Role.Guest.value)
     def test_start_requires_contributor(self, max_level_mock, delay_mock):
         self.user.rights.update(level=Role.Guest.value)
@@ -75,7 +76,7 @@ class TestExport(FixtureAPITestCase):
         self.assertFalse(self.corpus.exports.exists())
         self.assertFalse(delay_mock.called)
 
-    @patch("arkindex.project.triggers.export.export_corpus.delay")
+    @patch("arkindex.project.triggers.export.remote_export.delay")
     def test_start_bad_source(self, delay_mock):
         self.client.force_login(self.superuser)
 
@@ -87,7 +88,7 @@ class TestExport(FixtureAPITestCase):
         self.assertFalse(delay_mock.called)
 
     @patch("arkindex.documents.models.CorpusExport.source")
-    @patch("arkindex.project.triggers.export.export_corpus.delay")
+    @patch("arkindex.project.triggers.export.remote_export.delay")
     @override_settings(EXPORT_TTL_SECONDS=420)
     def test_start_with_source(self, delay_mock, source_field_mock):
         source_field_mock.field.choices.return_value = [("default", "default"), ("jouvence", "jouvence")]
@@ -118,7 +119,7 @@ class TestExport(FixtureAPITestCase):
             description="Export of corpus Unit Tests from source jouvence"
         ))
 
-    @patch("arkindex.project.triggers.export.export_corpus.delay")
+    @patch("arkindex.project.triggers.export.local_export.delay")
     def test_start_running(self, delay_mock):
         self.client.force_login(self.superuser)
         self.corpus.exports.create(user=self.user, state=CorpusExportState.Running)
@@ -133,7 +134,7 @@ class TestExport(FixtureAPITestCase):
         self.assertFalse(delay_mock.called)
 
     @override_settings(EXPORT_TTL_SECONDS=420)
-    @patch("arkindex.project.triggers.export.export_corpus.delay")
+    @patch("arkindex.project.triggers.export.local_export.delay")
     def test_start_recent_export(self, delay_mock):
         self.client.force_login(self.superuser)
         with patch("django.utils.timezone.now") as mock_now:
@@ -153,7 +154,7 @@ class TestExport(FixtureAPITestCase):
         self.assertFalse(delay_mock.called)
 
     @override_settings(EXPORT_TTL_SECONDS=420)
-    @patch("arkindex.project.triggers.export.export_corpus.delay")
+    @patch("arkindex.project.triggers.export.local_export.delay")
     def test_start_recent_export_different_source(self, delay_mock):
         from arkindex.documents.models import CorpusExport
         CorpusExport.source.field.choices = [("default", "default"), ("jouvence", "jouvence")]
@@ -433,3 +434,23 @@ class TestExport(FixtureAPITestCase):
             response = self.client.delete(reverse("api:manage-export", kwargs={"pk": export.id}))
             self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
         assert not self.corpus.exports.exists()
+
+    @patch("arkindex.documents.models.CorpusExport.source")
+    def test_local_export_default_db_only(self, source_field_mock):
+        source_field_mock.field.choices.return_value = [("default", "default"), ("jouvence", "jouvence")]
+        export = self.corpus.exports.create(user=self.superuser, state=CorpusExportState.Created, source="jouvence")
+        with self.assertRaises(AssertionError):
+            local_export(export)
+
+        export.refresh_from_db()
+        self.assertEqual(export.state, CorpusExportState.Created)
+
+    @patch("arkindex.documents.models.CorpusExport.source")
+    def test_remote_export_not_default_db(self, source_field_mock):
+        source_field_mock.field.choices.return_value = [("default", "default"), ("jouvence", "jouvence")]
+        export = self.corpus.exports.create(user=self.superuser, state=CorpusExportState.Created, source="default")
+        with self.assertRaises(AssertionError):
+            remote_export(export)
+
+        export.refresh_from_db()
+        self.assertEqual(export.state, CorpusExportState.Created)
diff --git a/arkindex/project/triggers.py b/arkindex/project/triggers.py
index 8ff16f82dd730cc0c5d7578f8508fbae29dfde26..2bd186ef974de4ba7689a371c5722cef0cbe647e 100644
--- a/arkindex/project/triggers.py
+++ b/arkindex/project/triggers.py
@@ -198,10 +198,12 @@ def export_corpus(corpus_export: CorpusExport) -> None:
     """
     Export a corpus to a SQLite database
     """
+    export_function = export.local_export
     description = f"Export of corpus {corpus_export.corpus.name}"
     if corpus_export.source != "default":
         description += f" from source {corpus_export.source}"
-    export.export_corpus.delay(
+        export_function = export.remote_export
+    export_function.delay(
         corpus_export=corpus_export,
         user_id=corpus_export.user_id,
         description=description