diff --git a/web/pgadmin/browser/server_groups/servers/databases/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/__init__.py
index aedc83e86..26df9aa97 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/__init__.py
@@ -21,7 +21,8 @@ import pgadmin.browser.server_groups.servers as servers
 from config import PG_DEFAULT_DRIVER
 from pgadmin.browser.collection import CollectionNodeModule
 from pgadmin.browser.server_groups.servers.databases.utils import \
-    parse_sec_labels_from_db, parse_variables_from_db
+    parse_sec_labels_from_db, parse_variables_from_db, \
+    get_pg_db_properties
 from pgadmin.browser.server_groups.servers.utils import parse_priv_from_db, \
     parse_priv_to_db
 from pgadmin.browser.utils import PGChildNodeView
@@ -191,16 +192,16 @@ class DatabaseView(PGChildNodeView):
                     # If connection to database is not allowed then
                     # provide generic connection
                     if kwargs['did'] in self.manager.db_info:
+
+                        self.datlastsysoid, self.datistemplate = \
+                            get_pg_db_properties(self.manager, kwargs)
+
                         self._db = self.manager.db_info[kwargs['did']]
-                        self.datlastsysoid = self._db['datlastsysoid']
+
                         if self._db['datallowconn'] is False:
                             self.conn = self.manager.connection()
                             self.db_allow_connection = False
 
-                        self.datistemplate = \
-                            self.manager.db_info[kwargs['did']][
-                                'datistemplate'] if 'datistemplate' in \
-                            self.manager.db_info[kwargs['did']] else False
                 else:
                     self.conn = self.manager.connection()
 
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/__init__.py
index 11d3a3db5..e25cfcdfa 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/__init__.py
@@ -237,83 +237,30 @@ class ForeignTableView(PGChildNodeView, DataTypeReader,
         @wraps(f)
         def wrap(self, **kwargs):
 
-            data = {}
-
             if request.data:
                 req = json.loads(request.data, encoding='utf-8')
             else:
                 req = request.args or request.form
 
-            if 'foid' not in kwargs:
-                required_args = [
-                    'name',
-                    'ftsrvname'
-                ]
-
-                for arg in required_args:
-                    if arg not in req or req[arg] == '':
-                        return make_json_response(
-                            status=410,
-                            success=0,
-                            errormsg=gettext(
-                                "Could not find the required parameter ({})."
-                            ).format(arg)
-                        )
+            invalid, arg = self._check_valid_foid_input(kwargs, req)
+
+            if invalid:
+                return make_json_response(
+                    status=410,
+                    success=0,
+                    errormsg=gettext(
+                        "Could not find the required parameter ({})."
+                    ).format(arg)
+                )
 
             try:
-                list_params = []
                 if request.method == 'GET':
                     list_params = ['constraints', 'columns', 'ftoptions',
                                    'seclabels', 'inherits', 'acl']
                 else:
                     list_params = ['inherits']
 
-                for key in req:
-                    if (
-                        key in list_params and req[key] != '' and
-                        req[key] is not None
-                    ):
-                        # Coverts string into python list as expected.
-                        data[key] = []
-                        if not isinstance(req[key], list) and req[key]:
-                            data[key] = json.loads(req[key], encoding='utf-8')
-
-                        if key == 'inherits':
-                            # Convert Table ids from unicode/string to int
-                            # and make tuple for 'IN' query.
-                            inherits = tuple([int(x) for x in data[key]])
-
-                            if len(inherits) == 1:
-                                # Python tupple has , after the first param
-                                # in case of single parameter.
-                                # So, we need to make it tuple explicitly.
-                                inherits = "(" + str(inherits[0]) + ")"
-                            if inherits:
-                                # Fetch Table Names from their respective Ids,
-                                # as we need Table names to generate the SQL.
-                                SQL = render_template(
-                                    "/".join([self.template_path,
-                                              self._GET_TABLES_SQL]),
-                                    attrelid=inherits)
-                                status, res = self.conn.execute_dict(SQL)
-
-                                if not status:
-                                    return internal_server_error(errormsg=res)
-
-                                if 'inherits' in res['rows'][0]:
-                                    data[key] = res['rows'][0]['inherits']
-                                else:
-                                    data[key] = []
-
-                    elif key == 'typnotnull':
-                        if req[key] == 'true' or req[key] is True:
-                            data[key] = True
-                        elif req[key] == 'false' or req[key] is False:
-                            data[key] = False
-                        else:
-                            data[key] = ''
-                    else:
-                        data[key] = req[key]
+                data = self._validate_req(req, list_params)
 
             except Exception as e:
                 return internal_server_error(errormsg=str(e))
@@ -323,6 +270,82 @@ class ForeignTableView(PGChildNodeView, DataTypeReader,
 
         return wrap
 
+    @staticmethod
+    def _check_valid_foid_input(kwargs, req):
+
+        if 'foid' not in kwargs:
+            required_args = [
+                'name',
+                'ftsrvname'
+            ]
+
+            for arg in required_args:
+                if arg not in req or req[arg] == '':
+                    return True, arg
+        return False, ''
+
+    def _validate_req(self, req, list_params):
+
+        data = {}
+
+        try:
+            for key in req:
+                if (
+                    key in list_params and req[key] != '' and
+                    req[key] is not None
+                ):
+                    # Coverts string into python list as expected.
+                    data[key] = []
+                    self._convert_string_to_list_for_inherits(req, data, key)
+
+                elif key == 'typnotnull':
+                    if req[key] == 'true' or req[key] is True:
+                        data[key] = True
+                    elif req[key] == 'false' or req[key] is False:
+                        data[key] = False
+                    else:
+                        data[key] = ''
+                else:
+                    data[key] = req[key]
+
+        except Exception as e:
+            current_app.logger.exception(e)
+            raise e
+
+        return data
+
+    def _convert_string_to_list_for_inherits(self, req, data, key):
+
+        if not isinstance(req[key], list) and req[key]:
+            data[key] = json.loads(req[key], encoding='utf-8')
+
+        if key == 'inherits':
+            # Convert Table ids from unicode/string to int
+            # and make tuple for 'IN' query.
+            inherits = tuple([int(x) for x in data[key]])
+
+            if len(inherits) == 1:
+                # Python tupple has , after the first param
+                # in case of single parameter.
+                # So, we need to make it tuple explicitly.
+                inherits = "(" + str(inherits[0]) + ")"
+            if inherits:
+                # Fetch Table Names from their respective Ids,
+                # as we need Table names to generate the SQL.
+                SQL = render_template(
+                    "/".join([self.template_path,
+                              self._GET_TABLES_SQL]),
+                    attrelid=inherits)
+                status, res = self.conn.execute_dict(SQL)
+
+                if not status:
+                    return internal_server_error(errormsg=res)
+
+                if 'inherits' in res['rows'][0]:
+                    data[key] = res['rows'][0]['inherits']
+                else:
+                    data[key] = []
+
     def check_precondition(f):
         """
         Works as a decorator.
@@ -344,14 +367,10 @@ class ForeignTableView(PGChildNodeView, DataTypeReader,
                 if self.manager.db_info is not None and \
                 kwargs['did'] in self.manager.db_info else 0
 
-            self.datistemplate = False
-            if (
-                self.manager.db_info is not None and
-                kwargs['did'] in self.manager.db_info and
-                'datistemplate' in self.manager.db_info[kwargs['did']]
-            ):
-                self.datistemplate = self.manager.db_info[
-                    kwargs['did']]['datistemplate']
+            self.datistemplate = \
+                self.manager.db_info[kwargs['did']]['datistemplate'] \
+                if self.manager.db_info is not None and \
+                kwargs['did'] in self.manager.db_info else False
 
             # Set template path for sql scripts depending
             # on the server version.
diff --git a/web/pgadmin/browser/server_groups/servers/databases/utils.py b/web/pgadmin/browser/server_groups/servers/databases/utils.py
index 2eb12b265..5dfae4b2c 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/utils.py
@@ -105,3 +105,17 @@ def _check_var_type(var_value, var_name, row):
         var_dict['database'] = row['db_name']
 
     return var_dict
+
+
+def get_pg_db_properties(manager, kwargs):
+
+    if 'did' in kwargs and kwargs['did'] in manager.db_info:
+
+        datlastsysoid = manager.db_info[kwargs['did']]['datlastsysoid'] \
+            if 'datlastsysoid' in manager.db_info[kwargs['did']] else 0
+        datistemplate = manager.db_info[kwargs['did']]['datistemplate'] \
+            if 'datistemplate' in manager.db_info[kwargs['did']] else False
+
+        return datlastsysoid, datistemplate
+    else:
+        return 0, False
