From 88c11492f5d339baca3a180428f674bf019dffc5 Mon Sep 17 00:00:00 2001 From: Neal Todd Date: Fri, 24 Oct 2014 16:27:43 +0100 Subject: [PATCH 1/2] Support PostgreSQL <9.2 where the pg_stat_activity.pid column was named pg_stat_activity.procpid. --- sqlalchemy_utils/functions/database.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sqlalchemy_utils/functions/database.py b/sqlalchemy_utils/functions/database.py index 6748f27..71f746f 100644 --- a/sqlalchemy_utils/functions/database.py +++ b/sqlalchemy_utils/functions/database.py @@ -399,12 +399,14 @@ def drop_database(url): engine.raw_connection().set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT) # Disconnect all users from the database we are dropping. + version = map(int, engine.execute('SHOW server_version;').first()[0].split('.')) + pid_column = 'pid' if (version[0] >= 9 and version[1] >= 2) else 'procpid' text = ''' - SELECT pg_terminate_backend(pg_stat_activity.pid) + SELECT pg_terminate_backend(pg_stat_activity.%(pid_column)s) FROM pg_stat_activity - WHERE pg_stat_activity.datname = '%s' - AND pid <> pg_backend_pid() - ''' % database + WHERE pg_stat_activity.datname = '%(database)s' + AND %(pid_column)s <> pg_backend_pid(); + ''' % {'pid_column': pid_column, 'database': database} engine.execute(text) # Drop the database. From 6293c35ac056fa8f7e75cab6d837c285c198c28b Mon Sep 17 00:00:00 2001 From: Neal Todd Date: Fri, 24 Oct 2014 17:01:02 +0100 Subject: [PATCH 2/2] Fix for Python 3 compatibility --- sqlalchemy_utils/functions/database.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sqlalchemy_utils/functions/database.py b/sqlalchemy_utils/functions/database.py index 71f746f..ff847a5 100644 --- a/sqlalchemy_utils/functions/database.py +++ b/sqlalchemy_utils/functions/database.py @@ -399,7 +399,7 @@ def drop_database(url): engine.raw_connection().set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT) # Disconnect all users from the database we are dropping. - version = map(int, engine.execute('SHOW server_version;').first()[0].split('.')) + version = list(map(int, engine.execute('SHOW server_version;').first()[0].split('.'))) pid_column = 'pid' if (version[0] >= 9 and version[1] >= 2) else 'procpid' text = ''' SELECT pg_terminate_backend(pg_stat_activity.%(pid_column)s)