Re: createuser/dropuser username - Mailing list pgsql-docs

From Bruce Momjian
Subject Re: createuser/dropuser username
Date
Msg-id 201109092348.p89NmMu12417@momjian.us
Whole thread Raw
In response to Re: createuser/dropuser username  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: createuser/dropuser username
Re: createuser/dropuser username
List pgsql-docs
Tom Lane wrote:
> Bruce Momjian <bruce@momjian.us> writes:
> > Alvaro Herrera wrote:
> >> Excerpts from Bruce Momjian's message of jue sep 08 11:52:04 -0300 2011:
> >>> I started going in that direction and stopped because of this example
> >>> in our docs:
> >>> vacuumdb --analyze --verbose --table 'foo(bar)' xyzzy
>
> >> Maybe do it unless there are parens.
>
> > OK, let me give that a try.
>
> I've been thinking more about this, and realized that there is one
> killer argument in favor of not auto-quoting, at least for arguments
> that represent table names: if we quote, there is no way to specify
> a schema-qualified name.
>
> I'm too lazy to troll the archives to verify this, but I am moderately
> sure that this point never came up in the original discussions where
> we concluded that auto-quoting command-line arguments was a good policy,
> because that was before we'd implemented schemas.
>
> So what I'm thinking right now is that we indeed should not auto-quote
> table- or index-name arguments.  However, usernames and database names
> taken from the command line are still going to be auto-quoted, because
> that's how things work in connection requests.  Is it going to be
> confusing that some things are quoted and some not?
>
> (Of course, any such change would be non-backwards-compatible and would
> have to be suitably documented and release-noted.)
>
> The backwards-compatible alternative would be to invent additional
> schema option arguments so that you could write something like
> "reindexdb --schema foo --table bar", but that seems pretty darn ugly.

I have implemented what you suggested above, with improved wording.
Patch attached.

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +
diff --git a/doc/src/sgml/ref/createdb.sgml b/doc/src/sgml/ref/createdb.sgml
new file mode 100644
index 3e50173..1516f33
*** a/doc/src/sgml/ref/createdb.sgml
--- b/doc/src/sgml/ref/createdb.sgml
*************** PostgreSQL documentation
*** 90,96 ****
        <term><option>--tablespace=<replaceable class="parameter">tablespace</replaceable></></term>
        <listitem>
         <para>
!         Specifies the default tablespace for the database.
         </para>
        </listitem>
       </varlistentry>
--- 90,97 ----
        <term><option>--tablespace=<replaceable class="parameter">tablespace</replaceable></></term>
        <listitem>
         <para>
!         Specifies the default tablespace for the database. (This name
!         is processed as a double-quoted identifier.)
         </para>
        </listitem>
       </varlistentry>
*************** PostgreSQL documentation
*** 154,159 ****
--- 155,161 ----
        <listitem>
         <para>
          Specifies the database user who will own the new database.
+         (This name is processed as a double-quoted identifier.)
         </para>
        </listitem>
       </varlistentry>
*************** PostgreSQL documentation
*** 163,169 ****
        <term><option>--template=<replaceable class="parameter">template</replaceable></></term>
        <listitem>
         <para>
!         Specifies the template database from which to build this database.
         </para>
        </listitem>
       </varlistentry>
--- 165,172 ----
        <term><option>--template=<replaceable class="parameter">template</replaceable></></term>
        <listitem>
         <para>
!         Specifies the template database from which to build this
!         database.  (This name is processed as a double-quoted identifier.)
         </para>
        </listitem>
       </varlistentry>
diff --git a/doc/src/sgml/ref/createlang.sgml b/doc/src/sgml/ref/createlang.sgml
new file mode 100644
index f01f298..d28cfb7
*** a/doc/src/sgml/ref/createlang.sgml
--- b/doc/src/sgml/ref/createlang.sgml
*************** PostgreSQL documentation
*** 70,76 ****
        <term><replaceable class="parameter">langname</replaceable></term>
        <listitem>
         <para>
!         Specifies the name of the procedural language to be installed.
         </para>
        </listitem>
       </varlistentry>
--- 70,77 ----
        <term><replaceable class="parameter">langname</replaceable></term>
        <listitem>
         <para>
!         Specifies the name of the procedural language to be
!         installed.  (This name is lower-cased.)
         </para>
        </listitem>
       </varlistentry>
diff --git a/doc/src/sgml/ref/droplang.sgml b/doc/src/sgml/ref/droplang.sgml
new file mode 100644
index 04c3a60..e5d02aa
*** a/doc/src/sgml/ref/droplang.sgml
--- b/doc/src/sgml/ref/droplang.sgml
*************** PostgreSQL documentation
*** 73,78 ****
--- 73,79 ----
        <listitem>
         <para>
          Specifies the name of the procedural language to be removed.
+         (This name is lower-cased.)
         </para>
        </listitem>
       </varlistentry>
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
new file mode 100644
index 9ae8000..5fd6410
*** a/doc/src/sgml/reference.sgml
--- b/doc/src/sgml/reference.sgml
***************
*** 198,203 ****
--- 198,211 ----
      applications is that they can be run on any host, independent of
      where the database server resides.
     </para>
+
+    <para>
+     When specified on the command line, user and databases names have
+     their case preserved — the presence of spaces or special
+     characters might require quoting.  Table names and other identifiers
+     do not have their case preserved, except where documented, and
+     might require quoting.
+    </para>
    </partintro>

     &clusterdb;
diff --git a/src/bin/scripts/clusterdb.c b/src/bin/scripts/clusterdb.c
new file mode 100644
index f4c317a..3742091
*** a/src/bin/scripts/clusterdb.c
--- b/src/bin/scripts/clusterdb.c
*************** cluster_one_database(const char *dbname,
*** 177,183 ****
      if (verbose)
          appendPQExpBuffer(&sql, " VERBOSE");
      if (table)
!         appendPQExpBuffer(&sql, " %s", fmtId(table));
      appendPQExpBuffer(&sql, ";\n");

      conn = connectDatabase(dbname, host, port, username, prompt_password, progname);
--- 177,183 ----
      if (verbose)
          appendPQExpBuffer(&sql, " VERBOSE");
      if (table)
!         appendPQExpBuffer(&sql, " %s", table);
      appendPQExpBuffer(&sql, ";\n");

      conn = connectDatabase(dbname, host, port, username, prompt_password, progname);
diff --git a/src/bin/scripts/createlang.c b/src/bin/scripts/createlang.c
new file mode 100644
index c2153db..2f667e8
*** a/src/bin/scripts/createlang.c
--- b/src/bin/scripts/createlang.c
*************** main(int argc, char *argv[])
*** 164,169 ****
--- 164,170 ----
          exit(1);
      }

+     /* lower case language name */
      for (p = langname; *p; p++)
          if (*p >= 'A' && *p <= 'Z')
              *p += ('a' - 'A');
diff --git a/src/bin/scripts/droplang.c b/src/bin/scripts/droplang.c
new file mode 100644
index 7fadee0..f136a76
*** a/src/bin/scripts/droplang.c
--- b/src/bin/scripts/droplang.c
*************** main(int argc, char *argv[])
*** 165,170 ****
--- 165,171 ----
          exit(1);
      }

+     /* lower case language name */
      for (p = langname; *p; p++)
          if (*p >= 'A' && *p <= 'Z')
              *p += ('a' - 'A');
diff --git a/src/bin/scripts/reindexdb.c b/src/bin/scripts/reindexdb.c
new file mode 100644
index 53fff01..caeed75
*** a/src/bin/scripts/reindexdb.c
--- b/src/bin/scripts/reindexdb.c
*************** reindex_one_database(const char *name, c
*** 223,231 ****

      appendPQExpBuffer(&sql, "REINDEX");
      if (strcmp(type, "TABLE") == 0)
!         appendPQExpBuffer(&sql, " TABLE %s", fmtId(name));
      else if (strcmp(type, "INDEX") == 0)
!         appendPQExpBuffer(&sql, " INDEX %s", fmtId(name));
      else if (strcmp(type, "DATABASE") == 0)
          appendPQExpBuffer(&sql, " DATABASE %s", fmtId(name));
      appendPQExpBuffer(&sql, ";\n");
--- 223,231 ----

      appendPQExpBuffer(&sql, "REINDEX");
      if (strcmp(type, "TABLE") == 0)
!         appendPQExpBuffer(&sql, " TABLE %s", name);
      else if (strcmp(type, "INDEX") == 0)
!         appendPQExpBuffer(&sql, " INDEX %s", name);
      else if (strcmp(type, "DATABASE") == 0)
          appendPQExpBuffer(&sql, " DATABASE %s", fmtId(name));
      appendPQExpBuffer(&sql, ";\n");

pgsql-docs by date:

Previous
From: Shigehiro Honda
Date:
Subject: typo on libpq.sgml
Next
From: Bruce Momjian
Date:
Subject: Re: ALTER TABLE doc small thing