diff --git a/docs/en_US/release_notes_4_20.rst b/docs/en_US/release_notes_4_20.rst
index be1a58c0d..f22d55ebb 100644
--- a/docs/en_US/release_notes_4_20.rst
+++ b/docs/en_US/release_notes_4_20.rst
@@ -9,6 +9,7 @@ This release contains a number of bug fixes and new features since the release o
 New features
 ************
 
+| `Issue #5261 <https://redmine.postgresql.org/issues/5261>`_ -  Added support of Collation, FTS Configuration, FTS Dictionary, FTS Parser, and FTS Template to the Schema Diff.
 
 Housekeeping
 ************
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/__init__.py
index 8c2de07f7..4c67480b3 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/__init__.py
@@ -501,7 +501,7 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare):
         )
 
     @check_precondition
-    def delete(self, gid, sid, did, scid, coid=None):
+    def delete(self, gid, sid, did, scid, coid=None, only_sql=False):
         """
         This function will delete existing the collation object
 
@@ -511,6 +511,7 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare):
            did: Database ID
            scid: Schema ID
            coid: Collation ID
+           only_sql: Return only sql if True
         """
         if coid is None:
             data = request.form if request.form else json.loads(
@@ -548,6 +549,11 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare):
                                       nspname=data['schema'],
                                       cascade=cascade,
                                       conn=self.conn)
+
+                # Used for schema diff tool
+                if only_sql:
+                    return SQL
+
                 status, res = self.conn.execute_scalar(SQL)
                 if not status:
                     return internal_server_error(errormsg=res)
@@ -685,7 +691,8 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare):
             return SQL.strip('\n'), data['name']
 
     @check_precondition
-    def sql(self, gid, sid, did, scid, coid):
+    def sql(self, gid, sid, did, scid, coid, diff_schema=None,
+            json_resp=True):
         """
         This function will generates reverse engineered sql for collation
         object
@@ -696,6 +703,8 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare):
            did: Database ID
            scid: Schema ID
            coid: Collation ID
+           diff_schema: Target Schema for schema diff
+           json_resp: True then return json response
         """
         SQL = render_template("/".join([self.template_path,
                                         'properties.sql']),
@@ -710,6 +719,9 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare):
 
         data = res['rows'][0]
 
+        if diff_schema:
+            data['schema'] = diff_schema
+
         SQL = render_template("/".join([self.template_path,
                                         'create.sql']),
                               data=data, conn=self.conn)
@@ -722,6 +734,9 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare):
                                       nspname=data['schema'])
         SQL = sql_header + '\n\n' + SQL.strip('\n')
 
+        if not json_resp:
+            return SQL
+
         return ajax_response(response=SQL)
 
     @check_precondition
@@ -793,5 +808,38 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare):
 
         return res
 
-
+    def get_sql_from_diff(self, gid, sid, did, scid, oid, data=None,
+                          diff_schema=None, drop_sql=False):
+        """
+        This function is used to get the DDL/DML statements.
+        :param gid: Group ID
+        :param sid: Serve ID
+        :param did: Database ID
+        :param scid: Schema ID
+        :param oid: Collation ID
+        :param data: Difference data
+        :param diff_schema: Target Schema
+        :param drop_sql: True if need to drop the collation
+        :return:
+        """
+        sql = ''
+        if data:
+            if diff_schema:
+                data['schema'] = diff_schema
+            sql, name = self.get_sql(gid=gid, sid=sid, data=data, scid=scid,
+                                     coid=oid)
+        else:
+            if drop_sql:
+                sql = self.delete(gid=gid, sid=sid, did=did,
+                                  scid=scid, coid=oid, only_sql=True)
+            elif diff_schema:
+                sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, coid=oid,
+                               diff_schema=diff_schema, json_resp=False)
+            else:
+                sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, coid=oid,
+                               json_resp=False)
+        return sql
+
+
+SchemaDiffRegistry(blueprint.node_type, CollationView)
 CollationView.register_node_view(blueprint)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/update.sql
index 9ee1ccb27..25859f89b 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/update.sql
@@ -1,5 +1,23 @@
 {% if data %}
 {# Change object's owner #}
+{% if (data.lc_collate and data.lc_type) or data.locale or data.copy_collation %}
+-- WARNING:
+-- We have found the difference in either of LC_COLLATE or LC_CTYPE or LOCALE,
+-- so we need to drop the existing collation first and re-create it.
+DROP COLLATION {{ conn|qtIdent(o_data.schema, o_data.name) }};
+
+CREATE COLLATION {{ conn|qtIdent(o_data.schema, o_data.name) }}
+{% if data.lc_collate and data.lc_type %}
+    (LC_COLLATE = {{ data.lc_collate|qtLiteral }}, LC_CTYPE = {{ data.lc_type|qtLiteral }});
+{% endif %}
+{% if data.locale %}
+    (LOCALE = {{ data.locale|qtLiteral }});
+{% endif %}
+{% if data.copy_collation %}
+    FROM {{ data.copy_collation }};
+{% endif %}
+
+{% endif %}
 {% if data.owner and data.owner != o_data.owner %}
 ALTER COLLATION {{ conn|qtIdent(o_data.schema, o_data.name) }}
     OWNER TO {{ conn|qtIdent(data.owner) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/__init__.py
index cae149f29..7065c6630 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/__init__.py
@@ -532,7 +532,7 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare):
         )
 
     @check_precondition
-    def delete(self, gid, sid, did, scid, cfgid=None):
+    def delete(self, gid, sid, did, scid, cfgid=None, only_sql=False):
         """
         This function will drop the FTS Configuration object
         :param gid: group id
@@ -540,6 +540,7 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare):
         :param did: database id
         :param scid: schema id
         :param cfgid: FTS Configuration id
+        :param only_sql: Return only sql if True
         """
         if cfgid is None:
             data = request.form if request.form else json.loads(
@@ -587,6 +588,10 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare):
                     cascade=cascade
                 )
 
+                # Used for schema diff tool
+                if only_sql:
+                    return sql
+
                 status, res = self.conn.execute_scalar(sql)
                 if not status:
                     return internal_server_error(errormsg=res)
@@ -869,7 +874,8 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare):
         )
 
     @check_precondition
-    def sql(self, gid, sid, did, scid, cfgid):
+    def sql(self, gid, sid, did, scid, cfgid, diff_schema=None,
+            json_resp=True):
         """
         This function will reverse generate sql for sql panel
         :param gid: group id
@@ -877,6 +883,8 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare):
         :param did: database id
         :param scid: schema id
         :param cfgid: FTS Configuration id
+        :param diff_schema: Target Schema for schema diff
+        :param json_resp: True then return json response
         """
         try:
             sql = render_template(
@@ -901,6 +909,25 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare):
                         "FTS Configuration node.")
                 )
 
+            # Used for schema diff tool
+            if diff_schema:
+                data = {'schema': scid}
+                # Fetch schema name from schema oid
+                sql = render_template("/".join([self.template_path,
+                                                'schema.sql']),
+                                      data=data,
+                                      conn=self.conn,
+                                      )
+
+                status, schema = self.conn.execute_scalar(sql)
+                if not status:
+                    return internal_server_error(errormsg=schema)
+
+                res = res.replace(schema, diff_schema)
+
+            if not json_resp:
+                return res
+
             return ajax_response(response=res)
 
         except Exception as e:
@@ -970,5 +997,38 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare):
 
         return res
 
+    def get_sql_from_diff(self, gid, sid, did, scid, oid, data=None,
+                          diff_schema=None, drop_sql=False):
+        """
+        This function is used to get the DDL/DML statements.
+        :param gid: Group ID
+        :param sid: Serve ID
+        :param did: Database ID
+        :param scid: Schema ID
+        :param oid: Collation ID
+        :param data: Difference data
+        :param diff_schema: Target Schema
+        :param drop_sql: True if need to drop the fts configuration
+        :return:
+        """
+        sql = ''
+        if data:
+            if diff_schema:
+                data['schema'] = diff_schema
+            sql, name = self.get_sql(gid=gid, sid=sid, did=did, scid=scid,
+                                     data=data, cfgid=oid)
+        else:
+            if drop_sql:
+                sql = self.delete(gid=gid, sid=sid, did=did,
+                                  scid=scid, cfgid=oid, only_sql=True)
+            elif diff_schema:
+                sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, cfgid=oid,
+                               diff_schema=diff_schema, json_resp=False)
+            else:
+                sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, cfgid=oid,
+                               json_resp=False)
+        return sql
+
 
+SchemaDiffRegistry(blueprint.node_type, FtsConfigurationView)
 FtsConfigurationView.register_node_view(blueprint)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/__init__.py
index 84d6edead..6b8232f07 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/__init__.py
@@ -527,7 +527,7 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare):
         )
 
     @check_precondition
-    def delete(self, gid, sid, did, scid, dcid=None):
+    def delete(self, gid, sid, did, scid, dcid=None, only_sql=False):
         """
         This function will drop the FTS Dictionary object
         :param gid: group id
@@ -535,6 +535,7 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare):
         :param did: database id
         :param scid: schema id
         :param dcid: FTS Dictionary id
+        :param only_sql: Return only sql if True
         """
         if dcid is None:
             data = request.form if request.form else json.loads(
@@ -581,6 +582,10 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare):
                                       cascade=cascade
                                       )
 
+                # Used for schema diff tool
+                if only_sql:
+                    return sql
+
                 status, res = self.conn.execute_scalar(sql)
                 if not status:
                     return internal_server_error(errormsg=res)
@@ -766,7 +771,8 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare):
         )
 
     @check_precondition
-    def sql(self, gid, sid, did, scid, dcid):
+    def sql(self, gid, sid, did, scid, dcid, diff_schema=None,
+            json_resp=True):
         """
         This function will reverse generate sql for sql panel
         :param gid: group id
@@ -774,6 +780,8 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare):
         :param did: database id
         :param scid: schema id
         :param dcid: FTS Dictionary id
+        :param diff_schema: Target Schema for schema diff
+        :param json_resp: True then return json response
         """
 
         sql = render_template(
@@ -819,6 +827,9 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare):
         # Replace schema oid with schema name
         res['rows'][0]['schema'] = schema
 
+        if diff_schema:
+            res['rows'][0]['schema'] = diff_schema
+
         sql = render_template("/".join([self.template_path, 'create.sql']),
                               data=res['rows'][0],
                               conn=self.conn, is_displaying=True)
@@ -832,6 +843,9 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare):
 
         sql = sql_header + sql
 
+        if not json_resp:
+            return sql
+
         return ajax_response(response=sql.strip('\n'))
 
     @check_precondition
@@ -897,5 +911,38 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare):
 
         return res
 
+    def get_sql_from_diff(self, gid, sid, did, scid, oid, data=None,
+                          diff_schema=None, drop_sql=False):
+        """
+        This function is used to get the DDL/DML statements.
+        :param gid: Group ID
+        :param sid: Serve ID
+        :param did: Database ID
+        :param scid: Schema ID
+        :param oid: Collation ID
+        :param data: Difference data
+        :param diff_schema: Target Schema
+        :param drop_sql: True if need to drop the fts configuration
+        :return:
+        """
+        sql = ''
+        if data:
+            if diff_schema:
+                data['schema'] = diff_schema
+            sql, name = self.get_sql(gid=gid, sid=sid, did=did, scid=scid,
+                                     data=data, dcid=oid)
+        else:
+            if drop_sql:
+                sql = self.delete(gid=gid, sid=sid, did=did,
+                                  scid=scid, dcid=oid, only_sql=True)
+            elif diff_schema:
+                sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, dcid=oid,
+                               diff_schema=diff_schema, json_resp=False)
+            else:
+                sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, dcid=oid,
+                               json_resp=False)
+        return sql
+
 
+SchemaDiffRegistry(blueprint.node_type, FtsDictionaryView)
 FtsDictionaryView.register_node_view(blueprint)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/__init__.py
index fd7cfd0b7..d4a1151f6 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/__init__.py
@@ -476,7 +476,7 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare):
         )
 
     @check_precondition
-    def delete(self, gid, sid, did, scid, pid=None):
+    def delete(self, gid, sid, did, scid, pid=None, only_sql=False):
         """
         This function will drop the fts_parser object
         :param gid: group id
@@ -484,6 +484,7 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare):
         :param did: database id
         :param scid: schema id
         :param pid: fts tempate id
+        :param only_sql: Return only sql if True
         """
         if pid is None:
             data = request.form if request.form else json.loads(
@@ -530,6 +531,10 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare):
                     cascade=cascade
                 )
 
+                # Used for schema diff tool
+                if only_sql:
+                    return sql
+
                 status, res = self.conn.execute_scalar(sql)
                 if not status:
                     return internal_server_error(errormsg=res)
@@ -813,7 +818,8 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare):
         )
 
     @check_precondition
-    def sql(self, gid, sid, did, scid, pid):
+    def sql(self, gid, sid, did, scid, pid, diff_schema=None,
+            json_resp=True):
         """
         This function will reverse generate sql for sql panel
         :param gid: group id
@@ -821,6 +827,8 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare):
         :param did: database id
         :param scid: schema id
         :param pid: fts tempate id
+        :param diff_schema: Target Schema for schema diff
+        :param json_resp: True then return json response
         """
         try:
             sql = render_template(
@@ -846,6 +854,25 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare):
                     )
                 )
 
+            # Used for schema diff tool
+            if diff_schema:
+                data = {'schema': scid}
+                # Fetch schema name from schema oid
+                sql = render_template("/".join([self.template_path,
+                                                'schema.sql']),
+                                      data=data,
+                                      conn=self.conn,
+                                      )
+
+                status, schema = self.conn.execute_scalar(sql)
+                if not status:
+                    return internal_server_error(errormsg=schema)
+
+                res = res.replace(schema, diff_schema)
+
+            if not json_resp:
+                return res
+
             return ajax_response(response=res)
 
         except Exception as e:
@@ -915,5 +942,38 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare):
 
         return res
 
+    def get_sql_from_diff(self, gid, sid, did, scid, oid, data=None,
+                          diff_schema=None, drop_sql=False):
+        """
+        This function is used to get the DDL/DML statements.
+        :param gid: Group ID
+        :param sid: Serve ID
+        :param did: Database ID
+        :param scid: Schema ID
+        :param oid: Collation ID
+        :param data: Difference data
+        :param diff_schema: Target Schema
+        :param drop_sql: True if need to drop the fts configuration
+        :return:
+        """
+        sql = ''
+        if data:
+            if diff_schema:
+                data['schema'] = diff_schema
+            sql, name = self.get_sql(gid=gid, sid=sid, did=did, scid=scid,
+                                     data=data, pid=oid)
+        else:
+            if drop_sql:
+                sql = self.delete(gid=gid, sid=sid, did=did,
+                                  scid=scid, pid=oid, only_sql=True)
+            elif diff_schema:
+                sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, pid=oid,
+                               diff_schema=diff_schema, json_resp=False)
+            else:
+                sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, pid=oid,
+                               json_resp=False)
+        return sql
+
 
+SchemaDiffRegistry(blueprint.node_type, FtsParserView)
 FtsParserView.register_node_view(blueprint)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/update.sql
index bce558da0..48e335b1d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/update.sql
@@ -15,6 +15,23 @@ ALTER TEXT SEARCH PARSER {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(o_data.n
 ALTER TEXT SEARCH PARSER {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(name)}}
     SET SCHEMA {{data.schema}};
 {% endif %}
+{# Schema Diff SQL for FTS PARSER #}
+{% if data.prsstart or data.prstoken or data.prsend or data.prslextype or data.prsheadline %}
+-- WARNING:
+-- We have found the difference in either of START or GETTOKEN or END or
+-- LEXTYPES or HEADLINE, so we need to drop the existing parser first
+-- and re-create it.
+DROP TEXT SEARCH PARSER {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(name)}};
+
+CREATE TEXT SEARCH PARSER {{ conn|qtIdent(o_data.schema, name) }} (
+    START = {% if data.prsstart is defined %}{{data.prsstart}}{% else %}{{o_data.prsstart}}{% endif %},
+    GETTOKEN = {% if data.prstoken is defined %}{{data.prstoken}}{% else %}{{o_data.prstoken}}{% endif %},
+    END = {% if data.prsend is defined %}{{data.prsend}}{% else %}{{o_data.prsend}}{% endif %},
+    LEXTYPES = {% if data.prslextype is defined %}{{data.prslextype}}{% else %}{{o_data.prslextype}}{% endif %}{% if (data.prsheadline and data.prsheadline != '-') or (o_data.prsheadline and o_data.prsheadline != '-') %},
+    HEADLINE = {% if data.prsheadline is defined %}{{data.prsheadline}}{% else %}{{o_data.prsheadline}}{% endif %}{% endif %}
+
+);
+{% endif %}
 {% if "description" in data and data.description != o_data.description %}
 COMMENT ON TEXT SEARCH PARSER {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(name)}}
     IS {{ data.description|qtLiteral }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/__init__.py
index dd5ec7980..7032682f1 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/__init__.py
@@ -443,7 +443,7 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare):
         )
 
     @check_precondition
-    def delete(self, gid, sid, did, scid, tid=None):
+    def delete(self, gid, sid, did, scid, tid=None, only_sql=False):
         """
         This function will drop the fts_template object
         :param gid: group id
@@ -451,6 +451,7 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare):
         :param did: database id
         :param scid: schema id
         :param tid: fts tempate id
+        :param only_sql: Return only sql if True
         """
         if tid is None:
             data = request.form if request.form else json.loads(
@@ -493,6 +494,10 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare):
                                   cascade=cascade
                                   )
 
+            # Used for schema diff tool
+            if only_sql:
+                return sql
+
             status, res = self.conn.execute_scalar(sql)
             if not status:
                 return internal_server_error(errormsg=res)
@@ -691,7 +696,8 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare):
         )
 
     @check_precondition
-    def sql(self, gid, sid, did, scid, tid):
+    def sql(self, gid, sid, did, scid, tid, diff_schema=None,
+            json_resp=True):
         """
         This function will reverse generate sql for sql panel
         :param gid: group id
@@ -699,6 +705,8 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare):
         :param did: database id
         :param scid: schema id
         :param tid: fts tempate id
+        :param diff_schema: Target Schema for schema diff
+        :param json_resp: True then return json response
         """
         sql = render_template(
             "/".join([self.template_path, 'sql.sql']),
@@ -721,6 +729,25 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare):
                     "FTS Template node.")
             )
 
+        # Used for schema diff tool
+        if diff_schema:
+            data = {'schema': scid}
+            # Fetch schema name from schema oid
+            sql = render_template("/".join([self.template_path,
+                                            'schema.sql']),
+                                  data=data,
+                                  conn=self.conn,
+                                  )
+
+            status, schema = self.conn.execute_scalar(sql)
+            if not status:
+                return internal_server_error(errormsg=schema)
+
+            res = res.replace(schema, diff_schema)
+
+        if not json_resp:
+            return res
+
         return ajax_response(response=res)
 
     @check_precondition
@@ -786,5 +813,38 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare):
 
         return res
 
+    def get_sql_from_diff(self, gid, sid, did, scid, oid, data=None,
+                          diff_schema=None, drop_sql=False):
+        """
+        This function is used to get the DDL/DML statements.
+        :param gid: Group ID
+        :param sid: Serve ID
+        :param did: Database ID
+        :param scid: Schema ID
+        :param oid: Collation ID
+        :param data: Difference data
+        :param diff_schema: Target Schema
+        :param drop_sql: True if need to drop the fts configuration
+        :return:
+        """
+        sql = ''
+        if data:
+            if diff_schema:
+                data['schema'] = diff_schema
+            sql, name = self.get_sql(gid=gid, sid=sid, did=did, scid=scid,
+                                     data=data, tid=oid)
+        else:
+            if drop_sql:
+                sql = self.delete(gid=gid, sid=sid, did=did,
+                                  scid=scid, tid=oid, only_sql=True)
+            elif diff_schema:
+                sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, tid=oid,
+                               diff_schema=diff_schema, json_resp=False)
+            else:
+                sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, tid=oid,
+                               json_resp=False)
+        return sql
+
 
+SchemaDiffRegistry(blueprint.node_type, FtsTemplateView)
 FtsTemplateView.register_node_view(blueprint)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/update.sql
index d6754f0f2..d76f12115 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/update.sql
@@ -15,6 +15,21 @@ ALTER TEXT SEARCH TEMPLATE {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(o_data
 ALTER TEXT SEARCH TEMPLATE {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(name)}}
     SET SCHEMA {{conn|qtIdent(data.schema)}};
 {% endif %}
+{# Schema Diff SQL for FTS PARSER #}
+{% if data.tmplinit or data.tmpllexize %}
+-- WARNING:
+-- We have found the difference in either of INIT or LEXIZE,
+-- so we need to drop the existing template first and re-create it.
+DROP TEXT SEARCH TEMPLATE {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(name)}};
+
+CREATE TEXT SEARCH TEMPLATE {{ conn|qtIdent(o_data.schema, name) }} (
+{% if data.tmplinit and data.tmplinit != '-'%}
+    INIT = {{data.tmplinit}},
+{% endif %}
+    LEXIZE = {% if data.tmpllexize is defined %}{{data.tmpllexize}}{% else %}{{o_data.tmpllexize}}{% endif %}
+
+);
+{% endif %}
 {% if 'description' in data and data.description != o_data.description %}
 COMMENT ON TEXT SEARCH TEMPLATE {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(name)}}
     IS {{ data.description|qtLiteral }};
diff --git a/web/pgadmin/tools/schema_diff/__init__.py b/web/pgadmin/tools/schema_diff/__init__.py
index 04ff644ce..14f041e92 100644
--- a/web/pgadmin/tools/schema_diff/__init__.py
+++ b/web/pgadmin/tools/schema_diff/__init__.py
@@ -435,7 +435,7 @@ def compare(trans_id, source_sid, source_did, source_scid,
     status, msg = check_version_compatibility(source_sid, target_sid)
 
     if not status:
-        return make_json_response(success=0, errormsg=msg, status=404)
+        return make_json_response(success=0, errormsg=msg, status=428)
 
     comparison_result = []
 
diff --git a/web/pgadmin/tools/schema_diff/directory_compare.py b/web/pgadmin/tools/schema_diff/directory_compare.py
index eb0d7d220..112609b9b 100644
--- a/web/pgadmin/tools/schema_diff/directory_compare.py
+++ b/web/pgadmin/tools/schema_diff/directory_compare.py
@@ -318,37 +318,40 @@ def directory_diff(source_dict, target_dict, ignore_keys=[], difference={}):
             ))
 
             if len(tmp_list) > 0:
+                tmp_target = copy.deepcopy(target_dict[key])
                 for index in range(len(source_dict[key])):
                     source = copy.deepcopy(source_dict[key][index])
                     if type(source) is list:
                         # TODO
                         pass
                     elif type(source) is dict:
-                        tmp_key_array = ['name', 'colname', 'argid']
-                        for tmp_key in tmp_key_array:
-                            if tmp_key in source:
-                                if type(target_dict[key]) is list and \
-                                        len(target_dict[key]) > 0:
-                                    tmp = None
-                                    tmp_target = \
-                                        copy.deepcopy(target_dict[key])
-                                    for item in tmp_target:
-                                        if tmp_key in item and \
-                                                item[tmp_key] == \
-                                                source[tmp_key]:
-                                            tmp = copy.deepcopy(item)
-                                    if tmp and source != tmp:
-                                        updated.append(copy.deepcopy(source))
-                                        tmp_target.remove(tmp)
-                                    elif tmp and source == tmp:
-                                        tmp_target.remove(tmp)
-                                    elif tmp is None:
-                                        added.append(source)
-                                else:
+                        tmp_key_array = ['name', 'colname', 'argid', 'token',
+                                         'option']
+                        # Check the above keys are exist in the dictionary
+                        tmp_key = is_key_exists(tmp_key_array, source)
+                        if tmp_key is not None:
+                            if type(target_dict[key]) is list and \
+                                    len(target_dict[key]) > 0:
+                                tmp = None
+                                for item in tmp_target:
+                                    if tmp_key in item and \
+                                            item[tmp_key] == \
+                                            source[tmp_key]:
+                                        tmp = copy.deepcopy(item)
+                                if tmp and source != tmp:
+                                    updated.append(copy.deepcopy(source))
+                                    tmp_target.remove(tmp)
+                                elif tmp and source == tmp:
+                                    tmp_target.remove(tmp)
+                                elif tmp is None:
                                     added.append(source)
+                            else:
+                                added.append(source)
 
-                            difference[key] = {}
+                        difference[key] = {}
+                        if len(added) > 0:
                             difference[key]['added'] = added
+                        if len(updated) > 0:
                             difference[key]['changed'] = updated
                     elif target_dict[key] is None or \
                             (type(target_dict[key]) is list and
@@ -358,7 +361,7 @@ def directory_diff(source_dict, target_dict, ignore_keys=[], difference={}):
                     elif type(target_dict[key]) is list and\
                             len(target_dict[key]) > index:
                         difference[key] = source
-            else:
+            elif len(source_dict[key]) > 0:
                 difference[key] = source_dict[key]
 
             if type(source) is dict and tmp_target and key in tmp_target and \
@@ -383,6 +386,21 @@ def directory_diff(source_dict, target_dict, ignore_keys=[], difference={}):
     return difference
 
 
+def is_key_exists(key_list, target_dict):
+    """
+    This function is used to iterate the key list and check that key is
+    present in the given dictionary
+    :param key_list:
+    :param target_dict:
+    :return:
+    """
+    for key in key_list:
+        if key in target_dict:
+            return key
+
+    return None
+
+
 def parce_acl(source, target):
     key = 'acl'
 
diff --git a/web/pgadmin/tools/schema_diff/tests/pg/10_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/pg/10_plus/source.sql
index 99757ceb2..de56c5876 100644
--- a/web/pgadmin/tools/schema_diff/tests/pg/10_plus/source.sql
+++ b/web/pgadmin/tools/schema_diff/tests/pg/10_plus/source.sql
@@ -438,3 +438,91 @@ ALTER TABLE source."test view f" OWNER TO postgres;
 --
 
 COMMENT ON VIEW source."test view f" IS 'cmn';
+
+-- Collation scripts
+CREATE COLLATION source.coll_src
+    FROM pg_catalog."POSIX";
+
+ALTER COLLATION source.coll_src
+    OWNER TO postgres;
+
+COMMENT ON COLLATION source.coll_src
+    IS 'Test Comment';
+
+CREATE COLLATION source.coll_diff
+    (LC_COLLATE = 'POSIX', LC_CTYPE = 'POSIX');
+
+ALTER COLLATION source.coll_diff
+    OWNER TO postgres;
+
+COMMENT ON COLLATION source.coll_diff
+    IS 'Test Comment';
+
+-- FTS Configuration scripts
+CREATE TEXT SEARCH CONFIGURATION source.fts_con_src (
+    COPY=german
+);
+
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_src OWNER TO postgres;
+
+COMMENT ON TEXT SEARCH CONFIGURATION source.fts_con_src
+    IS 'Test Comment';
+
+
+CREATE TEXT SEARCH CONFIGURATION source.fts_con_diff (
+	PARSER = default
+);
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR asciiword WITH german_stem;
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR email WITH simple;
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR hword WITH dutch_stem;
+
+-- FTS Dictionary scripts
+CREATE TEXT SEARCH DICTIONARY source.fts_dict_src (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_src
+    IS 'Test Comment';
+
+CREATE TEXT SEARCH DICTIONARY source.fts_dict_diff (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_diff
+    IS 'Test Comment';
+
+-- FTS Parser scripts
+CREATE TEXT SEARCH PARSER source.fts_par_src (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+COMMENT ON TEXT SEARCH PARSER source.fts_par_src
+      IS 'Test Comment';
+
+CREATE TEXT SEARCH PARSER source.fts_par_diff (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+COMMENT ON TEXT SEARCH PARSER source.fts_par_diff
+      IS 'Test Comment';
+
+-- FTS Template scripts
+CREATE TEXT SEARCH TEMPLATE source.fts_templ_src (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_src IS 'Test Comment';
+
+CREATE TEXT SEARCH TEMPLATE source.fts_templ_diff (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_diff IS 'Test Comment';
diff --git a/web/pgadmin/tools/schema_diff/tests/pg/10_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/pg/10_plus/target.sql
index c3042ab60..fb5a7918f 100644
--- a/web/pgadmin/tools/schema_diff/tests/pg/10_plus/target.sql
+++ b/web/pgadmin/tools/schema_diff/tests/pg/10_plus/target.sql
@@ -427,3 +427,73 @@ ALTER TABLE target."test view f" OWNER TO postgres;
 --
 
 COMMENT ON VIEW target."test view f" IS 'cmn';
+
+-- Collation scripts
+CREATE COLLATION target.coll_tar
+    FROM pg_catalog."POSIX";
+
+ALTER COLLATION target.coll_tar
+    OWNER TO postgres;
+
+CREATE COLLATION target.coll_diff
+    (LC_COLLATE = 'C', LC_CTYPE = 'C');
+
+ALTER COLLATION target.coll_diff
+    OWNER TO postgres;
+
+-- FTS Configuration scripts
+CREATE TEXT SEARCH CONFIGURATION target.fts_con_tar (
+    COPY=german
+);
+
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_tar OWNER TO postgres;
+
+CREATE TEXT SEARCH CONFIGURATION target.fts_con_diff (
+	PARSER = default
+);
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR asciiword WITH dutch_stem;
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR email WITH simple;
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR hword WITH german_stem;
+
+-- FTS Dictionary scripts
+CREATE TEXT SEARCH DICTIONARY target.fts_dict_tar (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+CREATE TEXT SEARCH DICTIONARY target.fts_dict_diff (
+    TEMPLATE = simple,
+    stopwords = 'german'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY target.fts_dict_diff
+    IS 'Comment';
+
+-- FTS Parser scripts
+CREATE TEXT SEARCH PARSER target.fts_par_tar (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+CREATE TEXT SEARCH PARSER target.fts_par_diff (
+    START = int4_accum,
+    GETTOKEN = inet_gist_penalty,
+    END = btint2sortsupport,
+    LEXTYPES = dispell_init);
+
+COMMENT ON TEXT SEARCH PARSER target.fts_par_diff
+      IS 'Comment';
+
+-- FTS Template scripts
+CREATE TEXT SEARCH TEMPLATE target.fts_templ_tar (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+CREATE TEXT SEARCH TEMPLATE target.fts_templ_diff (
+    INIT = dsimple_init,
+    LEXIZE = dsimple_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE target.fts_templ_diff IS 'Comment';
diff --git a/web/pgadmin/tools/schema_diff/tests/pg/11_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/pg/11_plus/source.sql
index 2429eb799..c0002d624 100644
--- a/web/pgadmin/tools/schema_diff/tests/pg/11_plus/source.sql
+++ b/web/pgadmin/tools/schema_diff/tests/pg/11_plus/source.sql
@@ -437,3 +437,91 @@ ALTER TABLE source."test view f" OWNER TO postgres;
 --
 
 COMMENT ON VIEW source."test view f" IS 'cmn';
+
+-- Collation scripts
+CREATE COLLATION source.coll_src
+    FROM pg_catalog."POSIX";
+
+ALTER COLLATION source.coll_src
+    OWNER TO postgres;
+
+COMMENT ON COLLATION source.coll_src
+    IS 'Test Comment';
+
+CREATE COLLATION source.coll_diff
+    (LC_COLLATE = 'POSIX', LC_CTYPE = 'POSIX');
+
+ALTER COLLATION source.coll_diff
+    OWNER TO postgres;
+
+COMMENT ON COLLATION source.coll_diff
+    IS 'Test Comment';
+
+-- FTS Configuration scripts
+CREATE TEXT SEARCH CONFIGURATION source.fts_con_src (
+    COPY=german
+);
+
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_src OWNER TO postgres;
+
+COMMENT ON TEXT SEARCH CONFIGURATION source.fts_con_src
+    IS 'Test Comment';
+
+
+CREATE TEXT SEARCH CONFIGURATION source.fts_con_diff (
+	PARSER = default
+);
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR asciiword WITH german_stem;
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR email WITH simple;
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR hword WITH dutch_stem;
+
+-- FTS Dictionary scripts
+CREATE TEXT SEARCH DICTIONARY source.fts_dict_src (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_src
+    IS 'Test Comment';
+
+CREATE TEXT SEARCH DICTIONARY source.fts_dict_diff (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_diff
+    IS 'Test Comment';
+
+-- FTS Parser scripts
+CREATE TEXT SEARCH PARSER source.fts_par_src (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+COMMENT ON TEXT SEARCH PARSER source.fts_par_src
+      IS 'Test Comment';
+
+CREATE TEXT SEARCH PARSER source.fts_par_diff (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+COMMENT ON TEXT SEARCH PARSER source.fts_par_diff
+      IS 'Test Comment';
+
+-- FTS Template scripts
+CREATE TEXT SEARCH TEMPLATE source.fts_templ_src (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_src IS 'Test Comment';
+
+CREATE TEXT SEARCH TEMPLATE source.fts_templ_diff (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_diff IS 'Test Comment';
diff --git a/web/pgadmin/tools/schema_diff/tests/pg/11_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/pg/11_plus/target.sql
index 89a029232..170ae8d9f 100644
--- a/web/pgadmin/tools/schema_diff/tests/pg/11_plus/target.sql
+++ b/web/pgadmin/tools/schema_diff/tests/pg/11_plus/target.sql
@@ -426,3 +426,73 @@ ALTER TABLE target."test view f" OWNER TO postgres;
 --
 
 COMMENT ON VIEW target."test view f" IS 'cmn';
+
+-- Collation scripts
+CREATE COLLATION target.coll_tar
+    FROM pg_catalog."POSIX";
+
+ALTER COLLATION target.coll_tar
+    OWNER TO postgres;
+
+CREATE COLLATION target.coll_diff
+    (LC_COLLATE = 'C', LC_CTYPE = 'C');
+
+ALTER COLLATION target.coll_diff
+    OWNER TO postgres;
+
+-- FTS Configuration scripts
+CREATE TEXT SEARCH CONFIGURATION target.fts_con_tar (
+    COPY=german
+);
+
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_tar OWNER TO postgres;
+
+CREATE TEXT SEARCH CONFIGURATION target.fts_con_diff (
+	PARSER = default
+);
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR asciiword WITH dutch_stem;
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR email WITH simple;
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR hword WITH german_stem;
+
+-- FTS Dictionary scripts
+CREATE TEXT SEARCH DICTIONARY target.fts_dict_tar (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+CREATE TEXT SEARCH DICTIONARY target.fts_dict_diff (
+    TEMPLATE = simple,
+    stopwords = 'german'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY target.fts_dict_diff
+    IS 'Comment';
+
+-- FTS Parser scripts
+CREATE TEXT SEARCH PARSER target.fts_par_tar (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+CREATE TEXT SEARCH PARSER target.fts_par_diff (
+    START = int4_accum,
+    GETTOKEN = inet_gist_penalty,
+    END = btint2sortsupport,
+    LEXTYPES = dispell_init);
+
+COMMENT ON TEXT SEARCH PARSER target.fts_par_diff
+      IS 'Comment';
+
+-- FTS Template scripts
+CREATE TEXT SEARCH TEMPLATE target.fts_templ_tar (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+CREATE TEXT SEARCH TEMPLATE target.fts_templ_diff (
+    INIT = dsimple_init,
+    LEXIZE = dsimple_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE target.fts_templ_diff IS 'Comment';
diff --git a/web/pgadmin/tools/schema_diff/tests/pg/12_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/pg/12_plus/source.sql
index 8ef87e3bc..43d51e4eb 100644
--- a/web/pgadmin/tools/schema_diff/tests/pg/12_plus/source.sql
+++ b/web/pgadmin/tools/schema_diff/tests/pg/12_plus/source.sql
@@ -438,3 +438,91 @@ CREATE PROCEDURE source.proc1(arg1 bigint)
 
 
 ALTER PROCEDURE source.proc1(arg1 bigint) OWNER TO postgres;
+
+-- Collation scripts
+CREATE COLLATION source.coll_src
+    FROM pg_catalog."POSIX";
+
+ALTER COLLATION source.coll_src
+    OWNER TO postgres;
+
+COMMENT ON COLLATION source.coll_src
+    IS 'Test Comment';
+
+CREATE COLLATION source.coll_diff
+    (LC_COLLATE = 'POSIX', LC_CTYPE = 'POSIX');
+
+ALTER COLLATION source.coll_diff
+    OWNER TO postgres;
+
+COMMENT ON COLLATION source.coll_diff
+    IS 'Test Comment';
+
+-- FTS Configuration scripts
+CREATE TEXT SEARCH CONFIGURATION source.fts_con_src (
+    COPY=german
+);
+
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_src OWNER TO postgres;
+
+COMMENT ON TEXT SEARCH CONFIGURATION source.fts_con_src
+    IS 'Test Comment';
+
+
+CREATE TEXT SEARCH CONFIGURATION source.fts_con_diff (
+	PARSER = default
+);
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR asciiword WITH german_stem;
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR email WITH simple;
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR hword WITH dutch_stem;
+
+-- FTS Dictionary scripts
+CREATE TEXT SEARCH DICTIONARY source.fts_dict_src (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_src
+    IS 'Test Comment';
+
+CREATE TEXT SEARCH DICTIONARY source.fts_dict_diff (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_diff
+    IS 'Test Comment';
+
+-- FTS Parser scripts
+CREATE TEXT SEARCH PARSER source.fts_par_src (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+COMMENT ON TEXT SEARCH PARSER source.fts_par_src
+      IS 'Test Comment';
+
+CREATE TEXT SEARCH PARSER source.fts_par_diff (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+COMMENT ON TEXT SEARCH PARSER source.fts_par_diff
+      IS 'Test Comment';
+
+-- FTS Template scripts
+CREATE TEXT SEARCH TEMPLATE source.fts_templ_src (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_src IS 'Test Comment';
+
+CREATE TEXT SEARCH TEMPLATE source.fts_templ_diff (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_diff IS 'Test Comment';
diff --git a/web/pgadmin/tools/schema_diff/tests/pg/12_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/pg/12_plus/target.sql
index d57841744..b9e863aa1 100644
--- a/web/pgadmin/tools/schema_diff/tests/pg/12_plus/target.sql
+++ b/web/pgadmin/tools/schema_diff/tests/pg/12_plus/target.sql
@@ -415,3 +415,73 @@ CREATE PROCEDURE target.dodaj_klijenta(v_naziv character varying, v_oib characte
 
 
 ALTER PROCEDURE target.dodaj_klijenta(v_naziv character varying, v_oib character varying, v_pdv_id character varying, v_adresa character varying, v_mjesto integer, v_drzava character varying, v_tip_p_sub character varying, v_vlasnik character varying, v_pdv boolean, v_fisk boolean, v_iban character varying, v_k_osoba character varying, v_email character varying, v_br_tel character varying, v_radna_god numeric, v_schema character varying) OWNER TO postgres;
+
+-- Collation scripts
+CREATE COLLATION target.coll_tar
+    FROM pg_catalog."POSIX";
+
+ALTER COLLATION target.coll_tar
+    OWNER TO postgres;
+
+CREATE COLLATION target.coll_diff
+    (LC_COLLATE = 'C', LC_CTYPE = 'C');
+
+ALTER COLLATION target.coll_diff
+    OWNER TO postgres;
+
+-- FTS Configuration scripts
+CREATE TEXT SEARCH CONFIGURATION target.fts_con_tar (
+    COPY=german
+);
+
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_tar OWNER TO postgres;
+
+CREATE TEXT SEARCH CONFIGURATION target.fts_con_diff (
+	PARSER = default
+);
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR asciiword WITH dutch_stem;
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR email WITH simple;
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR hword WITH german_stem;
+
+-- FTS Dictionary scripts
+CREATE TEXT SEARCH DICTIONARY target.fts_dict_tar (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+CREATE TEXT SEARCH DICTIONARY target.fts_dict_diff (
+    TEMPLATE = simple,
+    stopwords = 'german'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY target.fts_dict_diff
+    IS 'Comment';
+
+-- FTS Parser scripts
+CREATE TEXT SEARCH PARSER target.fts_par_tar (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+CREATE TEXT SEARCH PARSER target.fts_par_diff (
+    START = int4_accum,
+    GETTOKEN = inet_gist_penalty,
+    END = btint2sortsupport,
+    LEXTYPES = dispell_init);
+
+COMMENT ON TEXT SEARCH PARSER target.fts_par_diff
+      IS 'Comment';
+
+-- FTS Template scripts
+CREATE TEXT SEARCH TEMPLATE target.fts_templ_tar (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+CREATE TEXT SEARCH TEMPLATE target.fts_templ_diff (
+    INIT = dsimple_init,
+    LEXIZE = dsimple_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE target.fts_templ_diff IS 'Comment';
diff --git a/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/source.sql
index af9054eeb..4511fb0bb 100644
--- a/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/source.sql
+++ b/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/source.sql
@@ -309,3 +309,89 @@ COMMENT ON RULE rule1 ON source.table_for_rule IS 'comments';
 CREATE RULE rule2 AS
     ON INSERT TO source.table_for_rule DO NOTHING;
 
+-- Collation scripts
+CREATE COLLATION source.coll_src
+    FROM pg_catalog."POSIX";
+
+ALTER COLLATION source.coll_src
+    OWNER TO postgres;
+
+COMMENT ON COLLATION source.coll_src
+    IS 'Test Comment';
+
+CREATE COLLATION source.coll_diff
+    (LC_COLLATE = 'POSIX', LC_CTYPE = 'POSIX');
+
+ALTER COLLATION source.coll_diff
+    OWNER TO postgres;
+
+COMMENT ON COLLATION source.coll_diff
+    IS 'Test Comment';
+
+-- FTS Configuration scripts
+CREATE TEXT SEARCH CONFIGURATION source.fts_con_src (
+    COPY=german
+);
+
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_src OWNER TO postgres;
+
+COMMENT ON TEXT SEARCH CONFIGURATION source.fts_con_src
+    IS 'Test Comment';
+
+CREATE TEXT SEARCH CONFIGURATION source.fts_con_diff (
+	PARSER = default
+);
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR asciiword WITH german_stem;
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR email WITH simple;
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR hword WITH dutch_stem;
+
+-- FTS Dictionary scripts
+CREATE TEXT SEARCH DICTIONARY source.fts_dict_src (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_src
+    IS 'Test Comment';
+
+CREATE TEXT SEARCH DICTIONARY source.fts_dict_diff (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_diff
+    IS 'Test Comment';
+
+-- FTS Parser scripts
+CREATE TEXT SEARCH PARSER source.fts_par_src (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+COMMENT ON TEXT SEARCH PARSER source.fts_par_src
+      IS 'Test Comment';
+
+CREATE TEXT SEARCH PARSER source.fts_par_diff (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+COMMENT ON TEXT SEARCH PARSER source.fts_par_diff
+      IS 'Test Comment';
+
+-- FTS Template scripts
+CREATE TEXT SEARCH TEMPLATE source.fts_templ_src (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_src IS 'Test Comment';
+
+CREATE TEXT SEARCH TEMPLATE source.fts_templ_diff (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_diff IS 'Test Comment';
diff --git a/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/target.sql
index ddc4fda28..0a479dddd 100644
--- a/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/target.sql
+++ b/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/target.sql
@@ -335,3 +335,73 @@ CREATE RULE rule3 AS
 --
 
 REFRESH MATERIALIZED VIEW target."MView";
+
+-- Collation scripts
+CREATE COLLATION target.coll_tar
+    FROM pg_catalog."POSIX";
+
+ALTER COLLATION target.coll_tar
+    OWNER TO postgres;
+
+CREATE COLLATION target.coll_diff
+    (LC_COLLATE = 'C', LC_CTYPE = 'C');
+
+ALTER COLLATION target.coll_diff
+    OWNER TO postgres;
+
+-- FTS Configuration scripts
+CREATE TEXT SEARCH CONFIGURATION target.fts_con_tar (
+    COPY=german
+);
+
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_tar OWNER TO postgres;
+
+CREATE TEXT SEARCH CONFIGURATION target.fts_con_diff (
+	PARSER = default
+);
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR asciiword WITH dutch_stem;
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR email WITH simple;
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR hword WITH german_stem;
+
+-- FTS Dictionary scripts
+CREATE TEXT SEARCH DICTIONARY target.fts_dict_tar (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+CREATE TEXT SEARCH DICTIONARY target.fts_dict_diff (
+    TEMPLATE = simple,
+    stopwords = 'german'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY target.fts_dict_diff
+    IS 'Comment';
+
+-- FTS Parser scripts
+CREATE TEXT SEARCH PARSER target.fts_par_tar (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+CREATE TEXT SEARCH PARSER target.fts_par_diff (
+    START = int4_accum,
+    GETTOKEN = inet_gist_penalty,
+    END = btint2sortsupport,
+    LEXTYPES = dispell_init);
+
+COMMENT ON TEXT SEARCH PARSER target.fts_par_diff
+      IS 'Comment';
+
+-- FTS Template scripts
+CREATE TEXT SEARCH TEMPLATE target.fts_templ_tar (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+CREATE TEXT SEARCH TEMPLATE target.fts_templ_diff (
+    INIT = dsimple_init,
+    LEXIZE = dsimple_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE target.fts_templ_diff IS 'Comment';
diff --git a/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/source.sql
index b60dbcd55..2a148d4a2 100644
--- a/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/source.sql
+++ b/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/source.sql
@@ -374,3 +374,91 @@ COMMENT ON RULE rule1 ON source.table_for_rule IS 'comments';
 
 CREATE RULE rule2 AS
     ON INSERT TO source.table_for_rule DO NOTHING;
+
+-- Collation scripts
+CREATE COLLATION source.coll_src
+    FROM pg_catalog."POSIX";
+
+ALTER COLLATION source.coll_src
+    OWNER TO enterprisedb;
+
+COMMENT ON COLLATION source.coll_src
+    IS 'Test Comment';
+
+CREATE COLLATION source.coll_diff
+    (LC_COLLATE = 'POSIX', LC_CTYPE = 'POSIX');
+
+ALTER COLLATION source.coll_diff
+    OWNER TO enterprisedb;
+
+COMMENT ON COLLATION source.coll_diff
+    IS 'Test Comment';
+
+-- FTS Configuration scripts
+CREATE TEXT SEARCH CONFIGURATION source.fts_con_src (
+    COPY=german
+);
+
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_src OWNER TO enterprisedb;
+
+COMMENT ON TEXT SEARCH CONFIGURATION source.fts_con_src
+    IS 'Test Comment';
+
+
+CREATE TEXT SEARCH CONFIGURATION source.fts_con_diff (
+	PARSER = default
+);
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR asciiword WITH german_stem;
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR email WITH simple;
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR hword WITH dutch_stem;
+
+-- FTS Dictionary scripts
+CREATE TEXT SEARCH DICTIONARY source.fts_dict_src (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_src
+    IS 'Test Comment';
+
+CREATE TEXT SEARCH DICTIONARY source.fts_dict_diff (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_diff
+    IS 'Test Comment';
+
+-- FTS Parser scripts
+CREATE TEXT SEARCH PARSER source.fts_par_src (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+COMMENT ON TEXT SEARCH PARSER source.fts_par_src
+      IS 'Test Comment';
+
+CREATE TEXT SEARCH PARSER source.fts_par_diff (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+COMMENT ON TEXT SEARCH PARSER source.fts_par_diff
+      IS 'Test Comment';
+
+-- FTS Template scripts
+CREATE TEXT SEARCH TEMPLATE source.fts_templ_src (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_src IS 'Test Comment';
+
+CREATE TEXT SEARCH TEMPLATE source.fts_templ_diff (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_diff IS 'Test Comment';
diff --git a/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/target.sql
index 57ef05d6a..27c5b36ad 100644
--- a/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/target.sql
+++ b/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/target.sql
@@ -362,3 +362,73 @@ CREATE RULE rule3 AS
 --
 
 REFRESH MATERIALIZED VIEW target."MView";
+
+-- Collation scripts
+CREATE COLLATION target.coll_tar
+    FROM pg_catalog."POSIX";
+
+ALTER COLLATION target.coll_tar
+    OWNER TO enterprisedb;
+
+CREATE COLLATION target.coll_diff
+    (LC_COLLATE = 'C', LC_CTYPE = 'C');
+
+ALTER COLLATION target.coll_diff
+    OWNER TO enterprisedb;
+
+-- FTS Configuration scripts
+CREATE TEXT SEARCH CONFIGURATION target.fts_con_tar (
+    COPY=german
+);
+
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_tar OWNER TO enterprisedb;
+
+CREATE TEXT SEARCH CONFIGURATION target.fts_con_diff (
+	PARSER = default
+);
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR asciiword WITH dutch_stem;
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR email WITH simple;
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR hword WITH german_stem;
+
+-- FTS Dictionary scripts
+CREATE TEXT SEARCH DICTIONARY target.fts_dict_tar (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+CREATE TEXT SEARCH DICTIONARY target.fts_dict_diff (
+    TEMPLATE = simple,
+    stopwords = 'german'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY target.fts_dict_diff
+    IS 'Comment';
+
+-- FTS Parser scripts
+CREATE TEXT SEARCH PARSER target.fts_par_tar (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+CREATE TEXT SEARCH PARSER target.fts_par_diff (
+    START = int4_accum,
+    GETTOKEN = inet_gist_penalty,
+    END = btint2sortsupport,
+    LEXTYPES = dispell_init);
+
+COMMENT ON TEXT SEARCH PARSER target.fts_par_diff
+      IS 'Comment';
+
+-- FTS Template scripts
+CREATE TEXT SEARCH TEMPLATE target.fts_templ_tar (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+CREATE TEXT SEARCH TEMPLATE target.fts_templ_diff (
+    INIT = dsimple_init,
+    LEXIZE = dsimple_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE target.fts_templ_diff IS 'Comment';
diff --git a/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/source.sql
index 67ec216d6..7b9ad2954 100644
--- a/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/source.sql
+++ b/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/source.sql
@@ -309,3 +309,90 @@ COMMENT ON RULE rule1 ON source.table_for_rule IS 'comments';
 CREATE RULE rule2 AS
     ON INSERT TO source.table_for_rule DO NOTHING;
 
+-- Collation scripts
+CREATE COLLATION source.coll_src
+    FROM pg_catalog."default";
+
+ALTER COLLATION source.coll_src
+    OWNER TO enterprisedb;
+
+COMMENT ON COLLATION source.coll_src
+    IS 'Test Comment';
+
+CREATE COLLATION source.coll_diff
+    FROM pg_catalog."default";
+
+ALTER COLLATION source.coll_diff
+    OWNER TO enterprisedb;
+
+COMMENT ON COLLATION source.coll_diff
+    IS 'Test Comment';
+
+-- FTS Configuration scripts
+CREATE TEXT SEARCH CONFIGURATION source.fts_con_src (
+    COPY=german
+);
+
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_src OWNER TO enterprisedb;
+
+COMMENT ON TEXT SEARCH CONFIGURATION source.fts_con_src
+    IS 'Test Comment';
+
+
+CREATE TEXT SEARCH CONFIGURATION source.fts_con_diff (
+	PARSER = default
+);
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR asciiword WITH german_stem;
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR email WITH simple;
+ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR hword WITH dutch_stem;
+
+-- FTS Dictionary scripts
+CREATE TEXT SEARCH DICTIONARY source.fts_dict_src (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_src
+    IS 'Test Comment';
+
+CREATE TEXT SEARCH DICTIONARY source.fts_dict_diff (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_diff
+    IS 'Test Comment';
+
+-- FTS Parser scripts
+CREATE TEXT SEARCH PARSER source.fts_par_src (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+COMMENT ON TEXT SEARCH PARSER source.fts_par_src
+      IS 'Test Comment';
+
+CREATE TEXT SEARCH PARSER source.fts_par_diff (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+COMMENT ON TEXT SEARCH PARSER source.fts_par_diff
+      IS 'Test Comment';
+
+-- FTS Template scripts
+CREATE TEXT SEARCH TEMPLATE source.fts_templ_src (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_src IS 'Test Comment';
+
+CREATE TEXT SEARCH TEMPLATE source.fts_templ_diff (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_diff IS 'Test Comment';
diff --git a/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/target.sql
index f64765224..df53f01d5 100644
--- a/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/target.sql
+++ b/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/target.sql
@@ -335,3 +335,73 @@ CREATE RULE rule3 AS
 --
 
 REFRESH MATERIALIZED VIEW target."MView";
+
+-- Collation scripts
+CREATE COLLATION target.coll_tar
+    FROM pg_catalog."default";
+
+ALTER COLLATION target.coll_tar
+    OWNER TO enterprisedb;
+
+CREATE COLLATION target.coll_diff
+    (LC_COLLATE = 'C', LC_CTYPE = 'C');
+
+ALTER COLLATION target.coll_diff
+    OWNER TO enterprisedb;
+
+-- FTS Configuration scripts
+CREATE TEXT SEARCH CONFIGURATION target.fts_con_tar (
+    COPY=german
+);
+
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_tar OWNER TO enterprisedb;
+
+CREATE TEXT SEARCH CONFIGURATION target.fts_con_diff (
+	PARSER = default
+);
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR asciiword WITH dutch_stem;
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR email WITH simple;
+ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR hword WITH german_stem;
+
+-- FTS Dictionary scripts
+CREATE TEXT SEARCH DICTIONARY target.fts_dict_tar (
+    TEMPLATE = simple,
+    stopwords = 'english'
+);
+
+CREATE TEXT SEARCH DICTIONARY target.fts_dict_diff (
+    TEMPLATE = simple,
+    stopwords = 'german'
+);
+
+COMMENT ON TEXT SEARCH DICTIONARY target.fts_dict_diff
+    IS 'Comment';
+
+-- FTS Parser scripts
+CREATE TEXT SEARCH PARSER target.fts_par_tar (
+    START = prsd_start,
+    GETTOKEN = prsd_nexttoken,
+    END = prsd_end,
+    LEXTYPES = prsd_lextype);
+
+CREATE TEXT SEARCH PARSER target.fts_par_diff (
+    START = int4_accum,
+    GETTOKEN = inet_gist_penalty,
+    END = btint2sortsupport,
+    LEXTYPES = dispell_init);
+
+COMMENT ON TEXT SEARCH PARSER target.fts_par_diff
+      IS 'Comment';
+
+-- FTS Template scripts
+CREATE TEXT SEARCH TEMPLATE target.fts_templ_tar (
+    INIT = dispell_init,
+    LEXIZE = dispell_lexize
+);
+
+CREATE TEXT SEARCH TEMPLATE target.fts_templ_diff (
+    INIT = dsimple_init,
+    LEXIZE = dsimple_lexize
+);
+
+COMMENT ON TEXT SEARCH TEMPLATE target.fts_templ_diff IS 'Comment';
diff --git a/web/pgadmin/tools/schema_diff/tests/test_schema_diff_comp.py b/web/pgadmin/tools/schema_diff/tests/test_schema_diff_comp.py
index 57dec4599..f15e2b516 100644
--- a/web/pgadmin/tools/schema_diff/tests/test_schema_diff_comp.py
+++ b/web/pgadmin/tools/schema_diff/tests/test_schema_diff_comp.py
@@ -165,6 +165,8 @@ class SchemaDiffTestCase(BaseTestGenerator):
                     self.assertEquals(response.status_code, 200)
                     response_data = json.loads(response.data.decode('utf-8'))
                     file_obj.write(response_data['diff_ddl'])
+            elif 'diff_ddl' in diff:
+                file_obj.write(diff['diff_ddl'])
 
         file_obj.close()
         try:
