From 3df9fa50fb133cf4ec3539e7a1bc6dd53770a463 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Wed, 22 Feb 2012 11:26:39 +0100 Subject: [PATCH] [IMP] try to terminate all postgresql backends connected to a database before dropping it bzr revid: chs@openerp.com-20120222102639-q19kiykopb3b3qu0 --- openerp/service/web_services.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/openerp/service/web_services.py b/openerp/service/web_services.py index a7136e24269..8fed25cf226 100644 --- a/openerp/service/web_services.py +++ b/openerp/service/web_services.py @@ -173,6 +173,8 @@ class db(netsvc.ExportService): raise Exception, e def exp_drop(self, db_name): + if not self.exp_db_exist(db_name): + return False openerp.modules.registry.RegistryManager.delete(db_name) sql_db.close_db(db_name) @@ -180,6 +182,13 @@ class db(netsvc.ExportService): cr = db.cursor() cr.autocommit(True) # avoid transaction block try: + try: + cr.execute('SELECT DISTINCT procpid FROM pg_stat_activity WHERE datname=%s', (db_name,)) + for procpid, in cr.fetchall(): + cr.execute('SELECT pg_terminate_backend(%d)' % (procpid,)) + except Exception: + pass + try: cr.execute('DROP DATABASE "%s"' % db_name) except Exception, e: