7 # TODO turn template1 in a parameter
8 # This should be exposed from openerp (currently in
9 # openerp/service/web_services.py).
10 def drop_database(database_name):
12 openerp.netsvc.init_logger()
13 db = openerp.sql_db.db_connect('template1')
15 cr.autocommit(True) # avoid transaction block
17 # TODO option for doing this.
18 # Try to terminate all other connections that might prevent
19 # dropping the database
21 # PostgreSQL 9.2 renamed pg_stat_activity.procpid to pid:
22 # http://www.postgresql.org/docs/9.2/static/release-9-2.html#AEN110389
23 pid_col = 'pid' if cr._cnx.server_version >= 90200 else 'procpid'
25 cr.execute("""SELECT pg_terminate_backend(%(pid_col)s)
27 WHERE datname = %%s AND
28 %(pid_col)s != pg_backend_pid()""" % {'pid_col': pid_col},
34 cr.execute('DROP DATABASE "%s"' % database_name, log_exceptions=False)
36 print "Can't drop %s" % (database_name,)
42 drop_database(args.database)
44 def add_parser(subparsers):
45 parser = subparsers.add_parser('drop',
46 description='Drop a database.')
47 parser.add_argument('-d', '--database', metavar='DATABASE',
48 **common.required_or_default('DATABASE', 'the database to create'))
50 parser.set_defaults(run=run)