From c081edb720c854b7d2eb3dcc6ecabdf758a4b12b Mon Sep 17 00:00:00 2001 From: phborba Date: Tue, 27 Jun 2017 14:36:50 -0300 Subject: [PATCH] drop fixed --- Factories/DbFactory/postgisDb.py | 14 +++++++++++++- Factories/SqlFactory/postgisSqlGenerator.py | 7 +++++++ ServerTools/batchDbManager.py | 4 +++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/Factories/DbFactory/postgisDb.py b/Factories/DbFactory/postgisDb.py index ca9699972..307e8c966 100644 --- a/Factories/DbFactory/postgisDb.py +++ b/Factories/DbFactory/postgisDb.py @@ -839,6 +839,7 @@ def dropDatabase(self, candidateName): """ self.checkAndOpenDb() if self.checkSuperUser(): + self.dropAllConections(candidateName) sql = self.gen.dropDatabase(candidateName) query = QSqlQuery(self.db) if not query.exec_(sql): @@ -3164,4 +3165,15 @@ def getPrimaryKeyColumn(self, tableName): if not query.isActive(): raise Exception(self.tr("Problem getting primary key column: ")+query.lastError().text()) while query.next(): - return query.value(0) \ No newline at end of file + return query.value(0) + + def dropAllConections(self, dbName): + """ + Terminates all database conections + """ + self.checkAndOpenDb() + if self.checkSuperUser(): + sql = self.gen.dropAllConections(dbName) + query = QSqlQuery(self.db) + if not query.exec_(sql): + raise Exception(self.tr('Problem dropping database conections: ') + query.lastError().text()) \ No newline at end of file diff --git a/Factories/SqlFactory/postgisSqlGenerator.py b/Factories/SqlFactory/postgisSqlGenerator.py index b29b38985..24384209c 100644 --- a/Factories/SqlFactory/postgisSqlGenerator.py +++ b/Factories/SqlFactory/postgisSqlGenerator.py @@ -1422,4 +1422,11 @@ def getPrimaryKeyColumn(self, tableName): def getGeometryTablesCount(self): sql = '''select count(*) from public.geometry_columns''' + return sql + + def dropAllConections(self, dbName): + sql = """SELECT pg_terminate_backend(pg_stat_activity.pid) + FROM pg_stat_activity + WHERE pg_stat_activity.datname = '{0}' + AND pid <> pg_backend_pid();""".format(dbName) return sql \ No newline at end of file diff --git a/ServerTools/batchDbManager.py b/ServerTools/batchDbManager.py index b360dd2b1..09eb42167 100644 --- a/ServerTools/batchDbManager.py +++ b/ServerTools/batchDbManager.py @@ -87,7 +87,8 @@ def populateListWithDatabasesFromServer(self): for (dbname, dbversion) in dbList: if dbversion not in self.dbDict.keys(): dbversion = 'Non_EDGV' - self.dbDict[dbversion].append(dbname) + if dbname not in self.dbDict[dbversion]: + self.dbDict[dbversion].append(dbname) def setDatabases(self): self.populateListWithDatabasesFromServer() @@ -164,6 +165,7 @@ def on_dropDatabasePushButton_clicked(self): self.setDatabases() header = self.tr('Drop operation complete. \n') self.outputMessage(header, successList, exceptionDict) + self.dbsCustomSelector.setInitialState(self.dbsCustomSelector.fromLs) @pyqtSlot(bool) def on_upgradePostgisPushButton_clicked(self):