On Tue, Apr 28, 2015 at 9:38 AM, Robert Haas <robertmh...@gmail.com> wrote:
>
> On Sat, Apr 25, 2015 at 8:05 AM, Fabrízio de Royes Mello
> <fabriziome...@gmail.com> wrote:
> >> >> > If we ever implement something like
> >> >> >
> >> >> > COMMENT ON CURRENT_DATABASE IS ...
> >> >> >
> >> >> > it will be useful, because you will be able to restore a dump into
> >> >> > another database and have the comment apply to the target
database.
> >> >
> >> > I think it's simple to implement, but how about pg_dump... we need to
> >> > add
> >> > new option (like --use-current-database) or am I missing something ?
> >>
> >> I think we'd just change it to use the new syntax, full stop.  I see
> >> no need for an option.
> >
> > I'm returning on this...
> >
> > What's the reasonable syntaxes?
> >
> > COMMENT ON CURRENT DATABASE IS 'text';
> >
> > or
> >
> > COMMENT ON DATABASE { CURRENT_DATABASE | object_name } IS 'text';
>
> The second one would require making CURRENT_DATABASE a reserved
> keyword, and I'm not keen to create any more of those.  I like the
> first one.  The other alternative that may be worth considering is:
>
> COMMENT ON CURRENT_DATABASE IS 'text';
>
> That doesn't require making CURRENT_DATABASE a reserved keyword, but
> it does require making it a keyword, and it doesn't look very SQL-ish.
> Still, we have a bunch of other CURRENT_FOO keywords.
>
> But I'm inclined to stick with your first proposal.
>

Attached the patch to support "COMMENT ON CURRENT DATABASE IS ..."
(including pg_dump).

On my next spare time I'll send the "ALTER ROLE ... IN CURRENT DATABASE"
patch.

Regards,

--
Fabrízio de Royes Mello
Consultoria/Coaching PostgreSQL
>> Timbira: http://www.timbira.com.br
>> Blog: http://fabriziomello.github.io
>> Linkedin: http://br.linkedin.com/in/fabriziomello
>> Twitter: http://twitter.com/fabriziomello
>> Github: http://github.com/fabriziomello
diff --git a/doc/src/sgml/ref/comment.sgml b/doc/src/sgml/ref/comment.sgml
index 656f5aa..b080106 100644
--- a/doc/src/sgml/ref/comment.sgml
+++ b/doc/src/sgml/ref/comment.sgml
@@ -30,6 +30,7 @@ COMMENT ON
   CONSTRAINT <replaceable class="PARAMETER">constraint_name</replaceable> ON <replaceable class="PARAMETER">table_name</replaceable> |
   CONSTRAINT <replaceable class="PARAMETER">constraint_name</replaceable> ON DOMAIN <replaceable class="PARAMETER">domain_name</replaceable> |
   CONVERSION <replaceable class="PARAMETER">object_name</replaceable> |
+  CURRENT DATABASE |
   DATABASE <replaceable class="PARAMETER">object_name</replaceable> |
   DOMAIN <replaceable class="PARAMETER">object_name</replaceable> |
   EXTENSION <replaceable class="PARAMETER">object_name</replaceable> |
@@ -92,6 +93,11 @@ COMMENT ON
   </para>
 
   <para>
+   The CURRENT DATABASE means the comment will be applied to the database
+   where the command is executed.
+  </para>
+
+  <para>
     Comments can be viewed using <application>psql</application>'s
     <command>\d</command> family of commands.
     Other user interfaces to retrieve comments can be built atop
@@ -301,6 +307,7 @@ COMMENT ON COLUMN my_table.my_column IS 'Employee ID number';
 COMMENT ON CONVERSION my_conv IS 'Conversion to UTF8';
 COMMENT ON CONSTRAINT bar_col_cons ON bar IS 'Constrains column col';
 COMMENT ON CONSTRAINT dom_col_constr ON DOMAIN dom IS 'Constrains col of domain';
+COMMENT ON CURRENT DATABASE IS 'Current Database Comment';
 COMMENT ON DATABASE my_database IS 'Development Database';
 COMMENT ON DOMAIN my_domain IS 'Email Address Domain';
 COMMENT ON EXTENSION hstore IS 'implements the hstore data type';
diff --git a/src/backend/commands/comment.c b/src/backend/commands/comment.c
index 6d8c006..db9b3c5 100644
--- a/src/backend/commands/comment.c
+++ b/src/backend/commands/comment.c
@@ -43,25 +43,29 @@ CommentObject(CommentStmt *stmt)
 	ObjectAddress address = InvalidObjectAddress;
 
 	/*
-	 * When loading a dump, we may see a COMMENT ON DATABASE for the old name
-	 * of the database.  Erroring out would prevent pg_restore from completing
-	 * (which is really pg_restore's fault, but for now we will work around
-	 * the problem here).  Consensus is that the best fix is to treat wrong
-	 * database name as a WARNING not an ERROR; hence, the following special
-	 * case.  (If the length of stmt->objname is not 1, get_object_address
+	 * If the length of stmt->objname is 1 then the COMMENT ON DATABASE command
+	 * was used, else COMMENT ON CURRENT DATABASE was used instead.
+	 * (If the length of stmt->objname is not 1, get_object_address
 	 * will throw an error below; that's OK.)
 	 */
-	if (stmt->objtype == OBJECT_DATABASE && list_length(stmt->objname) == 1)
+	if (stmt->objtype == OBJECT_DATABASE)
 	{
-		char	   *database = strVal(linitial(stmt->objname));
-
-		if (!OidIsValid(get_database_oid(database, true)))
+		/* COMMENT ON DATABASE name */
+		if (list_length(stmt->objname) == 1)
 		{
-			ereport(WARNING,
-					(errcode(ERRCODE_UNDEFINED_DATABASE),
-					 errmsg("database \"%s\" does not exist", database)));
-			return address;
+			char	   *database = strVal(linitial(stmt->objname));
+
+			if (!OidIsValid(get_database_oid(database, true)))
+			{
+				ereport(WARNING,
+						(errcode(ERRCODE_UNDEFINED_DATABASE),
+						 errmsg("database \"%s\" does not exist", database)));
+				return address;
+			}
 		}
+		/* COMMENT ON CURRENT DATABASE */
+		else
+			stmt->objname = list_make1(makeString(get_database_name(MyDatabaseId)));
 	}
 
 	/*
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 962a69d..fa111c3 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -5654,6 +5654,15 @@ CommentStmt:
 					n->comment = $6;
 					$$ = (Node *) n;
 				}
+			| COMMENT ON CURRENT_P DATABASE IS comment_text
+				{
+					CommentStmt *n = makeNode(CommentStmt);
+					n->objtype = OBJECT_DATABASE;
+					n->objname = NIL;
+					n->objargs = NIL;
+					n->comment = $6;
+					$$ = (Node *) n;
+				}
 			| COMMENT ON TYPE_P Typename IS comment_text
 				{
 					CommentStmt *n = makeNode(CommentStmt);
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 977b72e..36d6151 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -2488,7 +2488,7 @@ dumpDatabase(Archive *fout, DumpOptions *dopt)
 			 * Generates warning when loaded into a differently-named
 			 * database.
 			 */
-			appendPQExpBuffer(dbQry, "COMMENT ON DATABASE %s IS ", fmtId(datname));
+			appendPQExpBuffer(dbQry, "COMMENT ON CURRENT DATABASE IS ");
 			appendStringLiteralAH(dbQry, comment, fout);
 			appendPQExpBufferStr(dbQry, ";\n");
 
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to