[prev in list] [next in list] [prev in thread] [next in thread]
List: postgresql-general
Subject: [HACKERS] Add support to COMMENT ON CURRENT DATABASE
From: Fabrízio_de_Royes_Mello <fabriziomello () gmail ! com>
Date: 2016-12-31 2:28:42
Message-ID: CAFcNs+pD9LKrWmgTKDoW+eT=-rEbxwt+XBbs1-nu2vsUxs3swg () mail ! gmail ! com
[Download RAW message or body]
[Attachment #2 (multipart/alternative)]
Hi all,
The attached patch is reworked from a previous one [1] to better deal with
get_object_address and pg_get_object_address.
Regards,
[1] https://www.postgresql.org/message-id/20150317171836.GC10492@momjian.us
--
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
[Attachment #5 (text/html)]
<div dir="ltr"><div><div>Hi all,<br><br></div>The attached patch is reworked from a \
previous one [1] to better deal with get_object_address and \
pg_get_object_address.<br><br></div>Regards,<br \
clear="all"><div><div><div><div><br>[1] <a \
href="https://www.postgresql.org/message-id/20150317171836.GC10492@momjian.us">https://www.postgresql.org/message-id/20150317171836.GC10492@momjian.us</a><br><br>-- \
<br><div class="gmail_signature"><div dir="ltr">Fabrízio de Royes \
Mello<br>Consultoria/Coaching PostgreSQL<div><span \
style="font-family:arial;font-size:small">>> Timbira: </span><a \
href="http://www.timbira.com.br" \
style="color:rgb(17,85,204);font-family:arial;font-size:small" \
target="_blank">http://www.timbira.com.br</a><br>>> Blog: <a \
href="http://fabriziomello.github.io" \
target="_blank">http://fabriziomello.github.io</a><br>>> Linkedin: <a \
href="http://br.linkedin.com/in/fabriziomello" \
target="_blank">http://br.linkedin.com/in/fabriziomello</a><br>>> Twitter: <a \
href="http://twitter.com/fabriziomello" \
target="_blank">http://twitter.com/fabriziomello</a><br></div><div>>> Github: \
<a href="http://github.com/fabriziomello" \
target="_blank">http://github.com/fabriziomello</a><br></div></div></div> \
</div></div></div></div></div>
["comment_on_current_database_v1.patch" (text/x-patch)]
diff --git a/doc/src/sgml/ref/comment.sgml b/doc/src/sgml/ref/comment.sgml
index c1cf587..51b39ab 100644
--- a/doc/src/sgml/ref/comment.sgml
+++ b/doc/src/sgml/ref/comment.sgml
@@ -31,6 +31,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> |
@@ -96,6 +97,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
@@ -307,6 +313,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/catalog/objectaddress.c \
b/src/backend/catalog/objectaddress.c index bb4b080..71bffae 100644
--- a/src/backend/catalog/objectaddress.c
+++ b/src/backend/catalog/objectaddress.c
@@ -621,6 +621,9 @@ static const struct object_type_map
{
"database", OBJECT_DATABASE
},
+ {
+ "current database", OBJECT_DATABASE
+ },
/* OCLASS_TBLSPACE */
{
"tablespace", OBJECT_TABLESPACE
@@ -1053,9 +1056,12 @@ get_object_address_unqualified(ObjectType objtype,
/*
* The types of names handled by this function are not permitted to be
- * schema-qualified or catalog-qualified.
+ * schema-qualified or catalog-qualified.
+ *
+ * If "CURRENT DATABASE" is used the target object name is NIL so we
+ * don't need to do this check.
*/
- if (list_length(qualname) != 1)
+ if (list_length(qualname) > 1)
{
const char *msg;
@@ -1101,7 +1107,10 @@ get_object_address_unqualified(ObjectType objtype,
}
/* Format is valid, extract the actual name. */
- name = strVal(linitial(qualname));
+ if (list_length(qualname) > 0)
+ name = strVal(linitial(qualname));
+ else
+ name = NULL;
/* Translate name to OID. */
switch (objtype)
@@ -1113,7 +1122,10 @@ get_object_address_unqualified(ObjectType objtype,
break;
case OBJECT_DATABASE:
address.classId = DatabaseRelationId;
- address.objectId = get_database_oid(name, missing_ok);
+ if (name != NULL)
+ address.objectId = get_database_oid(name, missing_ok);
+ else
+ address.objectId = MyDatabaseId;
address.objectSubId = 0;
break;
case OBJECT_EXTENSION:
@@ -1951,7 +1963,7 @@ pg_get_object_address(PG_FUNCTION_ARGS)
else
{
name = textarray_to_strvaluelist(namearr);
- if (list_length(name) < 1)
+ if (list_length(name) < 1 && type != OBJECT_DATABASE)
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("name list length must be at least %d", 1)));
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 08cf5b7..b87aa5a 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -6101,7 +6101,7 @@ opt_restart_seqs:
* the object associated with the comment. The form of the statement is:
*
* COMMENT ON [ [ ACCESS METHOD | CONVERSION | COLLATION |
- * DATABASE | DOMAIN |
+ * DATABASE | CURRENT DATABASE | DOMAIN |
* EXTENSION | EVENT TRIGGER | FOREIGN DATA WRAPPER |
* FOREIGN TABLE | INDEX | [PROCEDURAL] LANGUAGE |
* MATERIALIZED VIEW | POLICY | ROLE | SCHEMA | SEQUENCE |
@@ -6135,6 +6135,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 e5545b3..2e4746a 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -2679,10 +2679,20 @@ dumpDatabase(Archive *fout)
resetPQExpBuffer(dbQry);
/*
+ * Use the new form (COMMENT ON CURRENT DATABASE) for new version
+ */
+ if (fout->remoteVersion >= 100000)
+ {
+ appendPQExpBuffer(dbQry, "COMMENT ON CURRENT DATABASE IS ");
+ }
+ /*
* Generates warning when loaded into a differently-named
* database.
*/
- appendPQExpBuffer(dbQry, "COMMENT ON DATABASE %s IS ", fmtId(datname));
+ else
+ {
+ appendPQExpBuffer(dbQry, "COMMENT ON DATABASE %s IS ", fmtId(datname));
+ }
appendStringLiteralAH(dbQry, comment, fout);
appendPQExpBufferStr(dbQry, ";\n");
diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl
index 59191cc..1189d82 100644
--- a/src/bin/pg_dump/t/002_pg_dump.pl
+++ b/src/bin/pg_dump/t/002_pg_dump.pl
@@ -721,10 +721,10 @@ my %tests = (
},
},
- 'COMMENT ON DATABASE postgres' => {
+ 'COMMENT ON CURRENT DATABASE' => {
all_runs => 1,
catch_all => 'COMMENT commands',
- regexp => qr/^COMMENT ON DATABASE postgres IS .*;/m,
+ regexp => qr/^COMMENT ON CURRENT DATABASE IS .*;/m,
like => {
binary_upgrade => 1,
clean => 1,
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 02c8d60..a53496d 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -2004,7 +2004,7 @@ psql_completion(const char *text, int start, int end)
else if (Matches2("COMMENT", "ON"))
{
static const char *const list_COMMENT[] =
- {"ACCESS METHOD", "CAST", "COLLATION", "CONVERSION", "DATABASE",
+ {"ACCESS METHOD", "CAST", "COLLATION", "CONVERSION", "CURRENT DATABASE", \
"DATABASE", "EVENT TRIGGER", "EXTENSION",
"FOREIGN DATA WRAPPER", "FOREIGN TABLE",
"SERVER", "INDEX", "LANGUAGE", "POLICY", "RULE", "SCHEMA", "SEQUENCE",
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic