def discover_toast(self,prod_cursor): self.cursor.execute("SELECT obj_oid,ttbl_name,id FROM table_toast_name WHERE tn_id={0} AND alive".format(self.id)) local_ttbl=self.cursor.fetchone() try: prod_cursor.execute("""SELECT r.reltoastrelid,t.relname FROM pg_class r INNER JOIN pg_class t ON r.reltoastrelid=t.oid WHERE r.relkind='r' AND t.relkind='t' AND r.oid={0}""".format(self.db_fields['obj_oid'])) except Exception as e: logger.error("Cannot execute toast table discovery query: {0},{1}".format(e.pgcode,e.pgerror)) return prod_ttbl=prod_cursor.fetchone() if local_ttbl and prod_ttbl: if not (local_ttbl[0] == prod_ttbl[0] and local_ttbl[1] == prod_ttbl[1]): logger.info("Retired TOAST table {0} for table {1}".format(local_ttbl[1],self.db_fields['tbl_name'])) old_ttbl=TableToastName(local_ttbl[2]) old_ttbl.retire() logger.info("Create new TOAST table {0} in table {1}".format(prod_ttbl[1],self.db_fields['tbl_name'])) new_ttbl=TableToastName() new_ttbl.set_fields(tn_id=self.id,obj_oid=prod_ttbl[0],ttbl_name=prod_ttbl[1]) new_ttbl.create() self.toast_id=local_ttbl[2] new_ttbl.truncate() elif local_ttbl and not prod_ttbl: self.toast_id=None logger.info("Retired TOAST table {0} for table {1}".format(local_ttbl[1],self.db_fields['tbl_name'])) old_ttbl=TableToastName(local_ttbl[2]) old_ttbl.retire() elif not local_ttbl and prod_ttbl: logger.info("Create new TOAST table {0} in table {1}".format(prod_ttbl[1],self.db_fields['tbl_name'])) new_ttbl=TableToastName() new_ttbl.set_fields(tn_id=self.id,obj_oid=prod_ttbl[0],ttbl_name=prod_ttbl[1]) new_ttbl.create() self.toast_id=new_ttbl.get_id() new_ttbl.truncate()