Hi,

Please find the attached updated patch.

Thanks,
Khushboo

On Fri, Jan 20, 2017 at 5:31 PM, Dave Page <dp...@pgadmin.org> wrote:

> On Fri, Jan 13, 2017 at 6:41 AM, Khushboo Vashi
> <khushboo.va...@enterprisedb.com> wrote:
> > Hi,
> >
> > Please find the attached patch to fix the RM 2069 - Wrong tablespace
> > displayed in table properties.
> >
> > When the table is created without a tablespace, the "pg_default"
> tablespace
> > gets selected rather than the default tablespace (the current database
> > tablespace).
> > So, this issue has been fixed.
>
> Unfortunately more work is required. I started hacking on it (see
> attached), but there is more effort needed and I'm out of time.
> Specifically:
>
> - We need to remove 'pg_default' as the default tablespace when
> creating objects. Let's have no default, and let PG automatically pick
> the right tablespace, unless the user specifically overrides it. My
> updated patch removes that default, and fixes some of the SQL to
> handle it.
>
> Done

> - Matviews don't list the correct tablespace in their properties list.
>
> Done

> - Unique constraints ignore the tablespace option if the user selects
> pg_default, even if the database's default is something different.
>
> Done

> So I think to complete this we need to review all objects that use
> tablespaces (databases, tables, matviews, indexes, index-backed
> constraints) and ensure:
>
> Done

> - No default tablespace is selected when creating an object.
>
> Done

> - If the user selects a tablespace, the CREATE SQL must handle it
> properly. Similarly, if they leave it to the default.
>
> Done

> - The Properties views must display the actual tablespace in use,
> whether it is specific to the object, or the database default.
>
> Done

> Thanks.
>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py
index f501d3d..b08e912 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py
@@ -134,7 +134,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
       - This function is used to return modified SQL for the selected
         Table node
 
-    * get_sql(data, scid, tid)
+    * get_sql(did, scid, tid, data)
       - This function will generate sql from model data
 
     * sql(gid, sid, did, scid, tid):
@@ -182,7 +182,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
       - It will return formatted output of query result
         as per client model format for column node
 
-    * _index_constraints_formatter(self, tid, data):
+    * _index_constraints_formatter(self, did, tid, data):
       - It will return formatted output of query result
         as per client model format for index constraint node
 
@@ -195,7 +195,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
        - This function will parse and return formatted list of columns
          added by user
 
-    * get_index_constraint_sql(self, tid, data):
+    * get_index_constraint_sql(self, did, tid, data):
       - This function will generate modified sql for index constraints
         (Primary Key & Unique)
 
@@ -344,7 +344,8 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
         """
         SQL = render_template("/".join([self.template_path,
                                         'properties.sql']),
-                              scid=scid, datlastsysoid=self.datlastsysoid)
+                              did=did, scid=scid,
+                              datlastsysoid=self.datlastsysoid)
         status, res = self.conn.execute_dict(SQL)
 
         if not status:
@@ -737,7 +738,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
 
         return data
 
-    def _index_constraints_formatter(self, tid, data):
+    def _index_constraints_formatter(self, did, tid, data):
         """
         Args:
             tid: Table OID
@@ -758,7 +759,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
 
             sql = render_template("/".join([self.index_constraint_template_path,
                                             'properties.sql']),
-                                  tid=tid,
+                                  did=did, tid=tid,
                                   constraint_type=ctype)
             status, res = self.conn.execute_dict(sql)
 
@@ -886,7 +887,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
 
         return data
 
-    def _exclusion_constraint_formatter(self, tid, data):
+    def _exclusion_constraint_formatter(self, did, tid, data):
         """
         Args:
             tid: Table OID
@@ -900,7 +901,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
         # We will fetch all the index constraints for the table
         sql = render_template("/".join([self.exclusion_constraint_template_path,
                                         'properties.sql']),
-                              tid=tid)
+                              did=did, tid=tid)
 
         status, result = self.conn.execute_dict(sql)
 
@@ -983,7 +984,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
 
         return None
 
-    def _formatter(self, scid, tid, data):
+    def _formatter(self, did, scid, tid, data):
         """
         Args:
             data: dict of query result
@@ -1102,10 +1103,10 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
             data = self._columns_formatter(tid, data)
 
         # Here we will add constraint in our output
-        data = self._index_constraints_formatter(tid, data)
+        data = self._index_constraints_formatter(did, tid, data)
         data = self._foreign_key_formatter(tid, data)
         data = self._check_constraint_formatter(tid, data)
-        data = self._exclusion_constraint_formatter(tid, data)
+        data = self._exclusion_constraint_formatter(did, tid, data)
 
         return data
 
@@ -1128,7 +1129,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
 
         SQL = render_template("/".join([self.template_path,
                                         'properties.sql']),
-                              scid=scid, tid=tid,
+                              did=did, scid=scid, tid=tid,
                               datlastsysoid=self.datlastsysoid)
         status, res = self.conn.execute_dict(SQL)
         if not status:
@@ -1151,7 +1152,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
             'vacuum_settings_str'
         ].replace("=", " = ")
 
-        data = self._formatter(scid, tid, data)
+        data = self._formatter(did, scid, tid, data)
 
         return ajax_response(
             response=data,
@@ -1498,7 +1499,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
                 data[k] = v
 
         try:
-            SQL, name = self.get_sql(scid, tid, data)
+            SQL, name = self.get_sql(did, scid, tid, data)
 
             SQL = SQL.strip('\n').strip(' ')
             status, res = self.conn.execute_scalar(SQL)
@@ -1547,7 +1548,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
         try:
             SQL = render_template("/".join([self.template_path,
                                             'properties.sql']),
-                                  scid=scid, tid=tid,
+                                  did=did, scid=scid, tid=tid,
                                   datlastsysoid=self.datlastsysoid)
             status, res = self.conn.execute_dict(SQL)
             if not status:
@@ -1608,7 +1609,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
         try:
             SQL = render_template("/".join([self.template_path,
                                             'properties.sql']),
-                                  scid=scid, tid=tid,
+                                  did=did, scid=scid, tid=tid,
                                   datlastsysoid=self.datlastsysoid)
             status, res = self.conn.execute_dict(SQL)
             if not status:
@@ -1656,7 +1657,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
         try:
             SQL = render_template("/".join([self.template_path,
                                             'properties.sql']),
-                                  scid=scid, tid=tid,
+                                  did=did, scid=scid, tid=tid,
                                   datlastsysoid=self.datlastsysoid)
             status, res = self.conn.execute_dict(SQL)
             if not status:
@@ -1736,7 +1737,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
                 data[k] = v
 
         try:
-            SQL, name = self.get_sql(scid, tid, data)
+            SQL, name = self.get_sql(did, scid, tid, data)
             SQL = re.sub('\n{2,}', '\n\n', SQL)
             SQL = SQL.strip('\n')
             if SQL == '':
@@ -1748,7 +1749,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
         except Exception as e:
             return internal_server_error(errormsg=str(e))
 
-    def get_index_constraint_sql(self, tid, data):
+    def get_index_constraint_sql(self, did, tid, data):
         """
          Args:
            tid: Table ID
@@ -1790,7 +1791,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
 
                         properties_sql = render_template("/".join(
                             [self.index_constraint_template_path, 'properties.sql']),
-                            tid=tid, cid=c['oid'], constraint_type=ctype)
+                            did=did, tid=tid, cid=c['oid'], constraint_type=ctype)
                         status, res = self.conn.execute_dict(properties_sql)
                         if not status:
                             return internal_server_error(errormsg=res)
@@ -2104,7 +2105,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
         else:
             return None
 
-    def get_sql(self, scid, tid, data):
+    def get_sql(self, did, scid, tid, data):
         """
         This function will generate create/update sql from model data
         coming from client
@@ -2112,14 +2113,14 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
         if tid is not None:
             SQL = render_template("/".join([self.template_path,
                                             'properties.sql']),
-                                  scid=scid, tid=tid,
+                                  did=did, scid=scid, tid=tid,
                                   datlastsysoid=self.datlastsysoid)
             status, res = self.conn.execute_dict(SQL)
             if not status:
                 return internal_server_error(errormsg=res)
 
             old_data = res['rows'][0]
-            old_data = self._formatter(scid, tid, old_data)
+            old_data = self._formatter(did, scid, tid, old_data)
 
             # We will convert privileges coming from client required
             if 'relacl' in data:
@@ -2271,7 +2272,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
                 SQL += column_sql.strip('\n')
 
             # Check if index constraints are added/changed/deleted
-            index_constraint_sql = self.get_index_constraint_sql(tid, data)
+            index_constraint_sql = self.get_index_constraint_sql(did, tid, data)
             # If we have index constraint sql then ad it in main sql
             if index_constraint_sql is not None:
                 SQL += '\n' + index_constraint_sql
@@ -2468,7 +2469,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
         """
         SQL = render_template("/".join([self.template_path,
                                         'properties.sql']),
-                              scid=scid, tid=tid,
+                              did=did, scid=scid, tid=tid,
                               datlastsysoid=self.datlastsysoid)
         status, res = self.conn.execute_dict(SQL)
         if not status:
@@ -2480,7 +2481,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
         schema = data['schema']
         table = data['name']
 
-        data = self._formatter(scid, tid, data)
+        data = self._formatter(did, scid, tid, data)
 
         # Now we have all lis of columns which we need
         # to include in our create definition, Let's format them
@@ -2536,7 +2537,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
 
             SQL = render_template("/".join([self.index_template_path,
                                             'properties.sql']),
-                                  tid=tid, idx=row['oid'],
+                                  did=did, tid=tid, idx=row['oid'],
                                   datlastsysoid=self.datlastsysoid)
 
             status, res = self.conn.execute_dict(SQL)
@@ -2738,14 +2739,14 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
         """
         SQL = render_template("/".join([self.template_path,
                                         'properties.sql']),
-                              scid=scid, tid=tid,
+                              did=did, scid=scid, tid=tid,
                               datlastsysoid=self.datlastsysoid)
         status, res = self.conn.execute_dict(SQL)
         if not status:
             return internal_server_error(errormsg=res)
 
         data = res['rows'][0]
-        data = self._formatter(scid, tid, data)
+        data = self._formatter(did, scid, tid, data)
 
         columns = []
 
@@ -2782,14 +2783,14 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
         """
         SQL = render_template("/".join([self.template_path,
                                         'properties.sql']),
-                              scid=scid, tid=tid,
+                              did=did, scid=scid, tid=tid,
                               datlastsysoid=self.datlastsysoid)
         status, res = self.conn.execute_dict(SQL)
         if not status:
             return internal_server_error(errormsg=res)
 
         data = res['rows'][0]
-        data = self._formatter(scid, tid, data)
+        data = self._formatter(did, scid, tid, data)
 
         columns = []
         values = []
@@ -2829,14 +2830,14 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
         """
         SQL = render_template("/".join([self.template_path,
                                         'properties.sql']),
-                              scid=scid, tid=tid,
+                              did=did, scid=scid, tid=tid,
                               datlastsysoid=self.datlastsysoid)
         status, res = self.conn.execute_dict(SQL)
         if not status:
             return internal_server_error(errormsg=res)
 
         data = res['rows'][0]
-        data = self._formatter(scid, tid, data)
+        data = self._formatter(did, scid, tid, data)
 
         columns = []
 
@@ -2878,7 +2879,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
         """
         SQL = render_template("/".join([self.template_path,
                                         'properties.sql']),
-                              scid=scid, tid=tid,
+                              did=did, scid=scid, tid=tid,
                               datlastsysoid=self.datlastsysoid)
         status, res = self.conn.execute_dict(SQL)
         if not status:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/__init__.py
index fe7d934..d4b9f9d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/__init__.py
@@ -272,7 +272,7 @@ class ExclusionConstraintView(PGChildNodeView):
 
         """
         sql = render_template("/".join([self.template_path, 'properties.sql']),
-                              tid=tid, cid=exid)
+                              did=did, tid=tid, cid=exid)
 
         status, res = self.conn.execute_dict(sql)
 
@@ -384,6 +384,7 @@ class ExclusionConstraintView(PGChildNodeView):
 
         SQL = render_template("/".join([self.template_path,
                                         'properties.sql']),
+                              did=did,
                               tid=tid)
         status, res = self.conn.execute_dict(SQL)
 
@@ -649,7 +650,7 @@ class ExclusionConstraintView(PGChildNodeView):
         try:
             data['schema'] = self.schema
             data['table'] = self.table
-            sql, name = self.get_sql(data, tid, exid)
+            sql, name = self.get_sql(data, did, tid, exid)
             sql = sql.strip('\n').strip(' ')
             status, res = self.conn.execute_scalar(sql)
             if not status:
@@ -764,7 +765,7 @@ class ExclusionConstraintView(PGChildNodeView):
         data['schema'] = self.schema
         data['table'] = self.table
         try:
-            sql, name = self.get_sql(data, tid, exid)
+            sql, name = self.get_sql(data, did, tid, exid)
             sql = sql.strip('\n').strip(' ')
             if sql == '':
                 sql = "--modified SQL"
@@ -776,7 +777,7 @@ class ExclusionConstraintView(PGChildNodeView):
         except Exception as e:
             return internal_server_error(errormsg=str(e))
 
-    def get_sql(self, data, tid, exid=None):
+    def get_sql(self, data, did, tid, exid=None):
         """
         This function will generate sql from model data.
 
@@ -790,6 +791,7 @@ class ExclusionConstraintView(PGChildNodeView):
         """
         if exid is not None:
             sql = render_template("/".join([self.template_path, 'properties.sql']),
+                                  did=did,
                                   tid=tid,
                                   cid=exid)
             status, res = self.conn.execute_dict(sql)
@@ -838,7 +840,7 @@ class ExclusionConstraintView(PGChildNodeView):
         try:
             SQL = render_template(
                 "/".join([self.template_path, 'properties.sql']),
-                tid=tid, conn=self.conn, cid=exid)
+                did=did, tid=tid, conn=self.conn, cid=exid)
             status, result = self.conn.execute_dict(SQL)
             if not status:
                 return internal_server_error(errormsg=result)
@@ -926,7 +928,7 @@ class ExclusionConstraintView(PGChildNodeView):
             # Fetch index details only if extended stats available
             SQL = render_template(
                 "/".join([self.template_path, 'properties.sql']),
-                tid=tid, conn=self.conn, cid=exid)
+                did=did, tid=tid, conn=self.conn, cid=exid)
             status, result = self.conn.execute_dict(SQL)
             if not status:
                 return internal_server_error(errormsg=result)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/templates/exclusion_constraint/js/exclusion_constraint.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/templates/exclusion_constraint/js/exclusion_constraint.js
index e7bd905..02b77e1 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/templates/exclusion_constraint/js/exclusion_constraint.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/templates/exclusion_constraint/js/exclusion_constraint.js
@@ -653,7 +653,7 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
           name: undefined,
           oid: undefined,
           comment: undefined,
-          spcname: "pg_default",
+          spcname: undefined,
           amname: "gist",
           fillfactor: undefined,
           condeferrable: undefined,
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/__init__.py
index dc5c461..d337119 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/__init__.py
@@ -285,6 +285,7 @@ class IndexConstraintView(PGChildNodeView):
 
         """
         sql = render_template("/".join([self.template_path, 'properties.sql']),
+                              did=did,
                               tid=tid,
                               cid=cid,
                               constraint_type=self.constraint_type)
@@ -381,6 +382,7 @@ class IndexConstraintView(PGChildNodeView):
             self.table = row['table']
 
         SQL = render_template("/".join([self.template_path, 'properties.sql']),
+                              did=did,
                               tid=tid,
                               constraint_type=self.constraint_type)
         status, res = self.conn.execute_dict(SQL)
@@ -664,7 +666,7 @@ class IndexConstraintView(PGChildNodeView):
         try:
             data['schema'] = self.schema
             data['table'] = self.table
-            sql, name = self.get_sql(data, tid, cid)
+            sql, name = self.get_sql(data, did, tid, cid)
             sql = sql.strip('\n').strip(' ')
 
             status, res = self.conn.execute_scalar(sql)
@@ -784,7 +786,7 @@ class IndexConstraintView(PGChildNodeView):
         data['schema'] = self.schema
         data['table'] = self.table
         try:
-            sql, name = self.get_sql(data, tid, cid)
+            sql, name = self.get_sql(data, did, tid, cid)
             sql = sql.strip('\n').strip(' ')
             if sql == '':
                 sql = "--modified SQL"
@@ -796,7 +798,7 @@ class IndexConstraintView(PGChildNodeView):
         except Exception as e:
             return internal_server_error(errormsg=str(e))
 
-    def get_sql(self, data, tid, cid=None):
+    def get_sql(self, data, did, tid, cid=None):
         """
         This function will generate sql from model data.
 
@@ -810,6 +812,7 @@ class IndexConstraintView(PGChildNodeView):
         """
         if cid is not None:
             sql = render_template("/".join([self.template_path, 'properties.sql']),
+                                  did=did,
                                   tid=tid,
                                   cid=cid,
                                   constraint_type=self.constraint_type)
@@ -873,6 +876,7 @@ class IndexConstraintView(PGChildNodeView):
         try:
             SQL = render_template(
                 "/".join([self.template_path, 'properties.sql']),
+                did=did,
                 tid=tid,
                 conn=self.conn,
                 cid=cid,
@@ -950,6 +954,7 @@ class IndexConstraintView(PGChildNodeView):
         if is_pgstattuple:
             # Fetch index details only if extended stats available
             sql = render_template("/".join([self.template_path, 'properties.sql']),
+                                  did=did,
                                   tid=tid,
                                   cid=cid,
                                   constraint_type=self.constraint_type)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/templates/index_constraint/js/index_constraint.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/templates/index_constraint/js/index_constraint.js
index f552972..6439caf 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/templates/index_constraint/js/index_constraint.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/templates/index_constraint/js/index_constraint.js
@@ -85,7 +85,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
           name: undefined,
           oid: undefined,
           comment: undefined,
-          spcname: "pg_default",
+          spcname: undefined,
           index: undefined,
           fillfactor: undefined,
           condeferrable: undefined,
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/__init__.py
index 2bf604f..b0b206a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/__init__.py
@@ -521,7 +521,7 @@ class IndexesView(PGChildNodeView):
 
         SQL = render_template("/".join([self.template_path,
                                         'properties.sql']),
-                              tid=tid, idx=idx,
+                              did=did, tid=tid, idx=idx,
                               datlastsysoid=self.datlastsysoid)
 
         status, res = self.conn.execute_dict(SQL)
@@ -665,7 +665,7 @@ class IndexesView(PGChildNodeView):
             # so that we create template for dropping index
             SQL = render_template("/".join([self.template_path,
                                             'properties.sql']),
-                                  tid=tid, idx=idx,
+                                  did=did, tid=tid, idx=idx,
                                   datlastsysoid=self.datlastsysoid)
 
             status, res = self.conn.execute_dict(SQL)
@@ -723,7 +723,7 @@ class IndexesView(PGChildNodeView):
         data['schema'] = self.schema
         data['table'] = self.table
         try:
-            SQL, name = self.get_sql(scid, tid, idx, data)
+            SQL, name = self.get_sql(did, scid, tid, idx, data)
             SQL = SQL.strip('\n').strip(' ')
             status, res = self.conn.execute_scalar(SQL)
             if not status:
@@ -765,7 +765,7 @@ class IndexesView(PGChildNodeView):
         data['table'] = self.table
 
         try:
-            sql, name = self.get_sql(scid, tid, idx, data, mode='create')
+            sql, name = self.get_sql(did, scid, tid, idx, data, mode='create')
             sql = sql.strip('\n').strip(' ')
             if sql == '':
                 sql = "--modified SQL"
@@ -776,14 +776,14 @@ class IndexesView(PGChildNodeView):
         except Exception as e:
             return internal_server_error(errormsg=str(e))
 
-    def get_sql(self, scid, tid, idx, data, mode=None):
+    def get_sql(self, did, scid, tid, idx, data, mode=None):
         """
         This function will genrate sql from model data
         """
         if idx is not None:
             SQL = render_template("/".join([self.template_path,
                                             'properties.sql']),
-                                  tid=tid, idx=idx,
+                                  did=did, tid=tid, idx=idx,
                                   datlastsysoid=self.datlastsysoid)
 
             status, res = self.conn.execute_dict(SQL)
@@ -842,7 +842,7 @@ class IndexesView(PGChildNodeView):
         try:
             SQL = render_template("/".join([self.template_path,
                                             'properties.sql']),
-                                  tid=tid, idx=idx,
+                                  did=did, tid=tid, idx=idx,
                                   datlastsysoid=self.datlastsysoid)
 
             status, res = self.conn.execute_dict(SQL)
@@ -857,7 +857,7 @@ class IndexesView(PGChildNodeView):
             # Add column details for current index
             data = self._column_details(idx, data)
 
-            SQL, name = self.get_sql(scid, tid, None, data)
+            SQL, name = self.get_sql(did, scid, tid, None, data)
 
             sql_header = "-- Index: {0}\n\n-- ".format(data['name'])
             if hasattr(str, 'decode'):
@@ -955,7 +955,7 @@ class IndexesView(PGChildNodeView):
                 # Fetch index details only if extended stats available
                 SQL = render_template("/".join([self.template_path,
                                                 'properties.sql']),
-                                      tid=tid, idx=idx,
+                                      did=did, tid=tid, idx=idx,
                                       datlastsysoid=self.datlastsysoid)
                 status, res = self.conn.execute_dict(SQL)
                 if not status:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/templates/index/js/index.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/templates/index/js/index.js
index 6f46265..7ca2da4 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/templates/index/js/index.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/templates/index/js/index.js
@@ -259,7 +259,7 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
           oid: undefined,
           nspname: undefined,
           tabname: undefined,
-          spcname: 'pg_default',
+          spcname: undefined,
           amname: 'btree'
         },
         schema: [{
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.1_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.1_plus/properties.sql
index 3a1c897..ba3a981 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.1_plus/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.1_plus/properties.sql
@@ -2,7 +2,11 @@ SELECT cls.oid,
     cls.relname as name,
     indnatts,
     amname,
-    COALESCE(spcname, 'pg_default') as spcname,
+    CASE WHEN length(spcname) > 0 THEN 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,
     CASE contype
         WHEN 'p' THEN desp.description
         WHEN 'u' THEN desp.description
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.2_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.2_plus/properties.sql
index 3a1c897..ba3a981 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.2_plus/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.2_plus/properties.sql
@@ -2,7 +2,11 @@ SELECT cls.oid,
     cls.relname as name,
     indnatts,
     amname,
-    COALESCE(spcname, 'pg_default') as spcname,
+    CASE WHEN length(spcname) > 0 THEN 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,
     CASE contype
         WHEN 'p' THEN desp.description
         WHEN 'u' THEN desp.description
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.6_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.6_plus/properties.sql
index 3a1c897..ba3a981 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.6_plus/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.6_plus/properties.sql
@@ -2,7 +2,11 @@ SELECT cls.oid,
     cls.relname as name,
     indnatts,
     amname,
-    COALESCE(spcname, 'pg_default') as spcname,
+    CASE WHEN length(spcname) > 0 THEN 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,
     CASE contype
         WHEN 'p' THEN desp.description
         WHEN 'u' THEN desp.description
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index/sql/9.1_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index/sql/9.1_plus/properties.sql
index 2641d4c..1204234 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index/sql/9.1_plus/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index/sql/9.1_plus/properties.sql
@@ -1,6 +1,11 @@
 SELECT DISTINCT ON(cls.relname) cls.oid, cls.relname as name, indrelid, indkey, indisclustered,
     indisvalid, indisunique, indisprimary, n.nspname,indnatts,cls.reltablespace AS spcoid,
-    COALESCE(spcname, 'pg_default') as spcname, tab.relname as tabname, indclass, con.oid AS conoid,
+    CASE WHEN length(spcname) > 0 THEN 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,
+    tab.relname as tabname, indclass, con.oid AS conoid,
     CASE WHEN contype IN ('p', 'u', 'x') THEN desp.description
          ELSE des.description END AS description,
     pg_get_expr(indpred, indrelid, true) as indconstraint, contype, condeferrable, condeferred, amname,
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/properties.sql
index 0eabdd7..9e392eb 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/properties.sql
@@ -1,7 +1,11 @@
 SELECT cls.oid,
     cls.relname as name,
     indnatts,
-    COALESCE(spcname, 'pg_default') as spcname,
+    CASE WHEN length(spcname) > 0 THEN 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,
     CASE contype
         WHEN 'p' THEN desp.description
         WHEN 'u' THEN desp.description
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/js/table.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/js/table.js
index c87a293..2552cc7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/js/table.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/js/table.js
@@ -253,7 +253,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
           name: undefined,
           oid: undefined,
           spcoid: undefined,
-          spcname: 'pg_default',
+          spcname: undefined,
           relowner: undefined,
           relacl: undefined,
           relhasoids: undefined,
@@ -315,7 +315,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
         },{
           id: 'spcname', label:'{{ _('Tablespace') }}', node: 'tablespace',
           type: 'text', control: 'node-list-by-name', disabled: 'inSchema',
-          mode: ['properties', 'create', 'edit'], select2:{allowClear:false},
+          mode: ['properties', 'create', 'edit'],
           filter: function(d) {
             // If tablespace name is not "pg_global" then we need to exclude them
             return (!(d && d.label.match(/pg_global/)))
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/create.sql
index ba91ac5..d7136f7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/create.sql
@@ -79,10 +79,12 @@ WITH (
     toast.{{opt.name}} = {{opt.value}}{% endif %}
 {% endfor %}{% endif %}
 
-)
 {### SQL for Tablespace ###}
 {% if data.spcname %}
+)
 TABLESPACE {{ conn|qtIdent(data.spcname) }};
+{% else %}
+);
 {% endif %}
 {### Alter SQL for Owner ###}
 {% if data.relowner %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/properties.sql
index d995d00..a16cf87 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/properties.sql
@@ -1,5 +1,9 @@
 SELECT rel.oid, rel.relname AS name, rel.reltablespace AS spcoid,rel.relacl AS relacl_str,
-  (CASE WHEN length(spc.spcname) > 0 THEN spc.spcname ELSE 'pg_default' END) as spcname,
+  (CASE WHEN length(spc.spcname) > 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, des.description, con.conname, con.conkey,
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/properties.sql
index d995d00..a16cf87 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/properties.sql
@@ -1,5 +1,9 @@
 SELECT rel.oid, rel.relname AS name, rel.reltablespace AS spcoid,rel.relacl AS relacl_str,
-  (CASE WHEN length(spc.spcname) > 0 THEN spc.spcname ELSE 'pg_default' END) as spcname,
+  (CASE WHEN length(spc.spcname) > 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, des.description, con.conname, con.conkey,
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py
index 76d57c8..5a2a578 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py
@@ -476,7 +476,7 @@ class ViewNode(PGChildNodeView, VacuumSettings):
                     )
                 )
         try:
-            SQL, nameOrError = self.getSQL(gid, sid, data)
+            SQL, nameOrError = self.getSQL(gid, sid, did, data)
             if SQL is None:
                 return nameOrError
             SQL = SQL.strip('\n').strip(' ')
@@ -520,7 +520,7 @@ class ViewNode(PGChildNodeView, VacuumSettings):
             request.data, encoding='utf-8'
         )
         try:
-            SQL, nameOrError = self.getSQL(gid, sid, data, vid)
+            SQL, nameOrError = self.getSQL(gid, sid, did, data, vid)
             if SQL is None:
                 return nameOrError
             SQL = SQL.strip('\n').strip(' ')
@@ -645,7 +645,7 @@ class ViewNode(PGChildNodeView, VacuumSettings):
             except ValueError:
                 data[k] = v
 
-        sql, nameOrError = self.getSQL(gid, sid, data, vid)
+        sql, nameOrError = self.getSQL(gid, sid, did, data, vid)
         if sql is None:
             return nameOrError
 
@@ -659,7 +659,7 @@ class ViewNode(PGChildNodeView, VacuumSettings):
             status=200
         )
 
-    def getSQL(self, gid, sid, data, vid=None):
+    def getSQL(self, gid, sid, did, data, vid=None):
         """
         This function will generate sql from model data
         """
@@ -915,7 +915,7 @@ class ViewNode(PGChildNodeView, VacuumSettings):
 
         return SQL_data
 
-    def get_index_sql(self, vid):
+    def get_index_sql(self, did, vid):
         """
         Get all index associated with view node,
         generate their sql and render
@@ -925,7 +925,8 @@ class ViewNode(PGChildNodeView, VacuumSettings):
         self.index_temp_path = 'index'
         SQL_data = ''
         SQL = render_template("/".join(
-            [self.index_temp_path, 'sql/9.1_plus/properties.sql']), tid=vid)
+            [self.index_temp_path, 'sql/9.1_plus/properties.sql']),
+            did=did, tid=vid)
         status, data = self.conn.execute_dict(SQL)
         if not status:
             return internal_server_error(errormsg=data)
@@ -935,6 +936,7 @@ class ViewNode(PGChildNodeView, VacuumSettings):
             SQL = render_template("/".join(
                 [self.index_temp_path, 'sql/9.1_plus/properties.sql']),
                 idx=index['oid'],
+                did=did,
                 tid=vid
             )
             status, res = self.conn.execute_dict(SQL)
@@ -1021,7 +1023,7 @@ class ViewNode(PGChildNodeView, VacuumSettings):
         SQL_data += SQL
         SQL_data += self.get_rule_sql(vid)
         SQL_data += self.get_trigger_sql(vid)
-        SQL_data += self.get_index_sql(vid)
+        SQL_data += self.get_index_sql(did, vid)
 
         return ajax_response(response=SQL_data)
 
@@ -1273,13 +1275,14 @@ class MViewNode(ViewNode, VacuumSettings):
             '9.3_plus'
         )
 
-    def getSQL(self, gid, sid, data, vid=None):
+    def getSQL(self, gid, sid, did, data, vid=None):
         """
         This function will generate sql from model data
         """
         if vid is not None:
             SQL = render_template("/".join(
                 [self.template_path, 'sql/properties.sql']),
+                did=did,
                 vid=vid,
                 datlastsysoid=self.datlastsysoid
             )
@@ -1466,6 +1469,7 @@ class MViewNode(ViewNode, VacuumSettings):
         SQL_data = ''
         SQL = render_template("/".join(
             [self.template_path, 'sql/properties.sql']),
+            did=did,
             vid=vid,
             datlastsysoid=self.datlastsysoid
         )
@@ -1544,7 +1548,7 @@ class MViewNode(ViewNode, VacuumSettings):
         SQL_data += SQL
         SQL_data += self.get_rule_sql(vid)
         SQL_data += self.get_trigger_sql(vid)
-        SQL_data += self.get_index_sql(vid)
+        SQL_data += self.get_index_sql(did, vid)
         SQL_data = SQL_data.strip('\n')
         return ajax_response(response=SQL_data)
 
@@ -1590,7 +1594,7 @@ class MViewNode(ViewNode, VacuumSettings):
         """
         SQL = render_template("/".join(
             [self.template_path, 'sql/properties.sql']
-        ), vid=vid, datlastsysoid=self.datlastsysoid)
+        ), did=did, vid=vid, datlastsysoid=self.datlastsysoid)
         status, res = self.conn.execute_dict(SQL)
         if not status:
             return internal_server_error(errormsg=res)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/js/mview.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/js/mview.js
index e233b5c..e32594c 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/js/mview.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/js/mview.js
@@ -126,7 +126,7 @@ function($, _, S, pgAdmin, alertify, pgBrowser, CodeMirror) {
           pgBrowser.Node.Model.prototype.initialize.apply(this, arguments);
         },
         defaults: {
-          spcname: 'pg_default',
+          spcname: undefined,
           toast_autovacuum_enabled: false,
           autovacuum_enabled: false
         },
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/pg/9.3_plus/sql/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/pg/9.3_plus/sql/properties.sql
index 8a70522..eb36c91 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/pg/9.3_plus/sql/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/pg/9.3_plus/sql/properties.sql
@@ -6,7 +6,11 @@ SELECT
     c.relname AS name,
     c.reltablespace AS spcoid,
     c.relispopulated AS with_data,
-    (CASE WHEN length(spc.spcname) > 0 THEN spc.spcname ELSE 'pg_default' END) as spcname,
+    CASE WHEN length(spcname) > 0 THEN 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,
     c.relacl,
     nsp.nspname as schema,
     pg_get_userbyid(c.relowner) AS owner,
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/pg/9.4_plus/sql/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/pg/9.4_plus/sql/properties.sql
index 8a70522..eb36c91 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/pg/9.4_plus/sql/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/pg/9.4_plus/sql/properties.sql
@@ -6,7 +6,11 @@ SELECT
     c.relname AS name,
     c.reltablespace AS spcoid,
     c.relispopulated AS with_data,
-    (CASE WHEN length(spc.spcname) > 0 THEN spc.spcname ELSE 'pg_default' END) as spcname,
+    CASE WHEN length(spcname) > 0 THEN 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,
     c.relacl,
     nsp.nspname as schema,
     pg_get_userbyid(c.relowner) AS owner,
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/ppas/9.3_plus/sql/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/ppas/9.3_plus/sql/properties.sql
index 8a70522..eb36c91 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/ppas/9.3_plus/sql/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/ppas/9.3_plus/sql/properties.sql
@@ -6,7 +6,11 @@ SELECT
     c.relname AS name,
     c.reltablespace AS spcoid,
     c.relispopulated AS with_data,
-    (CASE WHEN length(spc.spcname) > 0 THEN spc.spcname ELSE 'pg_default' END) as spcname,
+    CASE WHEN length(spcname) > 0 THEN 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,
     c.relacl,
     nsp.nspname as schema,
     pg_get_userbyid(c.relowner) AS owner,
-- 
Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

Reply via email to