[pgAdmin4][Patch] - RM 4555 - RE-SQL for Exclusion Constraint

Khushboo Vashi <[email protected]> Mon, 5 Aug 2019 12:30:27 +0530
Newsgroups gmane.comp.db.postgresql.pgadmin.devel
Message-ID <CAFOhELf8CN0f3iE7jXZ1yTwowdYs1VV10aEc81TtXcsG_5PBhg@mail.gmail.com>
Hi,

Please find the attached patch for the RE-SQL tests of the Exclusion
constraint node with some bug fixes in SQL.

Thanks,
Khushboo
RM_4555.patch (application/octet-stream, 22.2 KB)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/11_plus/alter_exclusion_constraint.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/11_plus/alter_exclusion_constraint.sql
new file mode 100644
index 00000000..5fe0272f
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/11_plus/alter_exclusion_constraint.sql
@@ -0,0 +1,14 @@
+-- Constraint: Exclusion_$%{}[]()&*^!@"'`\/#a
+
+-- ALTER TABLE testschema.tableforexclusion DROP CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#a";
+
+ALTER TABLE testschema.tableforexclusion
+    ADD CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#a" EXCLUDE USING btree (
+    col2 text_pattern_ops WITH =)
+    INCLUDE (col1)
+    WITH (FILLFACTOR=98)
+    WHERE (col1 > 1)
+    DEFERRABLE INITIALLY DEFERRED;
+
+COMMENT ON CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#a" ON testschema.tableforexclusion
+    IS 'Comment for alter';
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/11_plus/create_exclusion_constraint.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/11_plus/create_exclusion_constraint.sql
new file mode 100644
index 00000000..88cb3d58
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/11_plus/create_exclusion_constraint.sql
@@ -0,0 +1,15 @@
+-- Constraint: Exclusion_$%{}[]()&*^!@"'`\/#
+
+-- ALTER TABLE testschema.tableforexclusion DROP CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#";
+
+ALTER TABLE testschema.tableforexclusion
+    ADD CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#" EXCLUDE USING btree (
+    col2 text_pattern_ops WITH =)
+    INCLUDE (col1)
+    WITH (FILLFACTOR=12)
+    WHERE (col1 > 1)
+    DEFERRABLE INITIALLY DEFERRED;
+
+COMMENT ON CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#" ON testschema.tableforexclusion
+    IS 'Comment for create';
+
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/11_plus/msql_exclusion_constraint.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/11_plus/msql_exclusion_constraint.sql
new file mode 100644
index 00000000..38adeec0
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/11_plus/msql_exclusion_constraint.sql
@@ -0,0 +1,6 @@
+ALTER TABLE testschema.tableforexclusion
+    RENAME CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#" TO "Exclusion_$%{}[]()&*^!@""'`\/#a";
+ALTER INDEX testschema."Exclusion_$%{}[]()&*^!@""'`\/#a"
+    SET (FILLFACTOR=98);
+COMMENT ON CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#a" ON testschema.tableforexclusion
+    IS 'Comment for alter';
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/11_plus/test.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/11_plus/test.json
new file mode 100644
index 00000000..11d14487
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/11_plus/test.json
@@ -0,0 +1,81 @@
+{
+  "scenarios": [
+    {
+      "type": "create",
+      "name": "Create Table",
+      "endpoint": "NODE-table.obj",
+      "sql_endpoint": "NODE-table.sql_id",
+      "data": {
+        "name": "tableforexclusion",
+        "columns": [{
+          "name": "col1",
+          "cltype": "integer",
+          "is_primary_key": true
+        }, {
+          "name": "col2",
+          "cltype": "text"
+        }],
+        "is_partitioned": false,
+        "schema": "testschema",
+        "spcname": "pg_default"
+      },
+      "store_table_id": true
+    }, {
+      "type": "create",
+      "name": "Create Extension",
+      "endpoint": "NODE-extension.obj",
+      "sql_endpoint": "NODE-extension.sql_id",
+      "data": {
+        "name": "btree_gist",
+        "version": "",
+        "relocatable": true
+      }
+    }, {
+      "type": "create",
+      "name": "Create Exclusion Constraint",
+      "endpoint": "NODE-exclusion_constraint.obj",
+      "sql_endpoint": "NODE-exclusion_constraint.sql_id",
+      "data": {
+        "name": "Exclusion_$%{}[]()&*^!@\"'`\\/#",
+        "comment": "Comment for create",
+        "fillfactor": "12",
+        "amname": "btree",
+        "condeferrable": true,
+        "condeferred": true,
+        "indconstraint": "col1 > 1",
+        "columns": [
+          {
+            "column": "col2",
+            "col_type": "text",
+            "order": false,
+            "nulls_order": false,
+            "operator": "=",
+            "oper_class": "text_pattern_ops"
+          }
+        ],
+        "include": ["col1"]
+      },
+      "expected_sql_file": "create_exclusion_constraint.sql"
+    }, {
+      "type": "alter",
+      "name": "Alter Exclusion Constraint",
+      "endpoint": "NODE-exclusion_constraint.obj_id",
+      "sql_endpoint": "NODE-exclusion_constraint.sql_id",
+      "msql_endpoint": "NODE-exclusion_constraint.msql_id",
+      "data": {
+        "name": "Exclusion_$%{}[]()&*^!@\"'`\\/#a",
+        "comment": "Comment for alter",
+        "fillfactor": "98"
+      },
+      "expected_sql_file": "alter_exclusion_constraint.sql",
+      "expected_msql_file": "msql_exclusion_constraint.sql"
+    }, {
+      "type": "delete",
+      "name": "Drop Exclusion Constraint",
+      "endpoint": "NODE-exclusion_constraint.delete_id",
+      "data": {
+        "name": "Exclusion_$%{}[]()&*^!@\"'`\\/#a"
+      }
+    }
+  ]
+}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/alter_exclusion_constraint.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/alter_exclusion_constraint.sql
new file mode 100644
index 00000000..ecc1f9f6
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/alter_exclusion_constraint.sql
@@ -0,0 +1,13 @@
+-- Constraint: Exclusion_$%{}[]()&*^!@"'`\/#a
+
+-- ALTER TABLE testschema.tableforexclusion DROP CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#a";
+
+ALTER TABLE testschema.tableforexclusion
+    ADD CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#a" EXCLUDE USING gist (
+    col2 WITH <>)
+    WITH (FILLFACTOR=98)
+    WHERE (col1 > 1)
+    DEFERRABLE INITIALLY DEFERRED;
+
+COMMENT ON CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#a" ON testschema.tableforexclusion
+    IS 'Comment for alter';
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/alter_exclusion_constraint_1.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/alter_exclusion_constraint_1.sql
new file mode 100644
index 00000000..529715b0
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/alter_exclusion_constraint_1.sql
@@ -0,0 +1,10 @@
+-- Constraint: Exclusion_$%{}[]()&*^!@"'`\/#_1a
+
+-- ALTER TABLE testschema.tableforexclusion DROP CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#_1a";
+
+ALTER TABLE testschema.tableforexclusion
+    ADD CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#_1a" EXCLUDE USING gist (
+    col2 WITH <>);
+
+COMMENT ON CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#_1a" ON testschema.tableforexclusion
+    IS 'Comment for alter';
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/create_exclusion_constraint.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/create_exclusion_constraint.sql
new file mode 100644
index 00000000..765ab93f
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/create_exclusion_constraint.sql
@@ -0,0 +1,13 @@
+-- Constraint: Exclusion_$%{}[]()&*^!@"'`\/#
+
+-- ALTER TABLE testschema.tableforexclusion DROP CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#";
+
+ALTER TABLE testschema.tableforexclusion
+    ADD CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#" EXCLUDE USING gist (
+    col2 WITH <>)
+    WITH (FILLFACTOR=12)
+    WHERE (col1 > 1)
+    DEFERRABLE INITIALLY DEFERRED;
+
+COMMENT ON CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#" ON testschema.tableforexclusion
+    IS 'Comment for create';
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/create_exclusion_constraint_1.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/create_exclusion_constraint_1.sql
new file mode 100644
index 00000000..d7c463c3
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/create_exclusion_constraint_1.sql
@@ -0,0 +1,11 @@
+-- Constraint: Exclusion_$%{}[]()&*^!@"'`\/#_1
+
+-- ALTER TABLE testschema.tableforexclusion DROP CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#_1";
+
+ALTER TABLE testschema.tableforexclusion
+    ADD CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#_1" EXCLUDE USING gist (
+    col2 WITH <>)
+    WITH (FILLFACTOR=12);
+
+COMMENT ON CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#_1" ON testschema.tableforexclusion
+    IS 'Comment for create';
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/msql_exclusion_constraint.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/msql_exclusion_constraint.sql
new file mode 100644
index 00000000..38adeec0
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/msql_exclusion_constraint.sql
@@ -0,0 +1,6 @@
+ALTER TABLE testschema.tableforexclusion
+    RENAME CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#" TO "Exclusion_$%{}[]()&*^!@""'`\/#a";
+ALTER INDEX testschema."Exclusion_$%{}[]()&*^!@""'`\/#a"
+    SET (FILLFACTOR=98);
+COMMENT ON CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#a" ON testschema.tableforexclusion
+    IS 'Comment for alter';
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/msql_exclusion_constraint_1.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/msql_exclusion_constraint_1.sql
new file mode 100644
index 00000000..a0190e47
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/msql_exclusion_constraint_1.sql
@@ -0,0 +1,6 @@
+ALTER TABLE testschema.tableforexclusion
+    RENAME CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#_1" TO "Exclusion_$%{}[]()&*^!@""'`\/#_1a";
+ALTER INDEX testschema."Exclusion_$%{}[]()&*^!@""'`\/#_1a"
+    RESET (FILLFACTOR);
+COMMENT ON CONSTRAINT "Exclusion_$%{}[]()&*^!@""'`\/#_1a" ON testschema.tableforexclusion
+    IS 'Comment for alter';
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/test.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/test.json
new file mode 100644
index 00000000..7b0828ca
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/default/test.json
@@ -0,0 +1,120 @@
+{
+  "scenarios": [
+    {
+      "type": "create",
+      "name": "Create Table",
+      "endpoint": "NODE-table.obj",
+      "sql_endpoint": "NODE-table.sql_id",
+      "data": {
+        "name": "tableforexclusion",
+        "columns": [{
+          "name": "col1",
+          "cltype": "integer",
+          "is_primary_key": true
+        }, {
+          "name": "col2",
+          "cltype": "text"
+        }],
+        "is_partitioned": false,
+        "schema": "testschema",
+        "spcname": "pg_default"
+      },
+      "store_table_id": true
+    }, {
+      "type": "create",
+      "name": "Create Extension",
+      "endpoint": "NODE-extension.obj",
+      "sql_endpoint": "NODE-extension.sql_id",
+      "data": {
+        "name": "btree_gist",
+        "version": "",
+        "relocatable": true
+      }
+    }, {
+      "type": "create",
+      "name": "Create Exclusion Constraint",
+      "endpoint": "NODE-exclusion_constraint.obj",
+      "sql_endpoint": "NODE-exclusion_constraint.sql_id",
+      "data": {
+        "name": "Exclusion_$%{}[]()&*^!@\"'`\\/#",
+        "comment": "Comment for create",
+        "fillfactor": "12",
+        "amname": "gist",
+        "condeferrable": true,
+        "condeferred": true,
+        "indconstraint": "col1 > 1",
+        "columns": [
+          {
+            "column": "col2",
+            "order": false,
+            "nulls_order": false,
+            "operator": "<>",
+            "is_sort_nulls_applicable": false
+          }
+        ]
+      },
+      "expected_sql_file": "create_exclusion_constraint.sql"
+    }, {
+      "type": "alter",
+      "name": "Alter Exclusion Constraint",
+      "endpoint": "NODE-exclusion_constraint.obj_id",
+      "sql_endpoint": "NODE-exclusion_constraint.sql_id",
+      "msql_endpoint": "NODE-exclusion_constraint.msql_id",
+      "data": {
+        "name": "Exclusion_$%{}[]()&*^!@\"'`\\/#a",
+        "comment": "Comment for alter",
+        "fillfactor": "98"
+      },
+      "expected_sql_file": "alter_exclusion_constraint.sql",
+      "expected_msql_file": "msql_exclusion_constraint.sql"
+    }, {
+      "type": "delete",
+      "name": "Drop Exclusion Constraint",
+      "endpoint": "NODE-exclusion_constraint.delete_id",
+      "data": {
+        "name": "Exclusion_$%{}[]()&*^!@\"'`\\/#a"
+      }
+    }, {
+      "type": "create",
+      "name": "Create Exclusion Constraint",
+      "endpoint": "NODE-exclusion_constraint.obj",
+      "sql_endpoint": "NODE-exclusion_constraint.sql_id",
+      "data": {
+        "name": "Exclusion_$%{}[]()&*^!@\"'`\\/#_1",
+        "comment": "Comment for create",
+        "fillfactor": "12",
+        "amname": "gist",
+        "columns": [
+          {
+            "column": "col2",
+            "order": false,
+            "nulls_order": false,
+            "operator": "<>",
+            "is_sort_nulls_applicable": false
+          }
+        ]
+      },
+      "expected_sql_file": "create_exclusion_constraint_1.sql"
+    }, {
+      "type": "alter",
+      "name": "Alter Exclusion Constraint",
+      "endpoint": "NODE-exclusion_constraint.obj_id",
+      "sql_endpoint": "NODE-exclusion_constraint.sql_id",
+      "msql_endpoint": "NODE-exclusion_constraint.msql_id",
+      "data": {
+        "name": "Exclusion_$%{}[]()&*^!@\"'`\\/#_1a",
+        "comment": "Comment for alter",
+        "fillfactor": ""
+      },
+      "expected_sql_file": "alter_exclusion_constraint_1.sql",
+      "expected_msql_file": "msql_exclusion_constraint_1.sql"
+    }, {
+      "type": "delete",
+      "name": "Drop Exclusion Constraint",
+      "endpoint": "NODE-exclusion_constraint.delete_id",
+      "data": {
+        "name": "Exclusion_$%{}[]()&*^!@\"'`\\/#_1a"
+      }
+    }
+  ]
+}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/11_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/11_plus/create.sql
index 1f4274b4..e7a6f489 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/11_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/11_plus/create.sql
@@ -1,14 +1,14 @@
 ALTER TABLE {{ conn|qtIdent(data.schema, data.table) }}
     ADD{% if data.name %} CONSTRAINT {{ conn|qtIdent(data.name) }}{% endif%} EXCLUDE {% if data.amname and data.amname != '' %}USING {{data.amname}}{% endif %} (
     {% for col in data.columns %}{% if loop.index != 1 %},
-    {% endif %}{{ conn|qtIdent(col.column)}}{% if col.oper_class and col.oper_class != '' %} {{col.oper_class}}{% endif%}{% if col.order is defined and col.is_sort_nulls_applicable %}{% if col.order %} ASC{% else %} DESC{% endif %} NULLS{% endif %} {% if col.nulls_order is defined and col.is_sort_nulls_applicable %}{% if col.nulls_order %}FIRST {% else %}LAST {% endif %}{% endif %}WITH {{col.operator}}{% endfor %})
-{% if data.include|length > 0 %}
-    INCLUDE({% for col in data.include %}{% if loop.index != 1 %}, {% endif %}{{conn|qtIdent(col)}}{% endfor %}){% endif %}
-{% if data.fillfactor %}
+    {% endif %}{{ conn|qtIdent(col.column)}}{% if col.oper_class and col.oper_class != '' %} {{col.oper_class}}{% endif%}{% if col.order is defined and col.is_sort_nulls_applicable %}{% if col.order %} ASC{% else %} DESC{% endif %} NULLS{% endif %} {% if col.nulls_order is defined and col.is_sort_nulls_applicable %}{% if col.nulls_order %}FIRST {% else %}LAST {% endif %}{% endif %}WITH {{col.operator}}{% endfor %}){% if data.include|length > 0 %}
+
+    INCLUDE ({% for col in data.include %}{% if loop.index != 1 %}, {% endif %}{{conn|qtIdent(col)}}{% endfor %}){% endif %}{% if data.fillfactor %}
 
     WITH (FILLFACTOR={{data.fillfactor}}){% endif %}{% if data.spcname and data.spcname != "pg_default" %}
 
     USING INDEX TABLESPACE {{ conn|qtIdent(data.spcname) }}{% endif %}{% if data.indconstraint %}
+
     WHERE ({{data.indconstraint}}){% endif%}
 {% if data.condeferrable %}
 
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/11_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/11_plus/properties.sql
index d700de19..d2bdc82f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/11_plus/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/11_plus/properties.sql
@@ -16,7 +16,7 @@ SELECT cls.oid,
     condeferrable,
     condeferred,
     substring(array_to_string(cls.reloptions, ',') from 'fillfactor=([0-9]*)') AS fillfactor,
-    pg_get_expr(idx.indpred, idx.indrelid) AS indconstraint
+    pg_get_expr(idx.indpred, idx.indrelid, true) AS indconstraint
 FROM pg_index idx
 JOIN pg_class cls ON cls.oid=indexrelid
 JOIN pg_class tab ON tab.oid=indrelid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/create.sql
index 2990446d..0e8264a1 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/create.sql
@@ -2,6 +2,7 @@ ALTER TABLE {{ conn|qtIdent(data.schema, data.table) }}
     ADD{% if data.name %} CONSTRAINT {{ conn|qtIdent(data.name) }}{% endif%} EXCLUDE {% if data.amname and data.amname != '' %}USING {{data.amname}}{% endif %} (
     {% for col in data.columns %}{% if loop.index != 1 %},
     {% endif %}{{ conn|qtIdent(col.column)}}{% if col.oper_class and col.oper_class != '' %} {{col.oper_class}}{% endif%}{% if col.order is defined and col.is_sort_nulls_applicable %}{% if col.order %} ASC{% else %} DESC{% endif %} NULLS{% endif %} {% if col.nulls_order is defined and col.is_sort_nulls_applicable %}{% if col.nulls_order %}FIRST {% else %}LAST {% endif %}{% endif %}WITH {{col.operator}}{% endfor %}){% if data.fillfactor %}
+
     WITH (FILLFACTOR={{data.fillfactor}}){% endif %}{% if data.spcname and data.spcname != "pg_default" %}
 
     USING INDEX TABLESPACE {{ conn|qtIdent(data.spcname) }}{% endif %}{% if data.indconstraint %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/properties.sql
index 919181b1..7feaeb7d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/properties.sql
@@ -16,7 +16,7 @@ SELECT cls.oid,
     condeferrable,
     condeferred,
     substring(array_to_string(cls.reloptions, ',') from 'fillfactor=([0-9]*)') AS fillfactor,
-    pg_get_expr(idx.indpred, idx.indrelid) AS indconstraint
+    pg_get_expr(idx.indpred, idx.indrelid, true) AS indconstraint
 FROM pg_index idx
 JOIN pg_class cls ON cls.oid=indexrelid
 JOIN pg_class tab ON tab.oid=indrelid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/update.sql
index 4d70f215..0a8fa9c9 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/update.sql
@@ -14,9 +14,13 @@ ALTER INDEX {{ conn|qtIdent(data.schema, data.name) }}
 ALTER INDEX {{ conn|qtIdent(data.schema, data.name) }}
     SET (FILLFACTOR={{ data.fillfactor }});
 {% endif %}
+{% if data.fillfactor == "" and data.fillfactor != o_data.fillfactor %}
+ALTER INDEX {{ conn|qtIdent(data.schema, data.name) }}
+    RESET (FILLFACTOR);
+{% endif %}
 {# ==== To update exclusion constraint comments ==== #}
 {% if data.comment is defined and data.comment != o_data.comment %}
 COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
     IS {{ data.comment|qtLiteral }};
 {% endif %}
-{% endif %}
\ No newline at end of file
+{% endif %}