We have switches already to suppress other subsidiary object properties,
such as ACLs, security labels, ownership, and tablespaces, so just on
the grounds of symmetry we should allow suppressing comments as well.
Also, commit 
0d4e6ed30 added a positive reason to have this feature,
i.e. to allow obtaining the old behavior of selective pg_restore should
anyone desire that.
Recent commits have removed the cases where pg_dump emitted comments on
built-in objects that the restoring user might not have privileges to
comment on, so the original primary motivation for this feature is gone,
but it still seems at least somewhat useful in its own right.
Robins Tharakan, reviewed by Fabrízio Mello
Discussion: https://postgr.es/m/CAEP4nAx22Z4ch74oJGzr5RyyjcyUSbpiFLyeYXX8pehfou92ug@mail.gmail.com
 
       </listitem>
      </varlistentry>
 
+     <varlistentry>
+      <term><option>--no-comments</option></term>
+      <listitem>
+       <para>
+        Do not dump comments.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry>
       <term><option>--no-publications</option></term>
       <listitem>
 
       </listitem>
      </varlistentry>
 
+     <varlistentry>
+      <term><option>--no-comments</option></term>
+      <listitem>
+       <para>
+        Do not dump comments.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry>
       <term><option>--no-publications</option></term>
       <listitem>
 
       </listitem>
      </varlistentry>
 
+     <varlistentry>
+      <term><option>--no-comments</option></term>
+      <listitem>
+       <para>
+        Do not dump comments.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry>
       <term><option>--no-data-for-failed-tables</option></term>
       <listitem>
 
    int         dump_inserts;
    int         column_inserts;
    int         if_exists;
+   int         no_comments;    /* Skip comments */
    int         no_publications;    /* Skip publication entries */
    int         no_security_labels; /* Skip security label entries */
    int         no_subscriptions;   /* Skip subscription entries */
    int         dump_inserts;
    int         column_inserts;
    int         if_exists;
+   int         no_comments;
    int         no_security_labels;
    int         no_publications;
    int         no_subscriptions;
 
    dopt->outputNoTablespaces = ropt->noTablespace;
    dopt->disable_triggers = ropt->disable_triggers;
    dopt->use_setsessauth = ropt->use_setsessauth;
-
    dopt->disable_dollar_quoting = ropt->disable_dollar_quoting;
    dopt->dump_inserts = ropt->dump_inserts;
+   dopt->no_comments = ropt->no_comments;
    dopt->no_publications = ropt->no_publications;
    dopt->no_security_labels = ropt->no_security_labels;
    dopt->no_subscriptions = ropt->no_subscriptions;
    if (ropt->aclsSkip && _tocEntryIsACL(te))
        return 0;
 
+   /* If it's a comment, maybe ignore it */
+   if (ropt->no_comments && strcmp(te->desc, "COMMENT") == 0)
+       return 0;
+
    /* If it's a publication, maybe ignore it */
    if (ropt->no_publications && strcmp(te->desc, "PUBLICATION") == 0)
        return 0;
 
        {"snapshot", required_argument, NULL, 6},
        {"strict-names", no_argument, &strict_names, 1},
        {"use-set-session-authorization", no_argument, &dopt.use_setsessauth, 1},
+       {"no-comments", no_argument, &dopt.no_comments, 1},
        {"no-publications", no_argument, &dopt.no_publications, 1},
        {"no-security-labels", no_argument, &dopt.no_security_labels, 1},
        {"no-synchronized-snapshots", no_argument, &dopt.no_synchronized_snapshots, 1},
    ropt->use_setsessauth = dopt.use_setsessauth;
    ropt->disable_dollar_quoting = dopt.disable_dollar_quoting;
    ropt->dump_inserts = dopt.dump_inserts;
+   ropt->no_comments = dopt.no_comments;
    ropt->no_publications = dopt.no_publications;
    ropt->no_security_labels = dopt.no_security_labels;
    ropt->no_subscriptions = dopt.no_subscriptions;
    printf(_("  --exclude-table-data=TABLE   do NOT dump data for the named table(s)\n"));
    printf(_("  --if-exists                  use IF EXISTS when dropping objects\n"));
    printf(_("  --inserts                    dump data as INSERT commands, rather than COPY\n"));
+   printf(_("  --no-comments                do not dump comments\n"));
    printf(_("  --no-publications            do not dump publications\n"));
    printf(_("  --no-security-labels         do not dump security label assignments\n"));
    printf(_("  --no-subscriptions           do not dump subscriptions\n"));
         */
        char       *comment = PQgetvalue(res, 0, PQfnumber(res, "description"));
 
-       if (comment && *comment)
+       if (comment && *comment && !dopt->no_comments)
        {
            resetPQExpBuffer(dbQry);
 
                    dbCatId, 0, dbDumpId);
    }
 
-   /* Dump shared security label. */
+   /* Dump DB security label, if enabled */
    if (!dopt->no_security_labels && fout->remoteVersion >= 90200)
    {
        PGresult   *shres;
    CommentItem *comments;
    int         ncomments;
 
+   /* do nothing, if --no-comments is supplied */
+   if (dopt->no_comments)
+       return;
+
    /* Comments are schema not data ... except blob comments are data */
    if (strncmp(target, "LARGE OBJECT ", 13) != 0)
    {
    PQExpBuffer query;
    PQExpBuffer target;
 
+   /* do nothing, if --no-comments is supplied */
+   if (dopt->no_comments)
+       return;
+
    /* Comments are SCHEMA not data */
    if (dopt->dataOnly)
        return;
    int         i_attname;
    int         i_attnum;
 
+   /* do nothing, if --no-comments is supplied */
+   if (fout->dopt->no_comments)
+       return;
+
    query = createPQExpBuffer();
 
    appendPQExpBuffer(query,
 
 static int inserts = 0;
 static int no_tablespaces = 0;
 static int use_setsessauth = 0;
+static int no_comments = 0;
 static int no_publications = 0;
 static int no_security_labels = 0;
 static int no_subscriptions = 0;
        {"load-via-partition-root", no_argument, &load_via_partition_root, 1},
        {"role", required_argument, NULL, 3},
        {"use-set-session-authorization", no_argument, &use_setsessauth, 1},
+       {"no-comments", no_argument, &no_comments, 1},
        {"no-publications", no_argument, &no_publications, 1},
        {"no-role-passwords", no_argument, &no_role_passwords, 1},
        {"no-security-labels", no_argument, &no_security_labels, 1},
        appendPQExpBufferStr(pgdumpopts, " --load-via-partition-root");
    if (use_setsessauth)
        appendPQExpBufferStr(pgdumpopts, " --use-set-session-authorization");
+   if (no_comments)
+       appendPQExpBufferStr(pgdumpopts, " --no-comments");
    if (no_publications)
        appendPQExpBufferStr(pgdumpopts, " --no-publications");
    if (no_security_labels)
    printf(_("  --disable-triggers           disable triggers during data-only restore\n"));
    printf(_("  --if-exists                  use IF EXISTS when dropping objects\n"));
    printf(_("  --inserts                    dump data as INSERT commands, rather than COPY\n"));
+   printf(_("  --no-comments                do not dump comments\n"));
    printf(_("  --no-publications            do not dump publications\n"));
    printf(_("  --no-role-passwords          do not dump passwords for roles\n"));
    printf(_("  --no-security-labels         do not dump security label assignments\n"));
 
        appendPQExpBufferStr(buf, ";\n");
 
-       if (!PQgetisnull(res, i, i_rolcomment))
+       if (!no_comments && !PQgetisnull(res, i, i_rolcomment))
        {
            appendPQExpBuffer(buf, "COMMENT ON ROLE %s IS ", fmtId(rolename));
            appendStringLiteralConn(buf, PQgetvalue(res, i, i_rolcomment), conn);
            exit_nicely(1);
        }
 
-       if (spccomment && strlen(spccomment))
+       if (!no_comments && spccomment && spccomment[0] != '\0')
        {
            appendPQExpBuffer(buf, "COMMENT ON TABLESPACE %s IS ", fspcname);
            appendStringLiteralConn(buf, spccomment, conn);
 
    static int  no_data_for_failed_tables = 0;
    static int  outputNoTablespaces = 0;
    static int  use_setsessauth = 0;
+   static int  no_comments = 0;
    static int  no_publications = 0;
    static int  no_security_labels = 0;
    static int  no_subscriptions = 0;
        {"section", required_argument, NULL, 3},
        {"strict-names", no_argument, &strict_names, 1},
        {"use-set-session-authorization", no_argument, &use_setsessauth, 1},
+       {"no-comments", no_argument, &no_comments, 1},
        {"no-publications", no_argument, &no_publications, 1},
        {"no-security-labels", no_argument, &no_security_labels, 1},
        {"no-subscriptions", no_argument, &no_subscriptions, 1},
    opts->noDataForFailedTables = no_data_for_failed_tables;
    opts->noTablespace = outputNoTablespaces;
    opts->use_setsessauth = use_setsessauth;
+   opts->no_comments = no_comments;
    opts->no_publications = no_publications;
    opts->no_security_labels = no_security_labels;
    opts->no_subscriptions = no_subscriptions;
    printf(_("  --if-exists                  use IF EXISTS when dropping objects\n"));
    printf(_("  --no-data-for-failed-tables  do not restore data of tables that could not be\n"
             "                               created\n"));
+   printf(_("  --no-comments                do not dump comments\n"));
    printf(_("  --no-publications            do not restore publications\n"));
    printf(_("  --no-security-labels         do not restore security labels\n"));
    printf(_("  --no-subscriptions           do not restore subscriptions\n"));