Dear All:

I make some improvements to pgadmin4, In order to support Greenplum6, and
fix some incompatibility issues with Greenplum5.

Source code: https://github.com/cobolbaby/pgadmin4
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py
index 69d917d..b90bf88 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py
@@ -11,20 +11,22 @@ import re
 from functools import wraps
 
 import simplejson as json
-from flask import render_template, request, jsonify, current_app
+from flask import current_app, jsonify, render_template, request
 from flask_babelex import gettext
 
 import pgadmin.browser.server_groups.servers as servers
 from config import PG_DEFAULT_DRIVER
 from pgadmin.browser.collection import CollectionNodeModule, PGChildModule
-from pgadmin.browser.server_groups.servers.utils import parse_priv_from_db, \
-    parse_priv_to_db
+from pgadmin.browser.server_groups.servers.utils import (parse_priv_from_db,
+                                                         parse_priv_to_db)
 from pgadmin.browser.utils import PGChildNodeView
-from pgadmin.utils.ajax import make_json_response, internal_server_error, \
-    make_response as ajax_response, gone, bad_request
-from pgadmin.utils.driver import get_driver
-from pgadmin.tools.schema_diff.node_registry import SchemaDiffRegistry
 from pgadmin.model import Database
+from pgadmin.tools.schema_diff.node_registry import SchemaDiffRegistry
+from pgadmin.utils.ajax import (bad_request, gone, internal_server_error,
+                                make_json_response)
+from pgadmin.utils.ajax import make_response as ajax_response
+from pgadmin.utils.driver import get_driver
+
 
 """
     This module is responsible for generating two nodes
@@ -266,7 +268,7 @@ class SchemaView(PGChildNodeView):
         """
         Returns the template path for GreenPlum servers.
         """
-        return '#gpdb#{0}#'.format(ver)
+        return 'gpdb/#gpdb#{0}#'.format(ver)
 
     def format_request_acls(self, data, modified=False, specific=None):
         acls = {}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py
index a05d915..ede5040 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py
@@ -16,23 +16,22 @@ import traceback
 from functools import wraps
 
 import simplejson as json
-from flask import render_template, request, jsonify, \
-    current_app
+from flask import current_app, jsonify, render_template, request
 from flask_babelex import gettext
 
 import pgadmin.browser.server_groups.servers.databases as databases
 from config import PG_DEFAULT_DRIVER
-from pgadmin.browser.server_groups.servers.databases.schemas.utils import \
-    SchemaChildModule, DataTypeReader
-from pgadmin.browser.server_groups.servers.databases.utils import \
-    parse_sec_labels_from_db, parse_variables_from_db
-from pgadmin.browser.server_groups.servers.utils import parse_priv_from_db, \
-    parse_priv_to_db
+from pgadmin.browser.server_groups.servers.databases.schemas.utils import (
+    DataTypeReader, SchemaChildModule)
+from pgadmin.browser.server_groups.servers.databases.utils import (
+    parse_sec_labels_from_db, parse_variables_from_db)
+from pgadmin.browser.server_groups.servers.utils import (parse_priv_from_db,
+                                                         parse_priv_to_db)
 from pgadmin.browser.utils import PGChildNodeView
 from pgadmin.tools.schema_diff.compare import SchemaDiffObjectCompare
 from pgadmin.tools.schema_diff.node_registry import SchemaDiffRegistry
-from pgadmin.utils.ajax import make_json_response, internal_server_error, \
-    make_response as ajax_response, gone
+from pgadmin.utils.ajax import gone, internal_server_error, make_json_response
+from pgadmin.utils.ajax import make_response as ajax_response
 from pgadmin.utils.driver import get_driver
 
 
@@ -361,12 +360,11 @@ class FunctionView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
                 template_initial = 'trigger_functions'
 
             # Set the template path for the SQL scripts
-            self.sql_template_path = "/".join([
-                template_initial,
-                self.manager.server_type,
-                'sql',
-                '#{0}#'
-            ]).format(self.manager.version)
+            self.sql_template_path = template_initial + (
+                "/{0}/sql/#{0}#{1}#".format(self.manager.server_type, self.manager.version) if 
+                self.manager.server_type == 'gpdb' else
+                "/{0}/sql/#{1}#".format(self.manager.server_type, self.manager.version)
+            )
 
             return f(*args, **kwargs)
 
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/gpdb/sql/6_plus/get_definition.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/gpdb/sql/6_plus/get_definition.sql
new file mode 100644
index 0000000..63a53d4
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/gpdb/sql/6_plus/get_definition.sql
@@ -0,0 +1,17 @@
+SELECT proretset, prosrc, probin,
+  pg_catalog.pg_get_function_arguments(pg_proc.oid) AS funcargs,
+  pg_catalog.pg_get_function_identity_arguments(pg_proc.oid) AS funciargs,
+  pg_catalog.pg_get_function_result(pg_proc.oid) AS funcresult,
+  proiswindow, provolatile, proisstrict, prosecdef,
+  proconfig, procost, prorows, prodataaccess,
+  'a' as proexeclocation,
+  (SELECT lanname FROM pg_catalog.pg_language WHERE pg_proc.oid = prolang) as lanname,
+  COALESCE(pg_catalog.pg_get_function_identity_arguments(pg_proc.oid), '') AS func_with_identity_arguments,
+  nspname,
+  proname,
+  COALESCE(pg_catalog.pg_get_function_arguments(pg_proc.oid), '') AS func_args
+FROM pg_catalog.pg_proc
+  JOIN pg_namespace nsp ON nsp.oid=pg_proc.pronamespace
+WHERE proisagg = FALSE
+  AND pronamespace = {{scid}}::oid
+  AND pg_proc.oid = {{fnid}}::oid;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/gpdb/sql/default/get_definition.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/gpdb/sql/default/get_definition.sql
index 699fc96..7cebe1b 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/gpdb/sql/default/get_definition.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/gpdb/sql/default/get_definition.sql
@@ -2,7 +2,7 @@ SELECT proretset, prosrc, probin,
   pg_catalog.pg_get_function_arguments(pg_proc.oid) AS funcargs,
   pg_catalog.pg_get_function_identity_arguments(pg_proc.oid) AS funciargs,
   pg_catalog.pg_get_function_result(pg_proc.oid) AS funcresult,
-  proiswin, provolatile, proisstrict, prosecdef,
+  proiswin as proiswindow, provolatile, proisstrict, prosecdef,
   proconfig, procost, prorows, prodataaccess,
   'a' as proexeclocation,
   (SELECT lanname FROM pg_catalog.pg_language WHERE pg_proc.oid = prolang) as lanname,
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/__init__.py
index 5f2aa3f..2dc7d27 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/__init__.py
@@ -9,21 +9,22 @@
 
 """Implements Foreign key constraint Node"""
 
-import simplejson as json
 from functools import wraps
 
-import pgadmin.browser.server_groups.servers.databases as database
-from flask import render_template, request, jsonify
+import simplejson as json
+from flask import jsonify, render_template, request
 from flask_babelex import gettext
-from pgadmin.browser.server_groups.servers.databases.schemas.tables.\
-    constraints.type import ConstraintRegistry, ConstraintTypeModule
+
+import pgadmin.browser.server_groups.servers.databases as database
+from config import PG_DEFAULT_DRIVER
+from pgadmin.browser.server_groups.servers.databases.schemas.tables.constraints.foreign_key import \
+    utils as fkey_utils
+from pgadmin.browser.server_groups.servers.databases.schemas.tables.constraints.type import (
+    ConstraintRegistry, ConstraintTypeModule)
 from pgadmin.browser.utils import PGChildNodeView
-from pgadmin.utils.ajax import make_json_response, internal_server_error, \
-    make_response as ajax_response, gone
-from pgadmin.browser.server_groups.servers.databases.schemas.tables.\
-    constraints.foreign_key import utils as fkey_utils
+from pgadmin.utils.ajax import gone, internal_server_error, make_json_response
+from pgadmin.utils.ajax import make_response as ajax_response
 from pgadmin.utils.driver import get_driver
-from config import PG_DEFAULT_DRIVER
 
 FOREIGN_KEY_NOT_FOUND = gettext("Could not find the foreign key.")
 
@@ -184,7 +185,7 @@ class ForeignKeyConstraintView(PGChildNodeView):
     """
 
     node_type = 'foreign_key'
-    FOREIGN_KEY_PATH = 'foreign_key/sql/#{0}#'
+    FOREIGN_KEY_PATH = 'foreign_key/sql/#{0}#{1}#'
 
     parent_ids = [
         {'type': 'int', 'id': 'gid'},
@@ -233,8 +234,8 @@ class ForeignKeyConstraintView(PGChildNodeView):
                 self.manager.db_info[kwargs['did']]['datlastsysoid'] \
                 if self.manager.db_info is not None and \
                 kwargs['did'] in self.manager.db_info else 0
-            self.template_path = self.FOREIGN_KEY_PATH.format(
-                self.manager.version)
+            self.template_path = self.FOREIGN_KEY_PATH.format(self.manager.server_type, 
+                                                              self.manager.version)
 
             # We need parent's name eg table name and schema name
             schema, table = fkey_utils.get_parent(self.conn, kwargs['tid'])
@@ -338,8 +339,8 @@ class ForeignKeyConstraintView(PGChildNodeView):
         """
         self.manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid)
         self.conn = self.manager.connection(did=did)
-        self.template_path = self.FOREIGN_KEY_PATH.format(
-            self.manager.version)
+        self.template_path = self.FOREIGN_KEY_PATH.format(self.manager.server_type, 
+                                                          self.manager.version)
 
         # We need parent's name eg table name and schema name
         schema, table = fkey_utils.get_parent(self.conn, tid)
@@ -449,7 +450,8 @@ class ForeignKeyConstraintView(PGChildNodeView):
         """
         self.manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid)
         self.conn = self.manager.connection(did=did)
-        self.template_path = self.FOREIGN_KEY_PATH.format(self.manager.version)
+        self.template_path = self.FOREIGN_KEY_PATH.format(self.manager.server_type, 
+                                                          self.manager.version)
 
         # We need parent's name eg table name and schema name
         schema, table = fkey_utils.get_parent(self.conn, tid)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/utils.py
index c122a4b..5b4a4d0 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/utils.py
@@ -9,11 +9,13 @@
 
 """ Implements Utility class for Foreign Keys. """
 
+from functools import wraps
+
 from flask import render_template
 from flask_babelex import gettext as _
+
 from pgadmin.utils.ajax import internal_server_error
-from pgadmin.utils.exception import ObjectGone, ExecuteError
-from functools import wraps
+from pgadmin.utils.exception import ExecuteError, ObjectGone
 
 FKEY_PROPERTIES_SQL = 'properties.sql'
 
@@ -29,8 +31,8 @@ def get_template_path(f):
         # Here args[0] will hold the connection object
         conn_obj = args[0]
         if 'template_path' not in kwargs:
-            kwargs['template_path'] = 'foreign_key/sql/#{0}#'.format(
-                conn_obj.manager.version)
+            kwargs['template_path'] = 'foreign_key/sql/#{0}#{1}#'.format(conn_obj.manager.server_type, 
+                                                                         conn_obj.manager.version)
 
         return f(*args, **kwargs)
     return wrap
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/gpdb_5.0_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/gpdb_5.0_plus/properties.sql
new file mode 100644
index 0000000..6837520
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/gpdb_5.0_plus/properties.sql
@@ -0,0 +1,32 @@
+SELECT
+      FALSE as convalidated,
+      ct.oid,
+      conname as name,
+      condeferrable,
+      condeferred,
+      confupdtype,
+      confdeltype,
+      CASE confmatchtype
+        WHEN 's' THEN FALSE
+        WHEN 'f' THEN TRUE
+      END AS confmatchtype,
+      conkey,
+      confkey,
+      confrelid,
+      nl.nspname as fknsp,
+      cl.relname as fktab,
+      nr.nspname as refnsp,
+      cr.relname as reftab,
+      description as comment
+FROM pg_constraint ct
+JOIN pg_class cl ON cl.oid=conrelid
+JOIN pg_namespace nl ON nl.oid=cl.relnamespace
+JOIN pg_class cr ON cr.oid=confrelid
+JOIN pg_namespace nr ON nr.oid=cr.relnamespace
+LEFT OUTER JOIN pg_description des ON (des.objoid=ct.oid AND des.classoid='pg_constraint'::regclass)
+WHERE contype='f' AND
+conrelid = {{tid}}::oid
+{% if cid %}
+AND ct.oid = {{cid}}::oid
+{% endif %}
+ORDER BY conname
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/partitions/sql/gpdb/5_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/partitions/sql/gpdb/5_plus/create.sql
new file mode 100644
index 0000000..e69de29
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/partitions/sql/gpdb/6_plus/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/partitions/sql/gpdb/6_plus/nodes.sql
new file mode 100644
index 0000000..6b5b4ff
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/partitions/sql/gpdb/6_plus/nodes.sql
@@ -0,0 +1,39 @@
+SELECT
+  table_class.oid,
+  partitions.partitiontablename                                                   AS name,
+  (SELECT count(*)
+   FROM pg_trigger
+   WHERE tgrelid = table_class.oid AND tgisinternal = FALSE)                     AS triggercount,
+  (SELECT count(*)
+   FROM pg_trigger
+   WHERE tgrelid = table_class.oid AND tgisinternal = FALSE AND tgenabled = 'O') AS has_enable_triggers,
+  partitions.partitionboundary                                                    AS partition_value,
+  partitions.partitionschemaname                                                  AS schema_id,
+  schema_name,
+  CASE WHEN sub_partitions.n > 0
+    THEN TRUE
+  ELSE FALSE END                                                                     is_partitioned,
+  ''                                                                              AS partition_scheme
+FROM
+  (SELECT
+     table_class.relnamespace,
+     nsp.nspname AS schema_name,
+     partitions.partitiontablename,
+     partitions.partitionboundary,
+     partitions.partitionschemaname
+   FROM pg_class table_class
+     INNER JOIN pg_partitions partitions
+       ON (relname = tablename AND parentpartitiontablename IS NULL) OR relname = parentpartitiontablename
+     LEFT JOIN pg_namespace nsp ON table_class.relnamespace = nsp.oid
+   WHERE
+    {% if ptid %} table_class.oid = {{ ptid }}::OID {% endif %}
+    {% if not ptid %} table_class.oid = {{ tid }}::OID {% endif %}
+  ) AS partitions
+  LEFT JOIN (SELECT
+               parentpartitiontablename,
+               count(*) AS n
+             FROM pg_partitions
+             GROUP BY parentpartitiontablename) sub_partitions
+    ON partitions.partitiontablename = sub_partitions.parentpartitiontablename
+  LEFT JOIN pg_class table_class ON partitions.relnamespace = table_class.relnamespace AND partitions.partitiontablename = table_class.relname
+ORDER BY partitions.partitiontablename;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/partitions/sql/gpdb/6_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/partitions/sql/gpdb/6_plus/properties.sql
new file mode 100644
index 0000000..4911469
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/partitions/sql/gpdb/6_plus/properties.sql
@@ -0,0 +1,82 @@
+SELECT rel.oid, rel.relname AS name, rel.reltablespace AS spcoid,rel.relacl AS relacl_str,
+  (CASE WHEN length(spc.spcname::text) > 0 THEN spc.spcname ELSE
+    (SELECT sp.spcname FROM pg_database dtb
+    JOIN pg_tablespace sp ON dtb.dattablespace=sp.oid
+    WHERE dtb.oid = {{ did }}::oid)
+  END) as spcname,
+  (select nspname FROM pg_namespace WHERE oid = {{scid}}::oid ) as parent_schema,
+  nsp.nspname as schema,
+  pg_get_userbyid(rel.relowner) AS relowner, rel.relhasoids,
+  (CASE WHEN partitions.number_of_partitions > 0 THEN true ELSE false END) AS relispartition,
+  rel.relhassubclass, rel.reltuples::bigint, des.description, con.conname, con.conkey,
+	EXISTS(select 1 FROM pg_trigger
+			JOIN pg_proc pt ON pt.oid=tgfoid AND pt.proname='logtrigger'
+			JOIN pg_proc pc ON pc.pronamespace=pt.pronamespace AND pc.proname='slonyversion'
+			WHERE tgrelid=rel.oid) AS isrepl,
+	(SELECT count(*)
+   FROM pg_trigger
+   WHERE tgrelid = rel.oid AND tgisinternal = FALSE) AS triggercount,
+	(SELECT ARRAY(SELECT CASE WHEN (nspname NOT LIKE 'pg\_%') THEN
+            quote_ident(nspname)||'.'||quote_ident(c.relname)
+            ELSE quote_ident(c.relname) END AS inherited_tables
+    FROM pg_inherits i
+    JOIN pg_class c ON c.oid = i.inhparent
+    JOIN pg_namespace n ON n.oid=c.relnamespace
+    WHERE i.inhrelid = rel.oid ORDER BY inhseqno)) AS coll_inherits,
+  (SELECT count(*)
+		FROM pg_inherits i
+      JOIN pg_class c ON c.oid = i.inhparent
+      JOIN pg_namespace n ON n.oid=c.relnamespace
+		WHERE i.inhrelid = rel.oid) AS inherited_tables_cnt,
+  false AS relpersistence,
+	substring(array_to_string(rel.reloptions, ',') FROM 'fillfactor=([0-9]*)') AS fillfactor,
+	(substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_enabled=([a-z|0-9]*)'))::BOOL AS autovacuum_enabled,
+	substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_vacuum_threshold=([0-9]*)') AS autovacuum_vacuum_threshold,
+	substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_vacuum_scale_factor=([0-9]*[.]?[0-9]*)') AS autovacuum_vacuum_scale_factor,
+	substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_analyze_threshold=([0-9]*)') AS autovacuum_analyze_threshold,
+	substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_analyze_scale_factor=([0-9]*[.]?[0-9]*)') AS autovacuum_analyze_scale_factor,
+	substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_vacuum_cost_delay=([0-9]*)') AS autovacuum_vacuum_cost_delay,
+	substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_vacuum_cost_limit=([0-9]*)') AS autovacuum_vacuum_cost_limit,
+	substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_freeze_min_age=([0-9]*)') AS autovacuum_freeze_min_age,
+	substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_freeze_max_age=([0-9]*)') AS autovacuum_freeze_max_age,
+	substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_freeze_table_age=([0-9]*)') AS autovacuum_freeze_table_age,
+	(substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_enabled=([a-z|0-9]*)'))::BOOL AS toast_autovacuum_enabled,
+	substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_vacuum_threshold=([0-9]*)') AS toast_autovacuum_vacuum_threshold,
+	substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_vacuum_scale_factor=([0-9]*[.]?[0-9]*)') AS toast_autovacuum_vacuum_scale_factor,
+	substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_analyze_threshold=([0-9]*)') AS toast_autovacuum_analyze_threshold,
+	substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_analyze_scale_factor=([0-9]*[.]?[0-9]*)') AS toast_autovacuum_analyze_scale_factor,
+	substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_vacuum_cost_delay=([0-9]*)') AS toast_autovacuum_vacuum_cost_delay,
+	substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_vacuum_cost_limit=([0-9]*)') AS toast_autovacuum_vacuum_cost_limit,
+	substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_freeze_min_age=([0-9]*)') AS toast_autovacuum_freeze_min_age,
+	substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_freeze_max_age=([0-9]*)') AS toast_autovacuum_freeze_max_age,
+	substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_freeze_table_age=([0-9]*)') AS toast_autovacuum_freeze_table_age,
+	array_to_string(rel.reloptions, ',') AS table_vacuum_settings_str,
+	array_to_string(tst.reloptions, ',') AS toast_table_vacuum_settings_str,
+	rel.reloptions AS reloptions, tst.reloptions AS toast_reloptions, rel.reltype, typ.typname,
+	typ.typrelid AS typoid,
+	(CASE WHEN rel.reltoastrelid = 0 THEN false ELSE true END) AS hastoasttable,
+    -- Added for pgAdmin4
+	NULL AS seclabels,
+	(CASE WHEN rel.oid <= {{ datlastsysoid}}::oid THEN true ElSE false END) AS is_sys_table,
+	-- Added for partition table
+	(CASE WHEN partitions.number_of_partitions > 0 THEN true ELSE false END) AS is_partitioned,
+	'' AS partition_scheme,
+	{% if ptid %}
+	  (CASE WHEN partitions.number_of_partitions > 0 THEN partitions.expression ELSE '' END) AS partition_value,
+	  (SELECT relname FROM pg_class WHERE oid = {{ tid }}::oid) AS partitioned_table_name
+	{% else %}
+	  partitions.expression AS partition_value
+	{% endif %}
+
+FROM pg_class rel
+  LEFT OUTER JOIN pg_tablespace spc on spc.oid=rel.reltablespace
+  LEFT OUTER JOIN pg_description des ON (des.objoid=rel.oid AND des.objsubid=0 AND des.classoid='pg_class'::regclass)
+  LEFT OUTER JOIN pg_constraint con ON con.conrelid=rel.oid AND con.contype='p'
+  LEFT OUTER JOIN pg_class tst ON tst.oid = rel.reltoastrelid
+  LEFT JOIN pg_type typ ON rel.reltype=typ.oid
+  LEFT JOIN pg_inherits inh ON inh.inhrelid = rel.oid
+  LEFT JOIN pg_namespace nsp ON rel.relnamespace = nsp.oid
+  LEFT JOIN (SELECT tablename, partitionboundary as expression, count(*) number_of_partitions FROM pg_partitions GROUP BY tablename, expression) partitions ON rel.relname = tablename
+WHERE inh.inhparent = {{ tid }}::oid
+{% if ptid %}  AND rel.oid = {{ ptid }}::oid {% endif %}
+ORDER BY rel.relname;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/gpdb_6.0_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/gpdb_6.0_plus/properties.sql
new file mode 100644
index 0000000..f7d0448
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/gpdb_6.0_plus/properties.sql
@@ -0,0 +1,83 @@
+SELECT *,
+	(CASE when pre_coll_inherits is NULL then ARRAY[]::varchar[] else pre_coll_inherits END) as coll_inherits
+  {% if tid %}, (CASE WHEN is_partitioned THEN (SELECT substring(pg_get_partition_def({{ tid }}::oid, true) from 14)) ELSE '' END) AS partition_scheme {% endif %}
+FROM (
+	SELECT rel.oid, rel.relname AS name, rel.reltablespace AS spcoid,rel.relacl AS relacl_str,
+		(CASE WHEN length(spc.spcname::text) > 0 THEN spc.spcname ELSE
+			(SELECT sp.spcname FROM pg_database dtb
+			JOIN pg_tablespace sp ON dtb.dattablespace=sp.oid
+			WHERE dtb.oid = {{ did }}::oid)
+		END) as spcname,
+		(select nspname FROM pg_namespace WHERE oid = {{scid}}::oid ) as schema,
+		pg_get_userbyid(rel.relowner) AS relowner, rel.relhasoids,
+		rel.relhassubclass, rel.reltuples::bigint, des.description, con.conname, con.conkey,
+		EXISTS(select 1 FROM pg_trigger
+				JOIN pg_proc pt ON pt.oid=tgfoid AND pt.proname='logtrigger'
+				JOIN pg_proc pc ON pc.pronamespace=pt.pronamespace AND pc.proname='slonyversion'
+				WHERE tgrelid=rel.oid) AS isrepl,
+		(SELECT count(*) FROM pg_trigger WHERE tgrelid=rel.oid) AS triggercount,
+		(SELECT ARRAY(SELECT CASE WHEN (nspname NOT LIKE 'pg\_%') THEN
+							quote_ident(nspname)||'.'||quote_ident(c.relname)
+							ELSE quote_ident(c.relname) END AS inherited_tables
+			FROM pg_inherits i
+			JOIN pg_class c ON c.oid = i.inhparent
+			JOIN pg_namespace n ON n.oid=c.relnamespace
+			WHERE i.inhrelid = rel.oid ORDER BY inhseqno)) AS pre_coll_inherits,
+		(SELECT count(*)
+			FROM pg_inherits i
+				JOIN pg_class c ON c.oid = i.inhparent
+				JOIN pg_namespace n ON n.oid=c.relnamespace
+			WHERE i.inhrelid = rel.oid) AS inherited_tables_cnt,
+		false AS relpersistence,
+		substring(array_to_string(rel.reloptions, ',') FROM 'fillfactor=([0-9]*)') AS fillfactor,
+		substring(array_to_string(rel.reloptions, ',') FROM 'compresslevel=([0-9]*)') AS compresslevel,
+		substring(array_to_string(rel.reloptions, ',') FROM 'blocksize=([0-9]*)') AS blocksize,
+		substring(array_to_string(rel.reloptions, ',') FROM 'orientation=(row|column)') AS orientation,
+		substring(array_to_string(rel.reloptions, ',') FROM 'appendonly=(true|false)')::boolean AS appendonly,
+		substring(array_to_string(rel.reloptions, ',') FROM 'compresstype=(zlib|quicklz|rle_type|none)') AS compresstype,
+		(CASE WHEN (substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_enabled=([a-z|0-9]*)') = 'true')
+			THEN true ELSE false END) AS autovacuum_enabled,
+		substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_vacuum_threshold=([0-9]*)') AS autovacuum_vacuum_threshold,
+		substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_vacuum_scale_factor=([0-9]*[.]?[0-9]*)') AS autovacuum_vacuum_scale_factor,
+		substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_analyze_threshold=([0-9]*)') AS autovacuum_analyze_threshold,
+		substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_analyze_scale_factor=([0-9]*[.]?[0-9]*)') AS autovacuum_analyze_scale_factor,
+		substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_vacuum_cost_delay=([0-9]*)') AS autovacuum_vacuum_cost_delay,
+		substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_vacuum_cost_limit=([0-9]*)') AS autovacuum_vacuum_cost_limit,
+		substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_freeze_min_age=([0-9]*)') AS autovacuum_freeze_min_age,
+		substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_freeze_max_age=([0-9]*)') AS autovacuum_freeze_max_age,
+		substring(array_to_string(rel.reloptions, ',') FROM 'autovacuum_freeze_table_age=([0-9]*)') AS autovacuum_freeze_table_age,
+		(CASE WHEN (substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_enabled=([a-z|0-9]*)') =  'true')
+			THEN true ELSE false END) AS toast_autovacuum_enabled,
+		substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_vacuum_threshold=([0-9]*)') AS toast_autovacuum_vacuum_threshold,
+		substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_vacuum_scale_factor=([0-9]*[.]?[0-9]*)') AS toast_autovacuum_vacuum_scale_factor,
+		substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_analyze_threshold=([0-9]*)') AS toast_autovacuum_analyze_threshold,
+		substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_analyze_scale_factor=([0-9]*[.]?[0-9]*)') AS toast_autovacuum_analyze_scale_factor,
+		substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_vacuum_cost_delay=([0-9]*)') AS toast_autovacuum_vacuum_cost_delay,
+		substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_vacuum_cost_limit=([0-9]*)') AS toast_autovacuum_vacuum_cost_limit,
+		substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_freeze_min_age=([0-9]*)') AS toast_autovacuum_freeze_min_age,
+		substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_freeze_max_age=([0-9]*)') AS toast_autovacuum_freeze_max_age,
+		substring(array_to_string(tst.reloptions, ',') FROM 'autovacuum_freeze_table_age=([0-9]*)') AS toast_autovacuum_freeze_table_age,
+		array_to_string(rel.reloptions, ',') AS table_vacuum_settings_str,
+		array_to_string(tst.reloptions, ',') AS toast_table_vacuum_settings_str,
+		rel.reloptions AS reloptions, tst.reloptions AS toast_reloptions, NULL AS reloftype, typ.typname AS typname,
+		typ.typrelid AS typoid,
+		(CASE WHEN rel.reltoastrelid = 0 THEN false ELSE true END) AS hastoasttable,
+		ARRAY[]::varchar[] AS seclabels,
+		(CASE WHEN rel.oid <= {{ datlastsysoid}}::oid THEN true ElSE false END) AS is_sys_table,
+
+		gdp.distkey::smallint[] AS distribution,
+    (CASE WHEN (SELECT count(*) from pg_partition where parrelid = rel.oid) > 0 THEN true ELSE false END) AS is_partitioned
+
+
+	FROM pg_class rel
+		LEFT OUTER JOIN pg_tablespace spc on spc.oid=rel.reltablespace
+		LEFT OUTER JOIN pg_description des ON (des.objoid=rel.oid AND des.objsubid=0 AND des.classoid='pg_class'::regclass)
+		LEFT OUTER JOIN pg_constraint con ON con.conrelid=rel.oid AND con.contype='p'
+		LEFT OUTER JOIN pg_class tst ON tst.oid = rel.reltoastrelid
+		LEFT OUTER JOIN gp_distribution_policy gdp ON gdp.localoid = rel.oid
+		LEFT OUTER JOIN pg_type typ ON typ.oid = rel.reltype
+
+	 WHERE rel.relkind IN ('r','s','t') AND rel.relnamespace = {{ scid }}
+	{% if tid %}  AND rel.oid = {{ tid }}::oid {% endif %}
+) AS TableInformation
+ ORDER BY name
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py
index 1b90f8c..a95cd9f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py
@@ -9,42 +9,42 @@
 
 """ Implements Utility class for Table and Partitioned Table. """
 
-import re
 import copy
+import re
 from functools import wraps
+
 import simplejson as json
-from flask import render_template, jsonify, request
+from flask import jsonify, render_template, request
 from flask_babelex import gettext
 
-from pgadmin.browser.server_groups.servers.databases.schemas\
-    .tables.base_partition_table import BasePartitionTable
-from pgadmin.utils.ajax import make_json_response, internal_server_error, \
-    gone, make_response as ajax_response
-from pgadmin.browser.server_groups.servers.databases.schemas.utils \
-    import DataTypeReader, parse_rule_definition
-from pgadmin.browser.server_groups.servers.utils import parse_priv_from_db, \
-    parse_priv_to_db
+from config import PG_DEFAULT_DRIVER
+from pgadmin.browser.server_groups.servers.databases.schemas.tables.base_partition_table import \
+    BasePartitionTable
+from pgadmin.browser.server_groups.servers.databases.schemas.tables.columns import \
+    utils as column_utils
+from pgadmin.browser.server_groups.servers.databases.schemas.tables.compound_triggers import \
+    utils as compound_trigger_utils
+from pgadmin.browser.server_groups.servers.databases.schemas.tables.constraints.check_constraint import \
+    utils as check_utils
+from pgadmin.browser.server_groups.servers.databases.schemas.tables.constraints.exclusion_constraint import \
+    utils as exclusion_utils
+from pgadmin.browser.server_groups.servers.databases.schemas.tables.constraints.foreign_key import \
+    utils as fkey_utils
+from pgadmin.browser.server_groups.servers.databases.schemas.tables.constraints.index_constraint import \
+    utils as idxcons_utils
+from pgadmin.browser.server_groups.servers.databases.schemas.tables.row_security_policies import \
+    utils as row_security_policies_utils
+from pgadmin.browser.server_groups.servers.databases.schemas.tables.triggers import \
+    utils as trigger_utils
+from pgadmin.browser.server_groups.servers.databases.schemas.utils import (
+    DataTypeReader, parse_rule_definition)
+from pgadmin.browser.server_groups.servers.utils import (parse_priv_from_db,
+                                                         parse_priv_to_db)
 from pgadmin.browser.utils import PGChildNodeView
+from pgadmin.utils.ajax import gone, internal_server_error, make_json_response
+from pgadmin.utils.ajax import make_response as ajax_response
 from pgadmin.utils.compile_template_name import compile_template_path
 from pgadmin.utils.driver import get_driver
-from config import PG_DEFAULT_DRIVER
-from pgadmin.browser.server_groups.servers.databases.schemas.tables.\
-    columns import utils as column_utils
-from pgadmin.browser.server_groups.servers.databases.schemas.tables.\
-    constraints.foreign_key import utils as fkey_utils
-from pgadmin.browser.server_groups.servers.databases.schemas.tables.\
-    constraints.check_constraint import utils as check_utils
-from pgadmin.browser.server_groups.servers.databases.schemas.tables.\
-    constraints.exclusion_constraint import utils as exclusion_utils
-from pgadmin.browser.server_groups.servers.databases.schemas.tables.\
-    constraints.index_constraint import utils as idxcons_utils
-from pgadmin.browser.server_groups.servers.databases.schemas.tables.\
-    triggers import utils as trigger_utils
-from pgadmin.browser.server_groups.servers.databases.schemas.tables.\
-    compound_triggers import utils as compound_trigger_utils
-from pgadmin.browser.server_groups.servers.databases.schemas. \
-    tables.row_security_policies import \
-    utils as row_security_policies_utils
 
 
 class BaseTableView(PGChildNodeView, BasePartitionTable):
@@ -682,53 +682,53 @@ class BaseTableView(PGChildNodeView, BasePartitionTable):
                 part_data['partition_value'] = row['partition_value']
                 part_data['is_partitioned'] = row['is_partitioned']
                 part_data['partition_scheme'] = row['partition_scheme']
-                part_data['description'] = row['description']
-                part_data['relowner'] = row['relowner']
+                part_data['description'] = row.get('description')
+                part_data['relowner'] = row.get('relowner')
 
                 self.update_autovacuum_properties(row)
 
-                part_data['fillfactor'] = row['fillfactor']
-                part_data['autovacuum_custom'] = row['autovacuum_custom']
-                part_data['autovacuum_enabled'] = row['autovacuum_enabled']
+                part_data['fillfactor'] = row.get('fillfactor')
+                part_data['autovacuum_custom'] = row.get('autovacuum_custom')
+                part_data['autovacuum_enabled'] = row.get('autovacuum_enabled')
                 part_data['autovacuum_vacuum_threshold'] = \
-                    row['autovacuum_vacuum_threshold']
+                    row.get('autovacuum_vacuum_threshold')
                 part_data['autovacuum_vacuum_scale_factor'] = \
-                    row['autovacuum_vacuum_scale_factor']
+                    row.get('autovacuum_vacuum_scale_factor')
                 part_data['autovacuum_analyze_threshold'] = \
-                    row['autovacuum_analyze_threshold']
+                    row.get('autovacuum_analyze_threshold')
                 part_data['autovacuum_analyze_scale_factor'] = \
-                    row['autovacuum_analyze_scale_factor']
+                    row.get('autovacuum_analyze_scale_factor')
                 part_data['autovacuum_vacuum_cost_delay'] = \
-                    row['autovacuum_vacuum_cost_delay']
+                    row.get('autovacuum_vacuum_cost_delay')
                 part_data['autovacuum_vacuum_cost_limit'] = \
-                    row['autovacuum_vacuum_cost_limit']
+                    row.get('autovacuum_vacuum_cost_limit')
                 part_data['autovacuum_freeze_min_age'] = \
-                    row['autovacuum_freeze_min_age']
+                    row.get('autovacuum_freeze_min_age')
                 part_data['autovacuum_freeze_max_age'] = \
-                    row['autovacuum_freeze_max_age']
+                    row.get('autovacuum_freeze_max_age')
                 part_data['autovacuum_freeze_table_age'] = \
-                    row['autovacuum_freeze_table_age']
-                part_data['toast_autovacuum'] = row['toast_autovacuum']
+                    row.get('autovacuum_freeze_table_age')
+                part_data['toast_autovacuum'] = row.get('toast_autovacuum')
                 part_data['toast_autovacuum_enabled'] = \
-                    row['toast_autovacuum_enabled']
+                    row.get('toast_autovacuum_enabled')
                 part_data['toast_autovacuum_vacuum_threshold'] = \
-                    row['toast_autovacuum_vacuum_threshold']
+                    row.get('toast_autovacuum_vacuum_threshold')
                 part_data['toast_autovacuum_vacuum_scale_factor'] = \
-                    row['toast_autovacuum_vacuum_scale_factor']
+                    row.get('toast_autovacuum_vacuum_scale_factor')
                 part_data['toast_autovacuum_analyze_threshold'] = \
-                    row['toast_autovacuum_analyze_threshold']
+                    row.get('toast_autovacuum_analyze_threshold')
                 part_data['toast_autovacuum_analyze_scale_factor'] = \
-                    row['toast_autovacuum_analyze_scale_factor']
+                    row.get('toast_autovacuum_analyze_scale_factor')
                 part_data['toast_autovacuum_vacuum_cost_delay'] = \
-                    row['toast_autovacuum_vacuum_cost_delay']
+                    row.get('toast_autovacuum_vacuum_cost_delay')
                 part_data['toast_autovacuum_vacuum_cost_limit'] = \
-                    row['toast_autovacuum_vacuum_cost_limit']
+                    row.get('toast_autovacuum_vacuum_cost_limit')
                 part_data['toast_autovacuum_freeze_min_age'] = \
-                    row['toast_autovacuum_freeze_min_age']
+                    row.get('toast_autovacuum_freeze_min_age')
                 part_data['toast_autovacuum_freeze_max_age'] = \
-                    row['toast_autovacuum_freeze_max_age']
+                    row.get('toast_autovacuum_freeze_max_age')
                 part_data['toast_autovacuum_freeze_table_age'] = \
-                    row['toast_autovacuum_freeze_table_age']
+                    row.get('toast_autovacuum_freeze_table_age')
 
                 # We will add Auto vacuum defaults with out result for grid
                 part_data['vacuum_table'] = \
@@ -1817,34 +1817,33 @@ class BaseTableView(PGChildNodeView, BasePartitionTable):
         # x: No set, t: true, f: false
         if res is not None:
             res['autovacuum_enabled'] = 'x' \
-                if res['autovacuum_enabled'] is None else \
+                if res.get('autovacuum_enabled') is None else \
                 {True: 't', False: 'f'}[res['autovacuum_enabled']]
             res['toast_autovacuum_enabled'] = 'x' \
-                if res['toast_autovacuum_enabled'] is None else \
-                {True: 't', False: 'f'}[
-                    res['toast_autovacuum_enabled']]
+                if res.get('toast_autovacuum_enabled') is None else \
+                {True: 't', False: 'f'}[res['toast_autovacuum_enabled']]
             # Enable custom autovaccum only if one of the options is set
             # or autovacuum is set
             res['autovacuum_custom'] = any([
-                res['autovacuum_vacuum_threshold'],
-                res['autovacuum_vacuum_scale_factor'],
-                res['autovacuum_analyze_threshold'],
-                res['autovacuum_analyze_scale_factor'],
-                res['autovacuum_vacuum_cost_delay'],
-                res['autovacuum_vacuum_cost_limit'],
-                res['autovacuum_freeze_min_age'],
-                res['autovacuum_freeze_max_age'],
-                res['autovacuum_freeze_table_age']]) or \
-                res['autovacuum_enabled'] in ('t', 'f')
+                res.get('autovacuum_vacuum_threshold'),
+                res.get('autovacuum_vacuum_scale_factor'),
+                res.get('autovacuum_analyze_threshold'),
+                res.get('autovacuum_analyze_scale_factor'),
+                res.get('autovacuum_vacuum_cost_delay'),
+                res.get('autovacuum_vacuum_cost_limit'),
+                res.get('autovacuum_freeze_min_age'),
+                res.get('autovacuum_freeze_max_age'),
+                res.get('autovacuum_freeze_table_age')]) or \
+                res.get('autovacuum_enabled') in ('t', 'f')
 
             res['toast_autovacuum'] = any([
-                res['toast_autovacuum_vacuum_threshold'],
-                res['toast_autovacuum_vacuum_scale_factor'],
-                res['toast_autovacuum_analyze_threshold'],
-                res['toast_autovacuum_analyze_scale_factor'],
-                res['toast_autovacuum_vacuum_cost_delay'],
-                res['toast_autovacuum_vacuum_cost_limit'],
-                res['toast_autovacuum_freeze_min_age'],
-                res['toast_autovacuum_freeze_max_age'],
-                res['toast_autovacuum_freeze_table_age']]) or \
-                res['toast_autovacuum_enabled'] in ('t', 'f')
+                res.get('toast_autovacuum_vacuum_threshold'),
+                res.get('toast_autovacuum_vacuum_scale_factor'),
+                res.get('toast_autovacuum_analyze_threshold'),
+                res.get('toast_autovacuum_analyze_scale_factor'),
+                res.get('toast_autovacuum_vacuum_cost_delay'),
+                res.get('toast_autovacuum_vacuum_cost_limit'),
+                res.get('toast_autovacuum_freeze_min_age'),
+                res.get('toast_autovacuum_freeze_max_age'),
+                res.get('toast_autovacuum_freeze_table_age')]) or \
+                res.get('toast_autovacuum_enabled') in ('t', 'f')
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/allowed_privs.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/allowed_privs.json
new file mode 100644
index 0000000..0c1784a
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/allowed_privs.json
@@ -0,0 +1,30 @@
+{# List of allowed privileges for PostgreSQL 9.2 or later #}
+{#
+    Format for allowed privileges is:
+    "acl_col": {
+        "type": "name",
+        "acl": [...]
+    }
+#}
+{
+    "nspacl": {
+        "type": "SCHEMA",
+        "acl": ["C", "U"]
+    },
+    "deftblacl": {
+        "type": "TABLE",
+        "acl": ["r", "a", "w", "d", "D", "x", "t"]
+    },
+    "defseqacl": {
+        "type": "SEQUENCE",
+        "acl": ["U", "r", "w"]
+    },
+    "deffuncacl": {
+        "type": "FUNCTION",
+        "acl": ["X"]
+    },
+    "deftypeacl": {
+        "type": "TYPE",
+        "acl": ["U"]
+    }
+}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/acl.sql
new file mode 100644
index 0000000..48dcf1f
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/acl.sql
@@ -0,0 +1,7 @@
+SELECT
+  'nspacl' AS deftype,
+  'PUBLIC' AS grantee,
+  NULL     AS grantor,
+  NULL     AS privileges,
+  NULL     AS grantable
+LIMIT 0;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/create.sql
new file mode 100644
index 0000000..2016209
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/create.sql
@@ -0,0 +1,40 @@
+{% import 'macros/security.macros' as SECLABEL %}
+{% import 'macros/privilege.macros' as PRIVILEGE %}
+{% import 'macros/default_privilege.macros' as DEFAULT_PRIVILEGE %}
+{% if data.name %}
+CREATE SCHEMA {{ conn|qtIdent(data.name) }}{% if data.namespaceowner %}
+
+    AUTHORIZATION {{ conn|qtIdent(data.namespaceowner) }}{% endif %}{% endif %};
+{#  Alter the comment/description #}
+{% if data.description %}
+
+COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
+    IS {{ data.description|qtLiteral }};
+{% endif %}
+{# ACL for the schema #}
+{% if data.nspacl %}
+{% for priv in data.nspacl %}
+
+{{ PRIVILEGE.APPLY(conn, 'SCHEMA', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}{% endfor %}
+{% endif %}
+{# Default privileges on tables #}
+{% for defacl, type in [
+    ('deftblacl', 'TABLES'), ('defseqacl', 'SEQUENCES'),
+    ('deffuncacl', 'FUNCTIONS'), ('deftypeacl', 'TYPES')]
+%}
+{% if data[defacl] %}{% set acl = data[defacl] %}
+{% for priv in acl %}
+
+{{ DEFAULT_PRIVILEGE.SET(
+    conn, 'SCHEMA', data.name, type, priv.grantee,
+    priv.without_grant, priv.with_grant
+    ) }}{% endfor %}
+{% endif %}
+{% endfor %}
+{# Security Labels on schema #}
+{% if data.seclabels and data.seclabels|length > 0 %}
+{% for r in data.seclabels %}
+
+{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
+{% endfor %}
+{% endif %}
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/defacl.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/defacl.sql
new file mode 100644
index 0000000..191e40c
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/defacl.sql
@@ -0,0 +1,7 @@
+SELECT
+    '' AS deftype,
+    '' AS grantee,
+    '' AS grantor,
+    '' AS grantor,
+    '' AS privileges,
+    '' AS grantable
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/delete.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/delete.sql
new file mode 100644
index 0000000..74e9126
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/delete.sql
@@ -0,0 +1 @@
+DROP SCHEMA {{ conn|qtIdent(name) }} {% if cascade %}CASCADE{%endif%};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/get_name.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/get_name.sql
new file mode 100644
index 0000000..3c5187d
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/get_name.sql
@@ -0,0 +1 @@
+SELECT nsp.nspname FROM pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/is_catalog.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/is_catalog.sql
new file mode 100644
index 0000000..9386acb
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/is_catalog.sql
@@ -0,0 +1,9 @@
+{% import 'catalog/pg/macros/catalogs.sql' as CATALOGS %}
+SELECT
+    nsp.nspname as schema_name,
+    {{ CATALOGS.LIST('nsp') }} AS is_catalog,
+    {{ CATALOGS.DB_SUPPORT('nsp') }} AS db_support
+FROM
+    pg_catalog.pg_namespace nsp
+WHERE
+    nsp.oid = {{ scid|qtLiteral }}::OID;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/nodes.sql
new file mode 100644
index 0000000..d1a19d1
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/nodes.sql
@@ -0,0 +1,20 @@
+{% import 'catalog/pg/macros/catalogs.sql' as CATALOGS %}
+SELECT
+    nsp.oid,
+    nsp.nspname as name,
+    has_schema_privilege(nsp.oid, 'CREATE') as can_create,
+    has_schema_privilege(nsp.oid, 'USAGE') as has_usage
+FROM
+    pg_namespace nsp
+WHERE
+    {% if scid %}
+    nsp.oid={{scid}}::oid AND
+    {% else %}
+    {% if not show_sysobj %}
+    nspname NOT LIKE 'pg\_%' AND
+    {% endif %}
+    {% endif %}
+    NOT (
+{{ CATALOGS.LIST('nsp') }}
+    )
+ORDER BY nspname;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/oid.sql
new file mode 100644
index 0000000..c5329b3
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/oid.sql
@@ -0,0 +1 @@
+SELECT nsp.oid FROM pg_namespace nsp WHERE nsp.nspname = {{ schema|qtLiteral }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/properties.sql
new file mode 100644
index 0000000..f6c2d92
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/properties.sql
@@ -0,0 +1,39 @@
+{% import 'catalog/pg/macros/catalogs.sql' as CATALOGS %}
+SELECT
+    CASE
+    WHEN (nspname LIKE E'pg\\_temp\\_%') THEN 1
+    WHEN (nspname LIKE E'pg\\_%') THEN 0
+    ELSE 3 END AS nsptyp,
+    nsp.nspname AS name,
+    nsp.oid,
+    array_to_string(nsp.nspacl::text[], ', ') as acl,
+    r.rolname AS namespaceowner, description,
+    has_schema_privilege(nsp.oid, 'CREATE') AS can_create,
+    CASE
+    WHEN nspname LIKE E'pg\\_%' THEN true
+    ELSE false END AS is_sys_object,
+    {### Default ACL for Tables ###}
+    '' AS tblacl,
+    {### Default ACL for Sequnces ###}
+    '' AS seqacl,
+    {### Default ACL for Functions ###}
+    '' AS funcacl,
+    {### Default ACL for Type ###}
+    '' AS typeacl
+FROM
+    pg_namespace nsp
+    LEFT OUTER JOIN pg_description des ON
+        (des.objoid=nsp.oid AND des.classoid='pg_namespace'::regclass)
+    LEFT JOIN pg_roles r ON (r.oid = nsp.nspowner)
+WHERE
+    {% if scid %}
+    nsp.oid={{scid}}::oid AND
+    {% else %}
+    {% if not show_sysobj %}
+    nspname NOT LIKE E'pg\\_%' AND
+    {% endif %}
+    {% endif %}
+    NOT (
+{{ CATALOGS.LIST('nsp') }}
+    )
+ORDER BY 1, nspname;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/update.sql
new file mode 100644
index 0000000..47f6e13
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb/5_plus/sql/update.sql
@@ -0,0 +1,83 @@
+{% import 'macros/security.macros' as SECLABEL %}
+{% import 'macros/privilege.macros' as PRIVILEGE %}
+{% import 'macros/default_privilege.macros' as DEFAULT_PRIVILEGE %}
+{# Rename the schema #}
+{% if data.name and data.name != o_data.name %}
+ALTER SCHEMA {{ conn|qtIdent(o_data.name) }}
+    RENAME TO {{ conn|qtIdent(data.name) }};
+
+{% endif %}
+{# Change the owner #}
+{% if data.namespaceowner and data.namespaceowner != o_data.namespaceowner %}
+ALTER SCHEMA {{ conn|qtIdent(data.name) }}
+    OWNER TO {{ conn|qtIdent(data.namespaceowner) }};
+
+{% endif %}
+{# Update the comments/description #}
+{% if data.description is defined and data.description != o_data.description %}
+COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
+    IS {{ data.description|qtLiteral }};
+
+{% endif %}
+{# Change the privileges #}
+{% if data.nspacl %}
+{% if 'deleted' in data.nspacl %}
+{% for priv in data.nspacl.deleted %}
+{{ PRIVILEGE.RESETALL(conn, 'SCHEMA', priv.grantee, data.name) }}
+{% endfor %}
+{% endif %}
+{% if 'changed' in data.nspacl %}
+{% for priv in data.nspacl.changed %}
+{{ PRIVILEGE.RESETALL(conn, 'SCHEMA', priv.grantee, data.name) }}
+{{ PRIVILEGE.APPLY(conn, 'SCHEMA', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}
+{% endfor %}
+{% endif %}
+{% if 'added' in data.nspacl %}
+{% for priv in data.nspacl.added %}
+{{ PRIVILEGE.APPLY(conn, 'SCHEMA', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}
+{% endfor %}
+{% endif %}
+{% endif %}
+{# Change the default privileges #}
+{% for defacl, type in [
+    ('deftblacl', 'TABLES'), ('defseqacl', 'SEQUENCES'),
+    ('deffuncacl', 'FUNCTIONS'), ('deftypeacl', 'TYPES')]
+%}
+{% if data[defacl] %}{% set acl = data[defacl] %}
+{% if 'deleted' in acl %}
+{% for priv in acl.deleted %}
+{{ DEFAULT_PRIVILEGE.UNSET(conn, 'SCHEMA', data.name, type, priv.grantee) }}
+{% endfor %}
+{% endif %}
+{% if 'changed' in acl %}
+{% for priv in acl.changed %}
+{{ DEFAULT_PRIVILEGE.UNSET(conn, 'SCHEMA', data.name, type, priv.grantee) }}
+{{ DEFAULT_PRIVILEGE.SET(conn,'SCHEMA', data.name, type, priv.grantee, priv.without_grant, priv.with_grant) }}
+{% endfor %}
+{% endif %}
+{% if 'added' in acl %}
+{% for priv in acl.added %}
+{{ DEFAULT_PRIVILEGE.SET(conn,'SCHEMA', data.name, type, priv.grantee, priv.without_grant, priv.with_grant) }}
+{% endfor %}
+{% endif %}
+{% endif %}
+{% endfor %}
+{# Change the security labels #}
+{% if data.seclabels and data.seclabels|length > 0 %}
+{% set seclabels = data.seclabels %}
+{% if 'deleted' in seclabels and seclabels.deleted|length > 0 %}
+{% for r in seclabels.deleted %}
+{{ SECLABEL.DROP(conn, 'SCHEMA', data.name, r.provider) }}
+{% endfor %}
+{% endif %}
+{% if 'added' in seclabels and seclabels.added|length > 0 %}
+{% for r in seclabels.added %}
+{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
+{% endfor %}
+{% endif %}
+{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
+{% for r in seclabels.changed %}
+{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
+{% endfor %}
+{% endif %}
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/allowed_privs.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/allowed_privs.json
deleted file mode 100644
index 0c1784a..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/allowed_privs.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{# List of allowed privileges for PostgreSQL 9.2 or later #}
-{#
-    Format for allowed privileges is:
-    "acl_col": {
-        "type": "name",
-        "acl": [...]
-    }
-#}
-{
-    "nspacl": {
-        "type": "SCHEMA",
-        "acl": ["C", "U"]
-    },
-    "deftblacl": {
-        "type": "TABLE",
-        "acl": ["r", "a", "w", "d", "D", "x", "t"]
-    },
-    "defseqacl": {
-        "type": "SEQUENCE",
-        "acl": ["U", "r", "w"]
-    },
-    "deffuncacl": {
-        "type": "FUNCTION",
-        "acl": ["X"]
-    },
-    "deftypeacl": {
-        "type": "TYPE",
-        "acl": ["U"]
-    }
-}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/acl.sql
deleted file mode 100644
index 48dcf1f..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/acl.sql
+++ /dev/null
@@ -1,7 +0,0 @@
-SELECT
-  'nspacl' AS deftype,
-  'PUBLIC' AS grantee,
-  NULL     AS grantor,
-  NULL     AS privileges,
-  NULL     AS grantable
-LIMIT 0;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/create.sql
deleted file mode 100644
index 2016209..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/create.sql
+++ /dev/null
@@ -1,40 +0,0 @@
-{% import 'macros/security.macros' as SECLABEL %}
-{% import 'macros/privilege.macros' as PRIVILEGE %}
-{% import 'macros/default_privilege.macros' as DEFAULT_PRIVILEGE %}
-{% if data.name %}
-CREATE SCHEMA {{ conn|qtIdent(data.name) }}{% if data.namespaceowner %}
-
-    AUTHORIZATION {{ conn|qtIdent(data.namespaceowner) }}{% endif %}{% endif %};
-{#  Alter the comment/description #}
-{% if data.description %}
-
-COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
-    IS {{ data.description|qtLiteral }};
-{% endif %}
-{# ACL for the schema #}
-{% if data.nspacl %}
-{% for priv in data.nspacl %}
-
-{{ PRIVILEGE.APPLY(conn, 'SCHEMA', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}{% endfor %}
-{% endif %}
-{# Default privileges on tables #}
-{% for defacl, type in [
-    ('deftblacl', 'TABLES'), ('defseqacl', 'SEQUENCES'),
-    ('deffuncacl', 'FUNCTIONS'), ('deftypeacl', 'TYPES')]
-%}
-{% if data[defacl] %}{% set acl = data[defacl] %}
-{% for priv in acl %}
-
-{{ DEFAULT_PRIVILEGE.SET(
-    conn, 'SCHEMA', data.name, type, priv.grantee,
-    priv.without_grant, priv.with_grant
-    ) }}{% endfor %}
-{% endif %}
-{% endfor %}
-{# Security Labels on schema #}
-{% if data.seclabels and data.seclabels|length > 0 %}
-{% for r in data.seclabels %}
-
-{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
-{% endfor %}
-{% endif %}
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/defacl.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/defacl.sql
deleted file mode 100644
index 191e40c..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/defacl.sql
+++ /dev/null
@@ -1,7 +0,0 @@
-SELECT
-    '' AS deftype,
-    '' AS grantee,
-    '' AS grantor,
-    '' AS grantor,
-    '' AS privileges,
-    '' AS grantable
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/delete.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/delete.sql
deleted file mode 100644
index 74e9126..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/delete.sql
+++ /dev/null
@@ -1 +0,0 @@
-DROP SCHEMA {{ conn|qtIdent(name) }} {% if cascade %}CASCADE{%endif%};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/get_name.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/get_name.sql
deleted file mode 100644
index 3c5187d..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/get_name.sql
+++ /dev/null
@@ -1 +0,0 @@
-SELECT nsp.nspname FROM pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/is_catalog.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/is_catalog.sql
deleted file mode 100644
index 9386acb..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/is_catalog.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-{% import 'catalog/pg/macros/catalogs.sql' as CATALOGS %}
-SELECT
-    nsp.nspname as schema_name,
-    {{ CATALOGS.LIST('nsp') }} AS is_catalog,
-    {{ CATALOGS.DB_SUPPORT('nsp') }} AS db_support
-FROM
-    pg_catalog.pg_namespace nsp
-WHERE
-    nsp.oid = {{ scid|qtLiteral }}::OID;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/nodes.sql
deleted file mode 100644
index d1a19d1..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/nodes.sql
+++ /dev/null
@@ -1,20 +0,0 @@
-{% import 'catalog/pg/macros/catalogs.sql' as CATALOGS %}
-SELECT
-    nsp.oid,
-    nsp.nspname as name,
-    has_schema_privilege(nsp.oid, 'CREATE') as can_create,
-    has_schema_privilege(nsp.oid, 'USAGE') as has_usage
-FROM
-    pg_namespace nsp
-WHERE
-    {% if scid %}
-    nsp.oid={{scid}}::oid AND
-    {% else %}
-    {% if not show_sysobj %}
-    nspname NOT LIKE 'pg\_%' AND
-    {% endif %}
-    {% endif %}
-    NOT (
-{{ CATALOGS.LIST('nsp') }}
-    )
-ORDER BY nspname;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/oid.sql
deleted file mode 100644
index c5329b3..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/oid.sql
+++ /dev/null
@@ -1 +0,0 @@
-SELECT nsp.oid FROM pg_namespace nsp WHERE nsp.nspname = {{ schema|qtLiteral }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/properties.sql
deleted file mode 100644
index f6c2d92..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/properties.sql
+++ /dev/null
@@ -1,39 +0,0 @@
-{% import 'catalog/pg/macros/catalogs.sql' as CATALOGS %}
-SELECT
-    CASE
-    WHEN (nspname LIKE E'pg\\_temp\\_%') THEN 1
-    WHEN (nspname LIKE E'pg\\_%') THEN 0
-    ELSE 3 END AS nsptyp,
-    nsp.nspname AS name,
-    nsp.oid,
-    array_to_string(nsp.nspacl::text[], ', ') as acl,
-    r.rolname AS namespaceowner, description,
-    has_schema_privilege(nsp.oid, 'CREATE') AS can_create,
-    CASE
-    WHEN nspname LIKE E'pg\\_%' THEN true
-    ELSE false END AS is_sys_object,
-    {### Default ACL for Tables ###}
-    '' AS tblacl,
-    {### Default ACL for Sequnces ###}
-    '' AS seqacl,
-    {### Default ACL for Functions ###}
-    '' AS funcacl,
-    {### Default ACL for Type ###}
-    '' AS typeacl
-FROM
-    pg_namespace nsp
-    LEFT OUTER JOIN pg_description des ON
-        (des.objoid=nsp.oid AND des.classoid='pg_namespace'::regclass)
-    LEFT JOIN pg_roles r ON (r.oid = nsp.nspowner)
-WHERE
-    {% if scid %}
-    nsp.oid={{scid}}::oid AND
-    {% else %}
-    {% if not show_sysobj %}
-    nspname NOT LIKE E'pg\\_%' AND
-    {% endif %}
-    {% endif %}
-    NOT (
-{{ CATALOGS.LIST('nsp') }}
-    )
-ORDER BY 1, nspname;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/update.sql
deleted file mode 100644
index 47f6e13..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/gpdb_5.0_plus/sql/update.sql
+++ /dev/null
@@ -1,83 +0,0 @@
-{% import 'macros/security.macros' as SECLABEL %}
-{% import 'macros/privilege.macros' as PRIVILEGE %}
-{% import 'macros/default_privilege.macros' as DEFAULT_PRIVILEGE %}
-{# Rename the schema #}
-{% if data.name and data.name != o_data.name %}
-ALTER SCHEMA {{ conn|qtIdent(o_data.name) }}
-    RENAME TO {{ conn|qtIdent(data.name) }};
-
-{% endif %}
-{# Change the owner #}
-{% if data.namespaceowner and data.namespaceowner != o_data.namespaceowner %}
-ALTER SCHEMA {{ conn|qtIdent(data.name) }}
-    OWNER TO {{ conn|qtIdent(data.namespaceowner) }};
-
-{% endif %}
-{# Update the comments/description #}
-{% if data.description is defined and data.description != o_data.description %}
-COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
-    IS {{ data.description|qtLiteral }};
-
-{% endif %}
-{# Change the privileges #}
-{% if data.nspacl %}
-{% if 'deleted' in data.nspacl %}
-{% for priv in data.nspacl.deleted %}
-{{ PRIVILEGE.RESETALL(conn, 'SCHEMA', priv.grantee, data.name) }}
-{% endfor %}
-{% endif %}
-{% if 'changed' in data.nspacl %}
-{% for priv in data.nspacl.changed %}
-{{ PRIVILEGE.RESETALL(conn, 'SCHEMA', priv.grantee, data.name) }}
-{{ PRIVILEGE.APPLY(conn, 'SCHEMA', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}
-{% endfor %}
-{% endif %}
-{% if 'added' in data.nspacl %}
-{% for priv in data.nspacl.added %}
-{{ PRIVILEGE.APPLY(conn, 'SCHEMA', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}
-{% endfor %}
-{% endif %}
-{% endif %}
-{# Change the default privileges #}
-{% for defacl, type in [
-    ('deftblacl', 'TABLES'), ('defseqacl', 'SEQUENCES'),
-    ('deffuncacl', 'FUNCTIONS'), ('deftypeacl', 'TYPES')]
-%}
-{% if data[defacl] %}{% set acl = data[defacl] %}
-{% if 'deleted' in acl %}
-{% for priv in acl.deleted %}
-{{ DEFAULT_PRIVILEGE.UNSET(conn, 'SCHEMA', data.name, type, priv.grantee) }}
-{% endfor %}
-{% endif %}
-{% if 'changed' in acl %}
-{% for priv in acl.changed %}
-{{ DEFAULT_PRIVILEGE.UNSET(conn, 'SCHEMA', data.name, type, priv.grantee) }}
-{{ DEFAULT_PRIVILEGE.SET(conn,'SCHEMA', data.name, type, priv.grantee, priv.without_grant, priv.with_grant) }}
-{% endfor %}
-{% endif %}
-{% if 'added' in acl %}
-{% for priv in acl.added %}
-{{ DEFAULT_PRIVILEGE.SET(conn,'SCHEMA', data.name, type, priv.grantee, priv.without_grant, priv.with_grant) }}
-{% endfor %}
-{% endif %}
-{% endif %}
-{% endfor %}
-{# Change the security labels #}
-{% if data.seclabels and data.seclabels|length > 0 %}
-{% set seclabels = data.seclabels %}
-{% if 'deleted' in seclabels and seclabels.deleted|length > 0 %}
-{% for r in seclabels.deleted %}
-{{ SECLABEL.DROP(conn, 'SCHEMA', data.name, r.provider) }}
-{% endfor %}
-{% endif %}
-{% if 'added' in seclabels and seclabels.added|length > 0 %}
-{% for r in seclabels.added %}
-{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
-{% endfor %}
-{% endif %}
-{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
-{% for r in seclabels.changed %}
-{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
-{% endfor %}
-{% endif %}
-{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/templates/depends/gpdb/5_plus/dependencies.sql b/web/pgadmin/browser/server_groups/servers/templates/depends/gpdb/5_plus/dependencies.sql
index 81bb2a6..8a816ca 100644
--- a/web/pgadmin/browser/server_groups/servers/templates/depends/gpdb/5_plus/dependencies.sql
+++ b/web/pgadmin/browser/server_groups/servers/templates/depends/gpdb/5_plus/dependencies.sql
@@ -1,32 +1,23 @@
-SELECT DISTINCT dep.deptype, dep.refclassid, dep.refobjid, cl.relkind, ad.adbin, ad.adsrc,
-    CASE WHEN cl.relkind IS NOT NULL THEN CASE WHEN cl.relkind = 'r' THEN cl.relkind || COALESCE(dep.refobjsubid::text, '') ELSE cl.relkind END
-        WHEN tg.oid IS NOT NULL THEN 'Tr'::text
-        WHEN ty.oid IS NOT NULL THEN CASE WHEN ty.typtype = 'd' THEN 'd'::text ELSE 'Ty'::text END
+SET LOCAL join_collapse_limit=8;
+SELECT DISTINCT dep.deptype, dep.refclassid, cl.relkind, ad.adbin, ad.adsrc,
+    CASE WHEN cl.relkind IS NOT NULL THEN cl.relkind || COALESCE(dep.refobjsubid::character varying, '')
+        WHEN tg.oid IS NOT NULL THEN 'T'::text
+        WHEN ty.oid IS NOT NULL AND ty.typbasetype = 0 THEN 'y'::text
+        WHEN ty.oid IS NOT NULL AND ty.typbasetype != 0 THEN 'd'::text
         WHEN ns.oid IS NOT NULL THEN 'n'::text
-        WHEN pr.oid IS NOT NULL AND (prtyp.typname = 'trigger' OR prtyp.typname = 'event_trigger') THEN 'Pt'::text
-        WHEN pr.oid IS NOT NULL THEN 'Pf'::text
+        WHEN pr.oid IS NOT NULL AND prtyp.typname = 'trigger' THEN 't'::text
+        WHEN pr.oid IS NOT NULL THEN 'P'::text
         WHEN la.oid IS NOT NULL THEN 'l'::text
-        WHEN rw.oid IS NOT NULL THEN 'Rl'::text
-        WHEN co.oid IS NOT NULL THEN CASE WHEN co.contypid > 0 THEN 'Cd' ELSE 'C'::text || contype END
+        WHEN rw.oid IS NOT NULL THEN 'R'::text
+        WHEN co.oid IS NOT NULL THEN 'C'::text || contype
         WHEN ad.oid IS NOT NULL THEN 'A'::text
-        WHEN fs.oid IS NOT NULL THEN 'Fs'::text
-        WHEN fdw.oid IS NOT NULL THEN 'Fw'::text
-        WHEN col.oid IS NOT NULL THEN 'Co'::text
-        WHEN ftsc.oid IS NOT NULL THEN 'Fc'::text
-        WHEN ftsp.oid IS NOT NULL THEN 'Fp'::text
-        WHEN ftsd.oid IS NOT NULL THEN 'Fd'::text
-        WHEN ftst.oid IS NOT NULL THEN 'Ft'::text
-        WHEN ext.oid IS NOT NULL THEN 'Ex'::text
     ELSE ''
     END AS type,
     COALESCE(coc.relname, clrw.relname) AS ownertable,
     CASE WHEN cl.relname IS NOT NULL OR att.attname IS NOT NULL THEN cl.relname || COALESCE('.' || att.attname, '')
-    ELSE COALESCE(cl.relname, co.conname, pr.proname, tg.tgname, ty.typname, la.lanname, rw.rulename, ns.nspname,
-                  fs.srvname, fdw.fdwname, col.collname, ftsc.cfgname, ftsd.dictname, ftsp.prsname,
-                  ftst.tmplname, ext.extname)
+    ELSE COALESCE(cl.relname, co.conname, pr.proname, tg.tgname, ty.typname, la.lanname, rw.rulename, ns.nspname)
     END AS refname,
-    COALESCE(nsc.nspname, nso.nspname, nsp.nspname, nst.nspname, nsrw.nspname, colns.nspname, ftscns.nspname,
-        ftsdns.nspname, ftspns.nspname, ftstns.nspname) AS nspname,
+    COALESCE(nsc.nspname, nso.nspname, nsp.nspname, nst.nspname, nsrw.nspname) AS nspname,
     CASE WHEN inhits.inhparent IS NOT NULL THEN '1' ELSE '0' END AS is_inherits,
     CASE WHEN inhed.inhparent IS NOT NULL THEN '1' ELSE '0' END AS is_inherited
 FROM pg_depend dep
@@ -47,39 +38,11 @@ LEFT JOIN pg_namespace nsrw ON clrw.relnamespace=nsrw.oid
 LEFT JOIN pg_language la ON dep.refobjid=la.oid
 LEFT JOIN pg_namespace ns ON dep.refobjid=ns.oid
 LEFT JOIN pg_attrdef ad ON ad.adrelid=att.attrelid AND ad.adnum=att.attnum
-LEFT JOIN pg_foreign_server fs ON fs.oid=dep.refobjid
-LEFT JOIN pg_foreign_data_wrapper fdw ON fdw.oid=dep.refobjid
 LEFT JOIN pg_type prtyp ON prtyp.oid = pr.prorettype
 LEFT JOIN pg_inherits inhits ON (inhits.inhrelid=dep.refobjid)
 LEFT JOIN pg_inherits inhed ON (inhed.inhparent=dep.refobjid)
-LEFT JOIN pg_collation col ON col.oid=dep.refobjid
-LEFT JOIN pg_namespace colns ON col.collnamespace=colns.oid
-LEFT JOIN pg_ts_config ftsc ON ftsc.oid=dep.refobjid
-LEFT JOIN pg_namespace ftscns ON ftsc.cfgnamespace=ftscns.oid
-LEFT JOIN pg_ts_dict ftsd ON ftsd.oid=dep.refobjid
-LEFT JOIN pg_namespace ftsdns ON ftsd.dictnamespace=ftsdns.oid
-LEFT JOIN pg_ts_parser ftsp ON ftsp.oid=dep.refobjid
-LEFT JOIN pg_namespace ftspns ON ftsp.prsnamespace=ftspns.oid
-LEFT JOIN pg_ts_template ftst ON ftst.oid=dep.refobjid
-LEFT JOIN pg_namespace ftstns ON ftst.tmplnamespace=ftstns.oid
-LEFT JOIN pg_extension ext ON ext.oid=dep.refobjid
 {{where_clause}} AND
 refclassid IN ( SELECT oid FROM pg_class WHERE relname IN
    ('pg_class', 'pg_constraint', 'pg_conversion', 'pg_language', 'pg_proc', 'pg_rewrite', 'pg_namespace',
-   'pg_trigger', 'pg_type', 'pg_attrdef', 'pg_foreign_server', 'pg_foreign_data_wrapper',
-   'pg_collation', 'pg_ts_config', 'pg_ts_dict', 'pg_ts_parser', 'pg_ts_template', 'pg_extension'))
-UNION
-SELECT DISTINCT dep.deptype, dep.refclassid, dep.refobjid, cl.relkind, ad.adbin, ad.adsrc,
-    CASE WHEN cl.relkind IS NOT NULL THEN CASE WHEN cl.relkind = 'r' THEN cl.relkind || COALESCE(dep.refobjsubid::text, '') ELSE cl.relkind END
-    ELSE '' END AS type,
-	NULL AS ownertable,
-	CASE WHEN cl.relname IS NOT NULL OR att.attname IS NOT NULL THEN cl.relname || COALESCE('.' || att.attname, '')
-    ELSE cl.relname END AS refname,
-    nsc.nspname AS nspname, '0' AS is_inherits, '0' AS is_inherited
-FROM pg_depend dep
-LEFT JOIN pg_class cl ON dep.refobjid=cl.oid
-LEFT JOIN pg_attribute att ON dep.refobjid=att.attrelid AND dep.refobjsubid=att.attnum
-LEFT JOIN pg_namespace nsc ON cl.relnamespace=nsc.oid
-LEFT JOIN pg_attrdef ad ON ad.adrelid=att.attrelid AND ad.adnum=att.attnum
-WHERE dep.objid IN (SELECT oid FROM pg_rewrite WHERE ev_class={{object_id}}) AND cl.relkind not in ('v', 'm')
-ORDER BY refclassid, relkind
+   'pg_trigger', 'pg_type', 'pg_attrdef', 'pg_event_trigger', 'pg_foreign_server', 'pg_foreign_data_wrapper'))
+ORDER BY refclassid, cl.relkind
diff --git a/web/pgadmin/browser/server_groups/servers/templates/depends/gpdb/5_plus/dependents.sql b/web/pgadmin/browser/server_groups/servers/templates/depends/gpdb/5_plus/dependents.sql
index 71b0a1e..f8a1bee 100644
--- a/web/pgadmin/browser/server_groups/servers/templates/depends/gpdb/5_plus/dependents.sql
+++ b/web/pgadmin/browser/server_groups/servers/templates/depends/gpdb/5_plus/dependents.sql
@@ -1,32 +1,22 @@
+SET LOCAL join_collapse_limit=8;
 SELECT DISTINCT dep.deptype, dep.classid, cl.relkind, ad.adbin, ad.adsrc,
-    CASE WHEN cl.relkind IS NOT NULL THEN CASE WHEN cl.relkind = 'r' THEN cl.relkind || COALESCE(dep.objsubid::text, '') ELSE cl.relkind END
-        WHEN tg.oid IS NOT NULL THEN 'Tr'::text
-        WHEN ty.oid IS NOT NULL THEN CASE WHEN ty.typtype = 'd' THEN 'd'::text ELSE 'Ty'::text END
+    CASE WHEN cl.relkind IS NOT NULL THEN cl.relkind || COALESCE(dep.objsubid::text, '')
+        WHEN tg.oid IS NOT NULL THEN 'T'::text
+        WHEN ty.oid IS NOT NULL THEN 'y'::text
         WHEN ns.oid IS NOT NULL THEN 'n'::text
-        WHEN pr.oid IS NOT NULL AND (prtyp.typname = 'trigger' OR prtyp.typname = 'event_trigger') THEN 'Pt'::text
-        WHEN pr.oid IS NOT NULL THEN 'Pf'::text
+        WHEN pr.oid IS NOT NULL AND prtyp.typname = 'trigger' THEN 't'::text
+        WHEN pr.oid IS NOT NULL THEN 'P'::text
         WHEN la.oid IS NOT NULL THEN 'l'::text
-        WHEN rw.oid IS NOT NULL THEN 'Rl'::text
-        WHEN co.oid IS NOT NULL THEN CASE WHEN co.contypid > 0 THEN 'Cd' ELSE 'C'::text || contype END
+        WHEN rw.oid IS NOT NULL THEN 'R'::text
+        WHEN co.oid IS NOT NULL THEN 'C'::text || contype
         WHEN ad.oid IS NOT NULL THEN 'A'::text
-        WHEN fs.oid IS NOT NULL THEN 'Fs'::text
-        WHEN fdw.oid IS NOT NULL THEN 'Fw'::text
-        WHEN col.oid IS NOT NULL THEN 'Co'::text
-        WHEN ftsc.oid IS NOT NULL THEN 'Fc'::text
-        WHEN ftsp.oid IS NOT NULL THEN 'Fp'::text
-        WHEN ftsd.oid IS NOT NULL THEN 'Fd'::text
-        WHEN ftst.oid IS NOT NULL THEN 'Ft'::text
-        WHEN ext.oid IS NOT NULL THEN 'Ex'::text
-    ELSE ''
+        ELSE ''
     END AS type,
     COALESCE(coc.relname, clrw.relname) AS ownertable,
     CASE WHEN cl.relname IS NOT NULL AND att.attname IS NOT NULL THEN cl.relname || COALESCE('.' || att.attname, '')
-    ELSE COALESCE(cl.relname, co.conname, pr.proname, tg.tgname, ty.typname, la.lanname, rw.rulename, ns.nspname,
-                  fs.srvname, fdw.fdwname, col.collname, ftsc.cfgname, ftsd.dictname, ftsp.prsname,
-                  ftst.tmplname, ext.extname)
+    ELSE COALESCE(cl.relname, co.conname, pr.proname, tg.tgname, ty.typname, la.lanname, rw.rulename, ns.nspname)
     END AS refname,
-    COALESCE(nsc.nspname, nso.nspname, nsp.nspname, nst.nspname, nsrw.nspname, colns.nspname, ftscns.nspname,
-        ftsdns.nspname, ftspns.nspname, ftstns.nspname) AS nspname,
+    COALESCE(nsc.nspname, nso.nspname, nsp.nspname, nst.nspname, nsrw.nspname) AS nspname,
     CASE WHEN inhits.inhparent IS NOT NULL THEN '1' ELSE '0' END AS is_inherits,
     CASE WHEN inhed.inhparent IS NOT NULL THEN '1' ELSE '0' END AS is_inherited
 FROM pg_depend dep
@@ -47,25 +37,11 @@ LEFT JOIN pg_namespace nsrw ON clrw.relnamespace=nsrw.oid
 LEFT JOIN pg_language la ON dep.objid=la.oid
 LEFT JOIN pg_namespace ns ON dep.objid=ns.oid
 LEFT JOIN pg_attrdef ad ON ad.oid=dep.objid
-LEFT JOIN pg_foreign_server fs ON fs.oid=dep.objid
-LEFT JOIN pg_foreign_data_wrapper fdw ON fdw.oid=dep.objid
 LEFT JOIN pg_type prtyp ON prtyp.oid = pr.prorettype
 LEFT JOIN pg_inherits inhits ON (inhits.inhrelid=dep.objid)
 LEFT JOIN pg_inherits inhed ON (inhed.inhparent=dep.objid)
-LEFT JOIN pg_collation col ON col.oid=dep.objid
-LEFT JOIN pg_namespace colns ON col.collnamespace=colns.oid
-LEFT JOIN pg_ts_config ftsc ON ftsc.oid=dep.objid
-LEFT JOIN pg_namespace ftscns ON ftsc.cfgnamespace=ftscns.oid
-LEFT JOIN pg_ts_dict ftsd ON ftsd.oid=dep.objid
-LEFT JOIN pg_namespace ftsdns ON ftsd.dictnamespace=ftsdns.oid
-LEFT JOIN pg_ts_parser ftsp ON ftsp.oid=dep.objid
-LEFT JOIN pg_namespace ftspns ON ftsp.prsnamespace=ftspns.oid
-LEFT JOIN pg_ts_template ftst ON ftst.oid=dep.objid
-LEFT JOIN pg_namespace ftstns ON ftst.tmplnamespace=ftstns.oid
-LEFT JOIN pg_extension ext ON ext.oid=dep.objid
 {{where_clause}} AND
 classid IN ( SELECT oid FROM pg_class WHERE relname IN
    ('pg_class', 'pg_constraint', 'pg_conversion', 'pg_language', 'pg_proc', 'pg_rewrite', 'pg_namespace',
-   'pg_trigger', 'pg_type', 'pg_attrdef', 'pg_foreign_server', 'pg_foreign_data_wrapper',
-   'pg_collation', 'pg_ts_config', 'pg_ts_dict', 'pg_ts_parser', 'pg_ts_template', 'pg_extension'))
-ORDER BY classid, cl.relkind
+   'pg_trigger', 'pg_type', 'pg_attrdef', 'pg_event_trigger', 'pg_foreign_server', 'pg_foreign_data_wrapper'))
+ORDER BY classid, cl.relkind;
diff --git a/web/pgadmin/browser/utils.py b/web/pgadmin/browser/utils.py
index 91a7119..a570743 100644
--- a/web/pgadmin/browser/utils.py
+++ b/web/pgadmin/browser/utils.py
@@ -12,15 +12,15 @@
 from abc import abstractmethod
 
 import flask
-from flask import render_template, current_app
-from flask.views import View, MethodViewType, with_metaclass
+from flask import current_app, render_template
+from flask.views import MethodViewType, View, with_metaclass
 from flask_babelex import gettext
 
 from config import PG_DEFAULT_DRIVER
-from pgadmin.utils.ajax import make_json_response, precondition_required,\
-    internal_server_error
-from pgadmin.utils.exception import ConnectionLost, SSHTunnelConnectionLost,\
-    CryptKeyMissing
+from pgadmin.utils.ajax import (internal_server_error, make_json_response,
+                                precondition_required)
+from pgadmin.utils.exception import (ConnectionLost, CryptKeyMissing,
+                                     SSHTunnelConnectionLost)
 
 
 def underscore_escape(text):
@@ -471,9 +471,12 @@ class PGChildNodeView(NodeView):
         """
 
         # Set the sql_path
-        sql_path = 'depends/{0}/#{1}#'.format(
-            conn.manager.server_type, conn.manager.version)
-
+        sql_path = 'depends/' + (
+            "{0}/#{0}#{1}#".format(conn.manager.server_type, conn.manager.version) if
+            conn.manager.server_type == 'gpdb' else
+            "{0}/#{1}#".format(conn.manager.server_type, conn.manager.version)
+        )
+        
         if where is None:
             where_clause = "WHERE dep.objid={0}::oid".format(object_id)
         else:
@@ -527,8 +530,11 @@ class PGChildNodeView(NodeView):
         Returns: Dictionary of dependents for the selected node.
         """
         # Set the sql_path
-        sql_path = 'depends/{0}/#{1}#'.format(
-            conn.manager.server_type, conn.manager.version)
+        sql_path = 'depends/' + (
+            "{0}/#{0}#{1}#".format(conn.manager.server_type, conn.manager.version) if
+            conn.manager.server_type == 'gpdb' else
+            "{0}/#{1}#".format(conn.manager.server_type, conn.manager.version)
+        )
 
         if where is None:
             where_clause = "WHERE dep.refobjid={0}::oid".format(object_id)
diff --git a/web/pgadmin/dashboard/templates/dashboard/sql/gpdb_6.0_plus/activity.sql b/web/pgadmin/dashboard/templates/dashboard/sql/gpdb_6.0_plus/activity.sql
new file mode 100644
index 0000000..f8a255e
--- /dev/null
+++ b/web/pgadmin/dashboard/templates/dashboard/sql/gpdb_6.0_plus/activity.sql
@@ -0,0 +1,19 @@
+/*pga4dash*/
+SELECT
+    pid,
+    datname,
+    usename,
+    application_name,
+    client_addr,
+    to_char(backend_start, 'YYYY-MM-DD HH24:MI:SS TZ') AS backend_start,
+    state,
+    CASE WHEN waiting THEN '{{ _('yes') }}' ELSE '{{ _('no') }}' END AS waiting,
+    waiting_reason AS wait_event,
+    query,
+    to_char(state_change, 'YYYY-MM-DD HH24:MI:SS TZ') AS state_change,
+    to_char(query_start, 'YYYY-MM-DD HH24:MI:SS TZ') AS query_start
+FROM
+    pg_stat_activity
+{% if did %}WHERE
+    datid = {{ did }} {% endif %}
+ORDER BY pid
\ No newline at end of file
diff --git a/web/pgadmin/dashboard/templates/dashboard/sql/gpdb_6.0_plus/dashboard_stats.sql b/web/pgadmin/dashboard/templates/dashboard/sql/gpdb_6.0_plus/dashboard_stats.sql
new file mode 100644
index 0000000..e0c4079
--- /dev/null
+++ b/web/pgadmin/dashboard/templates/dashboard/sql/gpdb_6.0_plus/dashboard_stats.sql
@@ -0,0 +1,57 @@
+/*pga4dash*/
+{% set add_union = false %}
+{% if 'session_stats' in chart_names %}
+{% set add_union = true %}
+SELECT 'session_stats' AS chart_name, row_to_json(t) AS chart_data
+FROM (SELECT
+   (SELECT count(*) FROM pg_stat_activity{% if did %} WHERE datid = {{ did }} {% endif %}) AS "{{ _('Total') }}",
+   (SELECT count(*) FROM pg_stat_activity WHERE state = 'active'{% if did %} AND datname = (SELECT datname FROM pg_database WHERE oid = {{ did }}){% endif %})  AS "{{ _('Active') }}",
+   (SELECT count(*) FROM pg_stat_activity WHERE state = 'idle'{% if did %} AND datname = (SELECT datname FROM pg_database WHERE oid = {{ did }}){% endif %})  AS "{{ _('Idle') }}"
+) t
+{% endif %}
+{% if add_union and 'tps_stats' in chart_names %}
+UNION ALL
+{% endif %}
+{% if 'tps_stats' in chart_names %}
+{% set add_union = true %}
+SELECT 'tps_stats' AS chart_name, row_to_json(t) AS chart_data
+FROM (SELECT
+   (SELECT sum(xact_commit) + sum(xact_rollback) FROM pg_stat_database{% if did %} WHERE datname = (SELECT datname FROM pg_database WHERE oid = {{ did }}){% endif %}) AS "{{ _('Transactions') }}",
+   (SELECT sum(xact_commit) FROM pg_stat_database{% if did %} WHERE datname = (SELECT datname FROM pg_database WHERE oid = {{ did }}){% endif %}) AS "{{ _('Commits') }}",
+   (SELECT sum(xact_rollback) FROM pg_stat_database{% if did %} WHERE datname = (SELECT datname FROM pg_database WHERE oid = {{ did }}){% endif %}) AS "{{ _('Rollbacks') }}"
+) t
+{% endif %}
+{% if add_union and 'ti_stats' in chart_names %}
+UNION ALL
+{% endif %}
+{% if 'ti_stats' in chart_names %}
+{% set add_union = true %}
+SELECT 'ti_stats' AS chart_name, row_to_json(t) AS chart_data
+FROM (SELECT
+   (SELECT sum(tup_inserted) FROM pg_stat_database{% if did %} WHERE datname = (SELECT datname FROM pg_database WHERE oid = {{ did }}){% endif %}) AS "{{ _('Inserts') }}",
+   (SELECT sum(tup_updated) FROM pg_stat_database{% if did %} WHERE datname = (SELECT datname FROM pg_database WHERE oid = {{ did }}){% endif %}) AS "{{ _('Updates') }}",
+   (SELECT sum(tup_deleted) FROM pg_stat_database{% if did %} WHERE datname = (SELECT datname FROM pg_database WHERE oid = {{ did }}){% endif %}) AS "{{ _('Deletes') }}"
+) t
+{% endif %}
+{% if add_union and 'to_stats' in chart_names %}
+UNION ALL
+{% endif %}
+{% if 'to_stats' in chart_names %}
+{% set add_union = true %}
+SELECT 'to_stats' AS chart_name, row_to_json(t) AS chart_data
+FROM (SELECT
+   (SELECT sum(tup_fetched) FROM pg_stat_database{% if did %} WHERE datname = (SELECT datname FROM pg_database WHERE oid = {{ did }}){% endif %}) AS "{{ _('Fetched') }}",
+   (SELECT sum(tup_returned) FROM pg_stat_database{% if did %} WHERE datname = (SELECT datname FROM pg_database WHERE oid = {{ did }}){% endif %}) AS "{{ _('Returned') }}"
+) t
+{% endif %}
+{% if add_union and 'bio_stats' in chart_names %}
+UNION ALL
+{% endif %}
+{% if 'bio_stats' in chart_names %}
+{% set add_union = true %}
+SELECT 'bio_stats' AS chart_name, row_to_json(t) AS chart_data
+FROM (SELECT
+   (SELECT sum(blks_read) FROM pg_stat_database{% if did %} WHERE datname = (SELECT datname FROM pg_database WHERE oid = {{ did }}){% endif %}) AS "{{ _('Reads') }}",
+   (SELECT sum(blks_hit) FROM pg_stat_database{% if did %} WHERE datname = (SELECT datname FROM pg_database WHERE oid = {{ did }}){% endif %}) AS "{{ _('Hits') }}"
+) t
+{% endif %}
diff --git a/web/pgadmin/utils/versioned_template_loader.py b/web/pgadmin/utils/versioned_template_loader.py
index bc32b36..6e1ed1e 100644
--- a/web/pgadmin/utils/versioned_template_loader.py
+++ b/web/pgadmin/utils/versioned_template_loader.py
@@ -12,6 +12,21 @@ from jinja2 import TemplateNotFound
 
 class VersionedTemplateLoader(DispatchingJinjaLoader):
     def get_source(self, environment, template):
+        '''
+        Should support the following template string format:
+
+        - connect/sql/9.0_plus/check_recovery.sql           <= connect/sql/#xxx#/check_recovery.sql
+        - dashboard/sql/9.6_plus/activity.sql               <= dashboard/sql/#xxx#/activity.sql
+        - dashboard/sql/gpdb_6.0_plus/activity.sql          <= dashboard/sql/#xxx#xxx#/activity.sql
+        - table/sql/9.6_plus/properties.sql                 <= table/sql/#xxx#/properties.sql
+        - table/sql/gpdb_5.0_plus/properties.sql            <= table/sql/#xxx#xxx#/properties.sql
+        - depends/pg/9.6_plus/role_dependencies.sql         <= depends/xxx/#xxx#xxx#/role_dependencies.sql
+        - depends/gpdb/5_plus/role_dependencies.sql         <= depends/xxx/#xxx#xxx#/role_dependencies.sql
+        - function/gpdb/sql/5_plus/get_definition.sql       <= function/###/sql/#xxx#xxx#/get_definition.sql
+        - function/pg/sql/10_plus/get_definition.sql        <= function/###/sql/#xxx#xxx#/get_definition.sql
+        - schemas/gpdb/5_plus/sql/acl.sql                   <= schemas/xxx/#xxx#xxx#/sql/acl.sql
+        - schemas/pg/9.6_plus/sql/acl.sql                   <= schemas/xxx/#xxx#/sql/acl.sql
+        '''
         specified_version_number, exists = parse_version(template)
         if not exists:
             return super(VersionedTemplateLoader, self).get_source(
@@ -79,7 +94,9 @@ def get_version_mapping_directories(server_type):
     """
     if server_type == 'gpdb':
         return (
+            {'name': "gpdb_6.0_plus", 'number': 90424},
             {'name': "gpdb_5.0_plus", 'number': 80323},
+            {'name': "6_plus", 'number': 90424},
             {'name': "5_plus", 'number': 80323},
             {'name': "default", 'number': 0}
         )

Reply via email to