Avoid transactions when dropping databases
authorFrederic Massart <fred@moodle.com>
Tue, 4 Dec 2012 09:31:51 +0000 (17:31 +0800)
committerFrederic Massart <fred@moodle.com>
Wed, 5 Dec 2012 06:15:09 +0000 (14:15 +0800)
lib/db.py

index 330209a..1bf51d3 100644 (file)
--- a/lib/db.py
+++ b/lib/db.py
@@ -117,11 +117,23 @@ class DB(object):
 
     def dropdb(self, db):
 
+        try:
+            # Disable transaction on PostgreSQL.
+            old_isolation_level = self.conn.isolation_level
+            self.conn.set_isolation_level(0)
+        except:
+            pass
+
         if self.engine == 'mysqli':
             self.cur.execute('DROP DATABASE `%s`' % db)
         elif self.engine == 'pgsql':
             self.cur.execute('DROP DATABASE "%s"' % db)
 
+        try:
+            self.conn.set_isolation_level(old_isolation_level)
+        except:
+            pass
+
     def dump(self, fd, prefix=''):
         """Dump a database to the file descriptor passed"""