diff --git a/web/pgadmin/tools/sqleditor/__init__.py b/web/pgadmin/tools/sqleditor/__init__.py index 2975d8f..b1ca3b8 100644 --- a/web/pgadmin/tools/sqleditor/__init__.py +++ b/web/pgadmin/tools/sqleditor/__init__.py @@ -760,6 +760,14 @@ def poll(trans_id): status, result = conn.poll( formatted_exception_msg=True, no_result=True) if not status: + messages = conn.messages() + if messages and len(messages) > 0: + additional_messages = ''.join(messages) + result = '{0}\n{1}\n\n{2}'.format( + additional_messages, + gettext('******* Error *******'), + result + ) return internal_server_error(result) elif status == ASYNC_OK: status = 'Success' @@ -800,10 +808,11 @@ def poll(trans_id): conn.manager.version ) - SQL = render_template("/".join([template_path, - 'nodes.sql']), - tid=command_obj.obj_id, - has_oids=True) + SQL = render_template( + "/".join([template_path,'nodes.sql']), + tid=command_obj.obj_id, + has_oids=True + ) # rows with attribute not_null colst, rset = conn.execute_2darray(SQL) if not colst: @@ -973,7 +982,8 @@ def fetch(trans_id, fetch_all=None): return make_json_response( data={ - 'status': status, 'result': result, + 'status': status, + 'result': result, 'has_more_rows': has_more_rows, 'rows_fetched_from': rows_fetched_from, 'rows_fetched_to': rows_fetched_to diff --git a/web/pgadmin/utils/driver/psycopg2/__init__.py b/web/pgadmin/utils/driver/psycopg2/__init__.py index f26209b..5acfb32 100644 --- a/web/pgadmin/utils/driver/psycopg2/__init__.py +++ b/web/pgadmin/utils/driver/psycopg2/__init__.py @@ -1333,6 +1333,7 @@ Failed to reset the connection to the server due to following error: ) ) + is_error = False try: status = self._wait_timeout(self.conn) except psycopg2.Error as pe: @@ -1343,12 +1344,18 @@ Failed to reset the connection to the server due to following error: self.conn_id[5:] ) errmsg = self._formatted_exception_msg(pe, formatted_exception_msg) - return False, errmsg + is_error = True if self.conn.notices and self.__notices is not None: while self.conn.notices: self.__notices.append(self.conn.notices.pop(0)[:]) + # We also need to fetch notices before we return from function in case + # of any Exception, To avoid code duplication we will return after + # fetching the notices in case of any Exception + if is_error: + return False, errmsg + result = None self.row_count = 0 self.column_info = None