From 88c11492f5d339baca3a180428f674bf019dffc5 Mon Sep 17 00:00:00 2001 From: Neal Todd Date: Fri, 24 Oct 2014 16:27:43 +0100 Subject: [PATCH] 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.