Hi,

PAF patch for RM1107

Issue fixed:
*1]* Removed alter.sql and merged sql statement from alter.sql with create
sql wherever possible so that objects can be create in single statement to
ensure that whole operation is atomic.

*Code merged for below nodes:*
Schema, Table, all constraints.

*Nodes do not support executing other sql statements with create statement:*
Index node (To ensure that create index operation to be atomic added code
to Initiate database transaction manually before creating index object)

*Node Excluded (As they do not support **executing other sql statements
with create statement and also create statement cannot be executed inside
database transaction):*
Database, Tablespace

*2]* Fixed typo in databases/templates/databases/sql/9.3_plus/grant.sql



-- 
*Harshal Dhumal*
*Software Engineer*

EnterpriseDB India: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
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 1ef8270..bf22d0e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py
@@ -506,6 +506,7 @@ It may have been removed by another user.
                     )
                 )
         try:
+            self.format_request_acls(data, specific=['nspacl'])
             SQL = render_template(
                 "/".join([self.template_path, 'sql/create.sql']),
                 data=data, conn=self.conn, _=gettext
@@ -518,22 +519,6 @@ It may have been removed by another user.
                     errormsg=res + '\n' +
                     'Operation failed while running create statement'
                     )
-            self.format_request_acls(data, specific=['nspacl'])
-
-            SQL = render_template(
-                "/".join([self.template_path, 'sql/alter.sql']),
-                data=data, conn=self.conn, _=gettext
-                )
-            # Checking if we are not executing empty query
-            if SQL and SQL.strip('\n') and SQL.strip(' '):
-                status, res = self.conn.execute_scalar(SQL)
-                if not status:
-                    return make_json_response(
-                        status=410,
-                        success=0,
-                        errormsg=res + '\n' +
-                        'Operation failed while running alter statement'
-                        )
 
             # we need oid to to add object in tree at browser,
             # below sql will gives the same
@@ -727,11 +712,6 @@ It may have been removed by another user.
                 "/".join([self.template_path, 'sql/create.sql']),
                 data=data, conn=self.conn, _=gettext
                 )
-            SQL += "\n"
-            SQL += render_template(
-                "/".join([self.template_path, 'sql/alter.sql']),
-                _=gettext, data=data, conn=self.conn
-                )
 
         return SQL
 
@@ -774,11 +754,6 @@ It may have been removed by another user.
             "/".join([self.template_path, 'sql/create.sql']),
             _=gettext, data=data, conn=self.conn
             )
-        SQL += "\n"
-        SQL += render_template(
-            "/".join([self.template_path, 'sql/alter.sql']),
-            _=gettext, data=data, conn=self.conn
-            )
 
         sql_header = """
 -- SCHEMA: {0}
@@ -867,7 +842,6 @@ It may have been removed by another user.
         return make_json_response(data=nodes)
 
 
-
 class CatalogView(SchemaView):
     """
     This class is responsible for generating routes for catalog schema node.
@@ -965,11 +939,6 @@ It may have been removed by another user.
             "/".join([self.template_path, 'sql/create.sql']),
             _=gettext, data=old_data, conn=self.conn
             )
-        SQL += "\n"
-        SQL += render_template(
-            "/".join([self.template_path, 'sql/alter.sql']),
-            _=gettext, data=old_data, conn=self.conn
-            )
 
         sql_header = """
 -- CATALOG: {0}
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 3acf709..93cde7b 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
@@ -1747,14 +1747,6 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
                                     if ctype == 'p' else 'UNIQUE'
                                     ).strip('\n')
                             )
-                            # sql to update comments
-                            sql.append(
-                                render_template(
-                                    "/".join([self.index_constraint_template_path,
-                                              'alter.sql']),
-                                    data=c, conn=self.conn
-                                    ).strip('\n')
-                            )
                         else:
                             sql.append(
                                 gettext(
@@ -1871,14 +1863,6 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
                             data=c, conn=self.conn
                             ).strip('\n')
                     )
-                    # sql to update comments
-                    sql.append(
-                        render_template(
-                            "/".join([self.foreign_key_template_path,
-                                      'alter.sql']),
-                            data=c, conn=self.conn
-                            ).strip('\n')
-                    )
 
                     if c['autoindex']:
                         sql.append(
@@ -1963,14 +1947,6 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
                             data=c, conn=self.conn
                             ).strip('\n')
                     )
-                    # sql to update comments
-                    sql.append(
-                        render_template(
-                            "/".join([self.check_constraint_template_path,
-                                      'alter.sql']),
-                            data=c, conn=self.conn
-                            ).strip('\n')
-                    )
 
         if len(sql) > 0:
             # Join all the sql(s) as single string
@@ -2047,14 +2023,6 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
                             data=c, conn=self.conn
                             ).strip('\n')
                     )
-                    # sql to update comments
-                    sql.append(
-                        render_template(
-                            "/".join([self.exclusion_constraint_template_path,
-                                      'alter.sql']),
-                            data=c, conn=self.conn
-                            ).strip('\n')
-                    )
 
         if len(sql) > 0:
             # Join all the sql(s) as single string
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/__init__.py
index f2eb81b..c339453 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/__init__.py
@@ -465,17 +465,6 @@ class CheckConstraintView(PGChildNodeView):
                 icon = "icon-check_constraints"
                 valid = True
 
-            sql = render_template("/".join([self.template_path, 'alter.sql']),
-                                  data=data,
-                                  conn=self.conn)
-            sql = sql.strip('\n').strip(' ')
-
-            if sql != '':
-                status, result = self.conn.execute_scalar(sql)
-                if not status:
-                    self.end_transaction()
-                    return internal_server_error(errormsg=result)
-
             return jsonify(
                 node=self.blueprint.generate_browser_node(
                     res['rows'][0]['oid'],
@@ -638,10 +627,6 @@ class CheckConstraintView(PGChildNodeView):
         SQL = render_template("/".join([self.template_path,
                                         'create.sql']),
                               data=data)
-        SQL += "\n"
-        SQL += render_template(
-                "/".join([self.template_path, 'alter.sql']),
-                data=data)
 
         sql_header = "-- Constraint: {0}\n\n-- ".format(data['name'])
 
@@ -735,9 +720,6 @@ class CheckConstraintView(PGChildNodeView):
                 SQL = render_template("/".join([self.template_path,
                                                 'create.sql']),
                                       data=data)
-                SQL += "\n"
-                SQL += render_template("/".join([self.template_path, 'alter.sql']),
-                                       data=data)
 
             return SQL
         except Exception as e:
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 16eafc1..cd44642 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
@@ -506,15 +506,6 @@ class ExclusionConstraintView(PGChildNodeView):
                 if not status:
                     self.end_transaction()
                     return internal_server_error(errormsg=res)
-            if 'name' in data and data['name'] != '':
-                sql = render_template("/".join([self.template_path, 'alter.sql']), data=data, conn=self.conn)
-                sql = sql.strip('\n').strip(' ')
-
-                if sql != '':
-                    status, result = self.conn.execute_scalar(sql)
-                    if not status:
-                        self.end_transaction()
-                        return internal_server_error(errormsg=result)
 
             return jsonify(
                 node=self.blueprint.generate_browser_node(
@@ -728,9 +719,6 @@ class ExclusionConstraintView(PGChildNodeView):
 
             sql = render_template("/".join([self.template_path, 'create.sql']),
                                   data=data, conn=self.conn)
-            sql += "\n"
-            sql += render_template("/".join([self.template_path, 'alter.sql']),
-                                   data=data, conn=self.conn)
 
         return sql
 
@@ -795,10 +783,6 @@ class ExclusionConstraintView(PGChildNodeView):
 
             SQL = render_template(
                 "/".join([self.template_path, 'create.sql']), data=data)
-            SQL += "\n"
-            SQL += render_template(
-                "/".join([self.template_path, 'alter.sql']),
-                data=data, conn=self.conn)
 
             sql_header = "-- Constraint: {0}\n\n-- ".format(data['name'])

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 ce05031..2a3cea9 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
@@ -547,15 +547,6 @@ class ForeignKeyConstraintView(PGChildNodeView):
                 icon = "icon-foreign_key"
                 valid = True
 
-            sql = render_template("/".join([self.template_path, 'alter.sql']), data=data, conn=self.conn)
-            sql = sql.strip('\n').strip(' ')
-
-            if sql != '':
-                status, result = self.conn.execute_scalar(sql)
-                if not status:
-                    self.end_transaction()
-                    return internal_server_error(errormsg=result)
-
             if data['autoindex']:
                 sql = render_template(
                     "/".join([self.template_path, 'create_index.sql']),
@@ -827,9 +818,6 @@ class ForeignKeyConstraintView(PGChildNodeView):
 
             sql = render_template("/".join([self.template_path, 'create.sql']),
                                   data=data, conn=self.conn)
-            sql += "\n"
-            sql += render_template("/".join([self.template_path, 'alter.sql']),
-                                   data=data, conn=self.conn)
 
             if data['autoindex']:
                 sql += render_template(
@@ -898,10 +886,6 @@ class ForeignKeyConstraintView(PGChildNodeView):
 
             SQL = render_template(
                 "/".join([self.template_path, 'create.sql']), data=data)
-            SQL += "\n"
-            SQL += render_template(
-                "/".join([self.template_path, 'alter.sql']),
-                data=data, conn=self.conn)
 
             sql_header = "-- Constraint: {0}\n\n-- ".format(data['name'])
 
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 90aa4ce..96b3c3e 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
@@ -526,17 +526,6 @@ class IndexConstraintView(PGChildNodeView):
                     self.end_transaction()
                     return internal_server_error(errormsg=res)
 
-            sql = render_template("/".join([self.template_path, 'alter.sql']),
-                                  data=data,
-                                  conn=self.conn)
-            sql = sql.strip('\n').strip(' ')
-
-            if sql != '':
-                status, result = self.conn.execute_scalar(sql)
-                if not status:
-                    self.end_transaction()
-                    return internal_server_error(errormsg=result)
-
             return jsonify(
                 node=self.blueprint.generate_browser_node(
                     res['rows'][0]['oid'],
@@ -768,10 +757,6 @@ class IndexConstraintView(PGChildNodeView):
                                   data=data,
                                   conn=self.conn,
                                   constraint_name=self.constraint_name)
-            sql += "\n"
-            sql += render_template("/".join([self.template_path, 'alter.sql']),
-                                   data=data,
-                                   conn=self.conn)
 
         return sql
 
@@ -826,10 +811,6 @@ class IndexConstraintView(PGChildNodeView):
                 "/".join([self.template_path, 'create.sql']),
                 data=data,
                 constraint_name=self.constraint_name)
-            SQL += "\n"
-            SQL += render_template(
-                "/".join([self.template_path, 'alter.sql']),
-                data=data, conn=self.conn)
 
             sql_header = "-- Constraint: {0}\n\n-- ".format(data['name'])
 
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 3238e02..3fe782d 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
@@ -557,15 +557,19 @@ class IndexesView(PGChildNodeView):
         data['table'] = self.table
 
         try:
+            # Start transaction.
+            self.conn.execute_scalar("BEGIN;")
             SQL = render_template("/".join([self.template_path,
                                             'create.sql']),
                                   data=data, conn=self.conn, mode='create')
             status, res = self.conn.execute_scalar(SQL)
             if not status:
+                # End transaction.
+                self.conn.execute_scalar("END;")
                 return internal_server_error(errormsg=res)
 
             # If user chooses concurrent index then we can not run it along
-            # with other alter statments so we will separate alter index part
+            # with other alter statements so we will separate alter index part
             SQL = render_template("/".join([self.template_path,
                                             'alter.sql']),
                                   data=data, conn=self.conn)
@@ -573,6 +577,8 @@ class IndexesView(PGChildNodeView):
             if SQL != '':
                 status, res = self.conn.execute_scalar(SQL)
                 if not status:
+                    # End transaction.
+                    self.conn.execute_scalar("END;")
                     return internal_server_error(errormsg=res)
 
             # we need oid to to add object in tree at browser
@@ -581,8 +587,12 @@ class IndexesView(PGChildNodeView):
                                   tid=tid, data=data)
             status, idx = self.conn.execute_scalar(SQL)
             if not status:
+                # End transaction.
+                self.conn.execute_scalar("END;")
                 return internal_server_error(errormsg=tid)
 
+            # End transaction.
+            self.conn.execute_scalar("END;")
             return jsonify(
                 node=self.blueprint.generate_browser_node(
                     idx,
@@ -592,6 +602,8 @@ class IndexesView(PGChildNodeView):
                 )
             )
         except Exception as e:
+            # End transaction.
+            self.conn.execute_scalar("END;")
             return internal_server_error(errormsg=str(e))
 
     @check_precondition
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.1_plus/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.1_plus/alter.sql
deleted file mode 100644
index 0fb0ea5..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.1_plus/alter.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-{% if data.comment %}
-COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
-    IS {{ data.comment|qtLiteral }};
-{% endif %}
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.1_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.1_plus/create.sql
index 8d8c10a..726a41a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.1_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.1_plus/create.sql
@@ -2,3 +2,8 @@
 ALTER TABLE {{ conn|qtIdent(data.schema, data.table) }}
     ADD{% if data.name %} CONSTRAINT {{ conn|qtIdent(data.name) }}{% endif%} CHECK ({{ data.consrc }});
 {% endif %}
+{% if data.comment %}
+
+COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
+    IS {{ data.comment|qtLiteral }};
+{% endif %}
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.2_plus/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.2_plus/alter.sql
deleted file mode 100644
index 0fb0ea5..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.2_plus/alter.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-{% if data.comment %}
-COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
-    IS {{ data.comment|qtLiteral }};
-{% endif %}
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.2_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.2_plus/create.sql
index 2c7a57f..7b0bf08 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.2_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.2_plus/create.sql
@@ -4,3 +4,8 @@ ALTER TABLE {{ conn|qtIdent(data.schema, data.table) }}
 
     NOT VALID{% endif %}{% if data.connoinherit %} NO INHERIT{% endif %};
 {% endif %}
+{% if data.comment %}
+
+COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
+    IS {{ data.comment|qtLiteral }};
+{% endif %}
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.1_plus/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.1_plus/alter.sql
deleted file mode 100644
index 0fb0ea5..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.1_plus/alter.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-{% if data.comment %}
-COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
-    IS {{ data.comment|qtLiteral }};
-{% endif %}
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.1_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.1_plus/create.sql
index c6a53cd..db29048 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.1_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.1_plus/create.sql
@@ -9,4 +9,9 @@ ALTER TABLE {{ conn|qtIdent(data.schema, data.table) }}
 
     DEFERRABLE{% if data.condeferred %}
  INITIALLY DEFERRED{% endif%}
-{% endif%}{% if data.constraint %} WHERE ({{data.constraint}}){% endif%};
\ No newline at end of file
+{% endif%}{% if data.constraint %} WHERE ({{data.constraint}}){% endif%};
+{% if data.comment and data.name %}
+
+COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
+    IS {{ data.comment|qtLiteral }};
+{% endif %}
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.2_plus/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.2_plus/alter.sql
deleted file mode 100644
index 0fb0ea5..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.2_plus/alter.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-{% if data.comment %}
-COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
-    IS {{ data.comment|qtLiteral }};
-{% endif %}
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.2_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.2_plus/create.sql
index c6a53cd..db29048 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.2_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.2_plus/create.sql
@@ -9,4 +9,9 @@ ALTER TABLE {{ conn|qtIdent(data.schema, data.table) }}
 
     DEFERRABLE{% if data.condeferred %}
  INITIALLY DEFERRED{% endif%}
-{% endif%}{% if data.constraint %} WHERE ({{data.constraint}}){% endif%};
\ No newline at end of file
+{% endif%}{% if data.constraint %} WHERE ({{data.constraint}}){% endif%};
+{% if data.comment and data.name %}
+
+COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
+    IS {{ data.comment|qtLiteral }};
+{% endif %}
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/alter.sql
deleted file mode 100644
index 0fb0ea5..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/alter.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-{% if data.comment %}
-COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
-    IS {{ data.comment|qtLiteral }};
-{% endif %}
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/create.sql
index 7a4eda4..39df112 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/create.sql
@@ -24,4 +24,9 @@ ALTER TABLE {{ conn|qtIdent(data.schema, data.table) }}
 {% endif%}
 {% if data.convalidated %}
 
-    NOT VALID{% endif%};
\ No newline at end of file
+    NOT VALID{% endif%};
+{% if data.comment and data.name %}
+
+COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
+    IS {{ data.comment|qtLiteral }};
+{% endif %}
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/alter.sql
deleted file mode 100644
index 0fb0ea5..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/alter.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-{% if data.comment %}
-COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
-    IS {{ data.comment|qtLiteral }};
-{% endif %}
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/create.sql
index 61a717e..2bd34a4 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/create.sql
@@ -9,4 +9,9 @@ ALTER TABLE {{ conn|qtIdent(data.schema, data.table) }}
 
     DEFERRABLE{% if data.condeferred %}
  INITIALLY DEFERRED{% endif%}
-{% endif%};
\ No newline at end of file
+{% endif%};
+{% if data.comment and data.name %}
+
+COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
+    IS {{ data.comment|qtLiteral }};
+{% endif %}
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/alter.sql
deleted file mode 100644
index 937bab7..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/alter.sql
+++ /dev/null
@@ -1 +0,0 @@
-{# We have nothing to alter in the catalog #}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/alter.sql
deleted file mode 100644
index 937bab7..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/alter.sql
+++ /dev/null
@@ -1 +0,0 @@
-{# We have nothing to alter in the catalog #}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/alter.sql
deleted file mode 100644
index 937bab7..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/alter.sql
+++ /dev/null
@@ -1 +0,0 @@
-{# We have nothing to alter in the catalog #}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/alter.sql
deleted file mode 100644
index 937bab7..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/alter.sql
+++ /dev/null
@@ -1 +0,0 @@
-{# We have nothing to alter in the catalog #}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/pg/9.1_plus/sql/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/pg/9.1_plus/sql/alter.sql
deleted file mode 100644
index 61fdfe4..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/pg/9.1_plus/sql/alter.sql
+++ /dev/null
@@ -1,35 +0,0 @@
-{% import 'macros/security.macros' as SECLABLE %}
-{% import 'macros/privilege.macros' as PRIVILEGE %}
-{% import 'macros/default_privilege.macros' as DEFAULT_PRIVILEGE %}
-{#  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')]
-%}
-{% if data[defacl] %}{% set acl = data[defacl] %}
-{% for priv in data.deftblacl %}
-{{ 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 %}
-{{ SECLABLE.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
-{% endfor %}
-{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/pg/9.1_plus/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/pg/9.1_plus/sql/create.sql
index d3598ac..946058a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/pg/9.1_plus/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/pg/9.1_plus/sql/create.sql
@@ -1,7 +1,44 @@
+{% import 'macros/security.macros' as SECLABLE %}
+{% 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 %};
+{#  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')]
+%}
+{% if data[defacl] %}{% set acl = data[defacl] %}
+{% for priv in data.deftblacl %}
+{{ 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 %}
+{{ SECLABLE.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
+{% endfor %}
+{% endif %}
+
 {% else %}
 {{ -- _('Incomplete definition') }}
 {% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/pg/9.2_plus/sql/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/pg/9.2_plus/sql/alter.sql
deleted file mode 100644
index 38cb949..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/pg/9.2_plus/sql/alter.sql
+++ /dev/null
@@ -1,35 +0,0 @@
-{% import 'macros/security.macros' as SECLABEL %}
-{% import 'macros/privilege.macros' as PRIVILEGE %}
-{% import 'macros/default_privilege.macros' as DEFAULT_PRIVILEGE %}
-{#  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 data.deftblacl %}
-{{ 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 %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/pg/9.2_plus/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/pg/9.2_plus/sql/create.sql
index d3598ac..7824916 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/pg/9.2_plus/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/pg/9.2_plus/sql/create.sql
@@ -1,7 +1,44 @@
+{% 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 %};
+{#  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 data.deftblacl %}
+{{ 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 %}
+
 {% else %}
 {{ -- _('Incomplete definition') }}
 {% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/ppas/9.1_plus/sql/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/ppas/9.1_plus/sql/alter.sql
deleted file mode 100644
index 775dfc3..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/ppas/9.1_plus/sql/alter.sql
+++ /dev/null
@@ -1,35 +0,0 @@
-{% import 'macros/security.macros' as SECLABEL %}
-{% import 'macros/privilege.macros' as PRIVILEGE %}
-{% import 'macros/default_privilege.macros' as DEFAULT_PRIVILEGE %}
-{#  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')]
-%}
-{% if data[defacl] %}{% set acl = data[defacl] %}
-{% for priv in data.deftblacl %}
-{{ 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 %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/ppas/9.1_plus/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/ppas/9.1_plus/sql/create.sql
index d3598ac..b63bb59 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/ppas/9.1_plus/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/ppas/9.1_plus/sql/create.sql
@@ -1,7 +1,44 @@
+{% 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 %};
+{#  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')]
+%}
+{% if data[defacl] %}{% set acl = data[defacl] %}
+{% for priv in data.deftblacl %}
+{{ 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 %}
+
 {% else %}
 {{ -- _('Incomplete definition') }}
 {% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/ppas/9.2_plus/sql/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/ppas/9.2_plus/sql/alter.sql
deleted file mode 100644
index 38cb949..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/ppas/9.2_plus/sql/alter.sql
+++ /dev/null
@@ -1,35 +0,0 @@
-{% import 'macros/security.macros' as SECLABEL %}
-{% import 'macros/privilege.macros' as PRIVILEGE %}
-{% import 'macros/default_privilege.macros' as DEFAULT_PRIVILEGE %}
-{#  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 data.deftblacl %}
-{{ 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 %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/ppas/9.2_plus/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/ppas/9.2_plus/sql/create.sql
index d3598ac..7824916 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/ppas/9.2_plus/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schema/ppas/9.2_plus/sql/create.sql
@@ -1,7 +1,44 @@
+{% 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 %};
+{#  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 data.deftblacl %}
+{{ 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 %}
+
 {% else %}
 {{ -- _('Incomplete definition') }}
 {% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.3_plus/grant.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.3_plus/grant.sql
index 7294c70..3731a55 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.3_plus/grant.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.3_plus/grant.sql
@@ -1,7 +1,7 @@
 {#
-# CREATE DATABSE does not allow us to run any
-# other sql statments along with it, so we wrote
-# seprate sql for rest alter sql statments here
+# CREATE DATABASE does not allow us to run any
+# other sql statements along with it, so we wrote
+# separate sql for rest alter sql statements here
 #}
 {% import 'macros/security.macros' as SECLABEL %}
 {% import 'macros/variable.macros' as VARIABLE %}
-- 
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