[FIX] website_mail_group: restore missing snippet icon
[odoo/odoo.git] / openerpcommand / drop.py
1 """
2 Drop a database.
3 """
4
5 import common
6
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):
11     import openerp
12     openerp.netsvc.init_logger()
13     db = openerp.sql_db.db_connect('template1')
14     cr = db.cursor()
15     cr.autocommit(True) # avoid transaction block
16     try:
17         # TODO option for doing this.
18         # Try to terminate all other connections that might prevent
19         # dropping the database
20
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'
24         try:
25             cr.execute("""SELECT pg_terminate_backend(%(pid_col)s)
26                           FROM pg_stat_activity
27                           WHERE datname = %%s AND 
28                                 %(pid_col)s != pg_backend_pid()""" % {'pid_col': pid_col},
29                        (database_name,))
30         except Exception:
31             pass
32
33         try:
34             cr.execute('DROP DATABASE "%s"' % database_name, log_exceptions=False)
35         except Exception, e:
36             print "Can't drop %s" % (database_name,)
37     finally:
38         cr.close()
39
40 def run(args):
41     assert args.database
42     drop_database(args.database)
43
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'))
49
50     parser.set_defaults(run=run)