summaryrefslogtreecommitdiff
path: root/django/db/backends/postgresql/creation.py
diff options
context:
space:
mode:
authorAymeric Augustin <aymeric.augustin@m4x.org>2015-02-09 22:00:09 +0100
committerAymeric Augustin <aymeric.augustin@m4x.org>2015-09-09 23:01:15 +0200
commit0586c061f0b857e2259bea48e21ebb69a7878d13 (patch)
treeda1c875bab6d084c56baf49583ca51ff056ce387 /django/db/backends/postgresql/creation.py
parentcd9fcd4e8073490a52c9e79133ada4661cb7db38 (diff)
downloaddjango-0586c061f0b857e2259bea48e21ebb69a7878d13.tar.gz
Cloned databases for running tests in parallel.
Diffstat (limited to 'django/db/backends/postgresql/creation.py')
-rw-r--r--django/db/backends/postgresql/creation.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/django/db/backends/postgresql/creation.py b/django/db/backends/postgresql/creation.py
index 13eea0d3b7..dcb0430f1b 100644
--- a/django/db/backends/postgresql/creation.py
+++ b/django/db/backends/postgresql/creation.py
@@ -1,3 +1,5 @@
+import sys
+
from django.db.backends.base.creation import BaseDatabaseCreation
@@ -11,3 +13,29 @@ class DatabaseCreation(BaseDatabaseCreation):
if test_settings['CHARSET']:
return "WITH ENCODING '%s'" % test_settings['CHARSET']
return ''
+
+ def _clone_test_db(self, number, verbosity, keepdb=False):
+ # CREATE DATABASE ... WITH TEMPLATE ... requires closing connections
+ # to the template database.
+ self.connection.close()
+
+ qn = self.connection.ops.quote_name
+ source_database_name = self.connection.settings_dict['NAME']
+ target_database_name = self.get_test_db_clone_settings(number)['NAME']
+
+ with self._nodb_connection.cursor() as cursor:
+ try:
+ cursor.execute("CREATE DATABASE %s WITH TEMPLATE %s" % (
+ qn(target_database_name), qn(source_database_name)))
+ except Exception as e:
+ if keepdb:
+ return
+ try:
+ if verbosity >= 1:
+ print("Destroying old test database '%s'..." % self.connection.alias)
+ cursor.execute("DROP DATABASE %s" % qn(target_database_name))
+ cursor.execute("CREATE DATABASE %s WITH TEMPLATE %s" % (
+ qn(target_database_name), qn(source_database_name)))
+ except Exception as e:
+ sys.stderr.write("Got an error cloning the test database: %s\n" % e)
+ sys.exit(2)