Index: /branches/amp_3_7_1/scripts/avxapps_startup.sh
===================================================================
--- /branches/amp_3_7_1/scripts/avxapps_startup.sh	(revision 2410)
+++ /branches/amp_3_7_1/scripts/avxapps_startup.sh	(working copy)
@@ -70,6 +70,7 @@
     # /usr/bin/python /ca/webui/htdocs/new/src/clean_elastic.py crontab
     # /usr/bin/python /ca/bin/clean_oper_log.py crontab
     /usr/bin/python /ca/webui/htdocs/new/src/cm/lib/postgres_db.py
+    /usr/bin/python /ca/webui/htdocs/new/src/cm/upgrade/update_device_group_info.py
     rm -rf /var/run/webui_server.pem
 
     sed -i -e 's|SELINUX=enforcing|SELINUX=disabled|' /etc/selinux/config
Index: /branches/amp_3_7_1/src/webui/webui/htdocs/new/src/cm/lib/postgres_db.py
===================================================================
--- /branches/amp_3_7_1/src/webui/webui/htdocs/new/src/cm/lib/postgres_db.py	(revision 2410)
+++ /branches/amp_3_7_1/src/webui/webui/htdocs/new/src/cm/lib/postgres_db.py	(working copy)
@@ -243,7 +243,8 @@
         CREATE TABLE IF NOT EXISTS device_group (
             name character varying(128) COLLATE pg_catalog."default" NOT NULL,
             CONSTRAINT device_group_pkey PRIMARY KEY (name)
-        )'''
+        );
+        ALTER TABLE device_group ADD COLUMN IF NOT EXISTS id SERIAL;'''
         self.execute_sql(create_table_sql)
 
     def create_table_ha_cluster(self):
@@ -421,7 +422,6 @@
                               result varchar(20) NOT NULL
                             );
                             ALTER TABLE ext_log ADD COLUMN IF NOT EXISTS id BIGSERIAL;
-                            ALTER TABLE ext_log DROP CONSTRAINT ext_log_pkey;
                             ALTER TABLE ext_log ADD CONSTRAINT ext_log_pkey PRIMARY KEY (id);
                             '''
         self.execute_sql(create_table_sql)
@@ -507,7 +507,12 @@
             created_at timestamp without time zone,
             FOREIGN KEY (role_id) REFERENCES role (id) ON DELETE CASCADE,
             FOREIGN KEY (device_group_name) REFERENCES device_group(name) ON DELETE CASCADE
-        );'''
+        );
+        ALTER TABLE role_device_group DROP CONSTRAINT IF EXISTS role_device_group_device_group_name_fkey;
+        ALTER TABLE device_group DROP CONSTRAINT IF EXISTS device_group_pkey CASCADE;
+        ALTER TABLE device_group ADD CONSTRAINT device_group_id_pkey PRIMARY KEY (id);
+        ALTER TABLE role_device_group ADD COLUMN IF NOT EXISTS device_group_id int;
+        ALTER TABLE role_device_group ADD CONSTRAINT role_dev_grp_name_fkey FOREIGN KEY(device_group_id) REFERENCES device_group(id) ON DELETE CASCADE;'''
         self.execute_sql(create_table_query)
 
 
Index: /branches/amp_3_7_1/src/webui/webui/htdocs/new/src/cm/upgrade/__init__.py
===================================================================
--- /branches/amp_3_7_1/src/webui/webui/htdocs/new/src/cm/upgrade/__init__.py	(revision 0)
+++ /branches/amp_3_7_1/src/webui/webui/htdocs/new/src/cm/upgrade/__init__.py	(working copy)
@@ -0,0 +1 @@
+__all__ = ["update_device_group_info"]
\ No newline at end of file
Index: /branches/amp_3_7_1/src/webui/webui/htdocs/new/src/cm/upgrade/update_device_group_info.py
===================================================================
--- /branches/amp_3_7_1/src/webui/webui/htdocs/new/src/cm/upgrade/update_device_group_info.py	(revision 0)
+++ /branches/amp_3_7_1/src/webui/webui/htdocs/new/src/cm/upgrade/update_device_group_info.py	(working copy)
@@ -0,0 +1,77 @@
+import psycopg2
+
+class DB(object):
+    def __init__(self, conn):
+        self.conn = conn
+        # Enabling Foreign Key Support
+        # cu = self.conn.cursor()
+        # cu.execute('PRAGMA foreign_keys = ON;')
+        # self.conn.commit()
+        # cu.close()
+
+    @classmethod
+    def get_connected_db(cls, path=None):
+        # conn = psycopg2.connect(database="cm", user="postgres", password="", host="10.23.0.142", port="5432")
+        conn = psycopg2.connect(database="cm",
+                                user="postgres",
+                                password="",
+                                host="127.0.0.1",
+                                port="5432")
+        if conn:
+            return DB(conn)
+        else:
+            return None
+
+    def get_cursor(self):
+        return self.conn.cursor()
+
+    def execute_sql(self, sql):
+        assert sql
+        cu = self.get_cursor()
+        cu.execute(sql)
+        self.conn.commit()
+        cu.close()
+
+    def close(self):
+        self.conn.close()
+
+    def fetchall(self, sql):
+        assert sql
+        cu = self.get_cursor()
+        cu.execute(sql)
+        result = cu.fetchall()
+        cu.close()
+        return result
+
+def get_device_name_id():
+    device_grp_dict = {}
+    db = DB.get_connected_db()
+    fetchall_sql = "SELECT name, id from device_group"
+    device_grp_info = db.fetchall(fetchall_sql)
+    db.close()
+    for row in device_grp_info:
+        device_grp_name = row[0]
+        device_grp_id = row[1]
+        device_grp_dict[device_grp_name] = device_grp_id
+
+    return device_grp_dict
+
+
+def update_device_group_id():
+    device_name_id_dict = get_device_name_id()
+    db = DB.get_connected_db()
+    fetchall_sql = "SELECT device_group_name, device_group_id FROM role_device_group"
+    role_device_grp_info = db.fetchall(fetchall_sql)
+    for row in role_device_grp_info:
+        device_group_name = row[0]
+        device_group_id = row[1]
+
+        if device_group_id is None:
+            device_grp_id = device_name_id_dict[device_group_name]
+            update_device_id_sql = "UPDATE role_device_group SET device_group_id=%s WHERE device_group_name='%s'" % (device_grp_id, device_group_name)
+            db.execute_sql(update_device_id_sql)
+
+    db.close()
+
+if __name__ == '__main__':
+    update_device_group_id()
\ No newline at end of file
