[FIX] over-eager merge b270e4f
Extract dropping of connection from exp_drop (as in 8.0), call it from relevant database-alteration functions (drop, rename, duplicate)
This commit is contained in:
parent
b270e4f77f
commit
d89af0dad3
|
@ -97,6 +97,24 @@ def _initialize_db(serv, id, db_name, demo, lang, user_password):
|
||||||
if cr:
|
if cr:
|
||||||
cr.close()
|
cr.close()
|
||||||
|
|
||||||
|
def _drop_conn(cr, db_name):
|
||||||
|
# Try to terminate all other connections that might prevent
|
||||||
|
# dropping the database
|
||||||
|
try:
|
||||||
|
|
||||||
|
# PostgreSQL 9.2 renamed pg_stat_activity.procpid to pid:
|
||||||
|
# http://www.postgresql.org/docs/9.2/static/release-9-2.html#AEN110389
|
||||||
|
pid_col = 'pid' if cr._cnx.server_version >= 90200 else 'procpid'
|
||||||
|
|
||||||
|
cr.execute("""SELECT pg_terminate_backend(%(pid_col)s)
|
||||||
|
FROM pg_stat_activity
|
||||||
|
WHERE datname = %%s AND
|
||||||
|
%(pid_col)s != pg_backend_pid()""" % {
|
||||||
|
'pid_col': pid_col},
|
||||||
|
(db_name,))
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
class db(netsvc.ExportService):
|
class db(netsvc.ExportService):
|
||||||
def __init__(self, name="db"):
|
def __init__(self, name="db"):
|
||||||
netsvc.ExportService.__init__(self, name)
|
netsvc.ExportService.__init__(self, name)
|
||||||
|
@ -175,18 +193,7 @@ class db(netsvc.ExportService):
|
||||||
cr = db.cursor()
|
cr = db.cursor()
|
||||||
try:
|
try:
|
||||||
cr.autocommit(True) # avoid transaction block
|
cr.autocommit(True) # avoid transaction block
|
||||||
def _close_connections(cr):
|
_drop_conn(cr, db_original_name)
|
||||||
# patch issue gh:odoo/odoo/4424 bug lp:1180000
|
|
||||||
cr.execute('SELECT VERSION()')
|
|
||||||
version = cr.fetchone()[0].split(' ')[1]
|
|
||||||
if version > '9.2':
|
|
||||||
cr.execute("""SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '%s'; """ % db_original_name)
|
|
||||||
_logger.debug('CLOSE DATABASE CONNECTIONS %s in 9.2', db_original_name)
|
|
||||||
else:
|
|
||||||
cr.execute("""SELECT pg_terminate_backend(pg_stat_activity.procpid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '%s'; """ % db_original_name)
|
|
||||||
_logger.debug('CLOSE DATABASE CONNECTIONS %s in 9.1', db_original_name)
|
|
||||||
return
|
|
||||||
_close_connections(cr)
|
|
||||||
cr.execute("""CREATE DATABASE "%s" ENCODING 'unicode' TEMPLATE "%s" """ % (db_name, db_original_name))
|
cr.execute("""CREATE DATABASE "%s" ENCODING 'unicode' TEMPLATE "%s" """ % (db_name, db_original_name))
|
||||||
finally:
|
finally:
|
||||||
cr.close()
|
cr.close()
|
||||||
|
@ -215,23 +222,9 @@ class db(netsvc.ExportService):
|
||||||
|
|
||||||
db = sql_db.db_connect('postgres')
|
db = sql_db.db_connect('postgres')
|
||||||
cr = db.cursor()
|
cr = db.cursor()
|
||||||
cr.autocommit(True) # avoid transaction block
|
|
||||||
try:
|
try:
|
||||||
# Try to terminate all other connections that might prevent
|
cr.autocommit(True) # avoid transaction block
|
||||||
# dropping the database
|
_drop_conn(cr, db_name)
|
||||||
try:
|
|
||||||
|
|
||||||
# PostgreSQL 9.2 renamed pg_stat_activity.procpid to pid:
|
|
||||||
# http://www.postgresql.org/docs/9.2/static/release-9-2.html#AEN110389
|
|
||||||
pid_col = 'pid' if cr._cnx.server_version >= 90200 else 'procpid'
|
|
||||||
|
|
||||||
cr.execute("""SELECT pg_terminate_backend(%(pid_col)s)
|
|
||||||
FROM pg_stat_activity
|
|
||||||
WHERE datname = %%s AND
|
|
||||||
%(pid_col)s != pg_backend_pid()""" % {'pid_col': pid_col},
|
|
||||||
(db_name,))
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
cr.execute('DROP DATABASE "%s"' % db_name)
|
cr.execute('DROP DATABASE "%s"' % db_name)
|
||||||
|
@ -341,8 +334,9 @@ class db(netsvc.ExportService):
|
||||||
|
|
||||||
db = sql_db.db_connect('postgres')
|
db = sql_db.db_connect('postgres')
|
||||||
cr = db.cursor()
|
cr = db.cursor()
|
||||||
cr.autocommit(True) # avoid transaction block
|
|
||||||
try:
|
try:
|
||||||
|
cr.autocommit(True) # avoid transaction block
|
||||||
|
_drop_conn(cr, old_name)
|
||||||
try:
|
try:
|
||||||
cr.execute('ALTER DATABASE "%s" RENAME TO "%s"' % (old_name, new_name))
|
cr.execute('ALTER DATABASE "%s" RENAME TO "%s"' % (old_name, new_name))
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
|
|
Loading…
Reference in New Issue