--- a/django/core/management/commands/syncdb.py
+++ b/django/core/management/commands/syncdb.py
@@ -19,7 +19,7 @@ class Command(NoArgsCommand):
     def handle_noargs(self, **options):
         from django.db import connection, transaction, models
         from django.conf import settings
-        from django.core.management.sql import custom_sql_for_model, emit_post_sync_signal
+        from django.core.management.sql import custom_sql_for_model, emit_post_sync_signal, emit_pre_sync_signal
 
         verbosity = int(options.get('verbosity', 1))
         interactive = options.get('interactive')
@@ -54,6 +54,20 @@ class Command(NoArgsCommand):
         created_models = set()
         pending_references = {}
 
+        models_to_be_created = []
+        for app in models.get_apps():
+            app_name = app.__name__.split('.')[-2]
+            model_list = models.get_models(app)
+            for model in model_list:
+                 if connection.introspection.table_name_converter(model._meta.db_table) in tables:
+                    continue
+                 models_to_be_created.append(model)
+
+        # Send the post_syncdb signal, so individual apps can do whatever they need
+        # to do at this point.
+        emit_pre_sync_signal(models_to_be_created, verbosity, interactive)
+                       
+
         # Create the tables for each model
         for app in models.get_apps():
             app_name = app.__name__.split('.')[-2]
diff --git a/django/core/management/sql.py b/django/core/management/sql.py
--- a/django/core/management/sql.py
+++ b/django/core/management/sql.py
@@ -203,3 +203,15 @@ def emit_post_sync_signal(created_models, verbosity, interactive):
         models.signals.post_syncdb.send(sender=app, app=app,
             created_models=created_models, verbosity=verbosity,
             interactive=interactive)
+
+def emit_pre_sync_signal(models_to_be_created, verbosity, interactive):
+    from django.db import models
+    from django.dispatch import dispatcher
+    # Emit the pre_sync signal for every application.
+    for app in models.get_apps():
+        app_name = app.__name__.split('.')[-2]
+        if verbosity >= 2:
+           print "Running pre-sync handlers for application", app_name
+        models.signals.pre_syncdb.send(sender=app, app=app,
+            models_to_be_created=models_to_be_created, verbosity=verbosity,
+            interactive=interactive)
diff --git a/django/db/models/signals.py b/django/db/models/signals.py
--- a/django/db/models/signals.py
+++ b/django/db/models/signals.py
@@ -12,3 +12,4 @@ pre_delete = Signal(providing_args=["instance"])
 post_delete = Signal(providing_args=["instance"])
 
 post_syncdb = Signal(providing_args=["class", "app", "created_models", "verbosity", "interactive"])
+pre_syncdb = Signal(providing_args=["class", "app", "models_to_be_created", "verbosity", "interactive"])
