This patch makes psql's \d+ command indicate whether the table in
question contains OIDs or not. I didn't add this information to \d, on
the grounds that \d is more commonly used and few people will care
whether the table as OIDs. Example output:
nconway=# create table t1 () with oids;
CREATE TABLE
nconway=# create table t2 () without oids;
CREATE TABLE
nconway=# \d+ t1
Table "public.t1"
Column | Type | Modifiers | Description
--------+------+-----------+-------------
Contains OIDs: yes
nconway=# \d+ t2
Table "public.t2"
Column | Type | Modifiers | Description
--------+------+-----------+-------------
Contains OIDs: no
I also fixed a bunch of markup in the psql reference manual (which takes
up about 90% of the patch itself).
Barring any objections I'll apply this patch within 24 hours.
-Neil
Index: doc/src/sgml/perform.sgml
===================================================================
RCS file: /var/lib/cvs/pgsql-server/doc/src/sgml/perform.sgml,v
retrieving revision 1.43
diff -c -r1.43 perform.sgml
*** a/doc/src/sgml/perform.sgml 25 Mar 2004 18:57:57 -0000 1.43
--- b/doc/src/sgml/perform.sgml 21 Apr 2004 23:16:14 -0000
***************
*** 633,640 ****
<sect2 id="disable-autocommit">
<title>Disable Autocommit</title>
! <indexterm zone="disable-autocommit">
<primary>autocommit</primary>
</indexterm>
<para>
--- 633,641 ----
<sect2 id="disable-autocommit">
<title>Disable Autocommit</title>
! <indexterm>
<primary>autocommit</primary>
+ <secondary>bulk-loading data</secondary>
</indexterm>
<para>
Index: doc/src/sgml/ref/psql-ref.sgml
===================================================================
RCS file: /var/lib/cvs/pgsql-server/doc/src/sgml/ref/psql-ref.sgml,v
retrieving revision 1.112
diff -c -r1.112 psql-ref.sgml
*** a/doc/src/sgml/ref/psql-ref.sgml 21 Apr 2004 00:34:18 -0000 1.112
--- b/doc/src/sgml/ref/psql-ref.sgml 21 Apr 2004 23:24:03 -0000
***************
*** 637,643 ****
</varlistentry>
<varlistentry>
! <term><literal>\cd</literal> <optional><replaceable>directory</replaceable></optional></term>
<listitem>
<para>
Changes the current working directory to
--- 637,643 ----
</varlistentry>
<varlistentry>
! <term><literal>\cd [ <replaceable>directory</replaceable> ] </literal></term>
<listitem>
<para>
Changes the current working directory to
***************
*** 654,660 ****
</varlistentry>
<varlistentry>
! <term><literal>\C</literal> [ <replaceable class="parameter">title</replaceable> ]</term>
<listitem>
<para>
Sets the title of any tables being printed as the result of a
--- 654,660 ----
</varlistentry>
<varlistentry>
! <term><literal>\C [ <replaceable class="parameter">title</replaceable> ]</literal></term>
<listitem>
<para>
Sets the title of any tables being printed as the result of a
***************
*** 669,675 ****
</varlistentry>
<varlistentry>
! <term><literal>\connect</literal> (or <literal>\c</literal>) [ <replaceable class="parameter">dbname</replaceable> [ <replaceable class="parameter">username</replaceable> ] ]</term>
<listitem>
<para>
Establishes a connection to a new database and/or under a user
--- 669,675 ----
</varlistentry>
<varlistentry>
! <term><literal>\connect</literal> (or <literal>\c</literal>) <literal>[ <replaceable class="parameter">dbname</replaceable> [ <replaceable class="parameter">username</replaceable> ] ]</literal></term>
<listitem>
<para>
Establishes a connection to a new database and/or under a user
***************
*** 707,720 ****
[ ( <replaceable class="parameter">column_list</replaceable> ) ]
{ <literal>from</literal> | <literal>to</literal> }
{ <replaceable class="parameter">filename</replaceable> | stdin | stdout | pstdin | pstdout }
! [ <literal>with</literal> ]
! [ <literal>oids</literal> ]
! [ <literal>delimiter [as] </literal> '<replaceable class="parameter">character</replaceable>' ]
! [ <literal>null [as] </literal> '<replaceable class="parameter">string</replaceable>' ]</literal>
! [ <literal>csv [ quote [as] </literal> '<replaceable class="parameter">character</replaceable>' ]
! [ <literal>escape [as] </literal> '<replaceable class="parameter">character</replaceable>' ]
! [ <literal>force quote</> <replaceable class="parameter">column_list</replaceable> ]
! [ <literal>force not null</> <replaceable class="parameter">column_list</replaceable> ] ]
</term>
<listitem>
--- 707,720 ----
[ ( <replaceable class="parameter">column_list</replaceable> ) ]
{ <literal>from</literal> | <literal>to</literal> }
{ <replaceable class="parameter">filename</replaceable> | stdin | stdout | pstdin | pstdout }
! [ with ]
! [ oids ]
! [ delimiter [ as ] '<replaceable class="parameter">character</replaceable>' ]
! [ null [ as ] '<replaceable class="parameter">string</replaceable>' ]
! [ csv [ quote [ as ] '<replaceable class="parameter">character</replaceable>' ]
! [ escape [ as ] '<replaceable class="parameter">character</replaceable>' ]
! [ force quote <replaceable class="parameter">column_list</replaceable> ]
! [ force not null <replaceable class="parameter">column_list</replaceable> ] ]</literal>
</term>
<listitem>
***************
*** 776,782 ****
</varlistentry>
<varlistentry>
! <term><literal>\d</literal> [ <replaceable class="parameter">pattern</replaceable> ]</term>
<listitem>
<para>
--- 776,783 ----
</varlistentry>
<varlistentry>
! <term><literal>\d [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
! <term><literal>\d+ [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
<listitem>
<para>
***************
*** 790,797 ****
</para>
<para>
! The command form <literal>\d+</literal> is identical, but any
! comments associated with the table columns are shown as well.
</para>
<note>
--- 791,800 ----
</para>
<para>
! The command form <literal>\d+</literal> is identical, except that
! more information is displayed: any comments associated with the
! columns of the table are shown, as is the presence of OIDs in the
! table.
</para>
<note>
***************
*** 807,813 ****
</varlistentry>
<varlistentry>
! <term><literal>\da</literal> [ <replaceable class="parameter">pattern</replaceable> ]</term>
<listitem>
<para>
--- 810,816 ----
</varlistentry>
<varlistentry>
! <term><literal>\da [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
<listitem>
<para>
***************
*** 821,827 ****
<varlistentry>
! <term><literal>\dc</literal> [ <replaceable class="parameter">pattern</replaceable> ]</term>
<listitem>
<para>
Lists all available conversions between character-set encodings.
--- 824,830 ----
<varlistentry>
! <term><literal>\dc [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
<listitem>
<para>
Lists all available conversions between character-set encodings.
***************
*** 844,850 ****
<varlistentry>
! <term><literal>\dd</literal> [ <replaceable class="parameter">pattern</replaceable> ]</term>
<listitem>
<para>
Shows the descriptions of objects matching the <replaceable
--- 847,853 ----
<varlistentry>
! <term><literal>\dd [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
<listitem>
<para>
Shows the descriptions of objects matching the <replaceable
***************
*** 865,879 ****
</para>
<para>
! Descriptions for objects can be created with the
! <command>COMMENT</command> <acronym>SQL</acronym> command.
! </para>
</listitem>
</varlistentry>
<varlistentry>
! <term><literal>\dD</literal> [ <replaceable class="parameter">pattern</replaceable> ]</term>
<listitem>
<para>
Lists all available domains. If <replaceable
--- 868,883 ----
</para>
<para>
! Descriptions for objects can be created with the <xref
! linkend="sql-comment" endterm="sql-comment-title">
! <acronym>SQL</acronym> command.
! </para>
</listitem>
</varlistentry>
<varlistentry>
! <term><literal>\dD [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
<listitem>
<para>
Lists all available domains. If <replaceable
***************
*** 886,891 ****
--- 890,896 ----
<varlistentry>
<term><literal>\df [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
+ <term><literal>\df+ [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
<listitem>
<para>
***************
*** 919,926 ****
<term><literal>\dg [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
<listitem>
<para>
! Lists all database groups or only those that match <replaceable
! class="parameter">pattern</replaceable>.
</para>
</listitem>
</varlistentry>
--- 924,932 ----
<term><literal>\dg [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
<listitem>
<para>
! Lists all database groups. If <replaceable
! class="parameter">pattern</replaceable> is specified, only
! those groups whose names match the pattern are listed.
</para>
</listitem>
</varlistentry>
***************
*** 931,944 ****
<listitem>
<para>
! This is not the actual command name: the letters i, s, t, v, S
! stand for index, sequence, table, view, and system table,
! respectively. You can specify any or all of these letters, in any
! order, to obtain a listing of all the matching objects. The letter
! S restricts the listing to system objects; without S, only non-system
! objects are shown.
! If <literal>+</literal> is appended to the command name, each object is
! listed with its associated description, if any.
</para>
<para>
--- 937,952 ----
<listitem>
<para>
! This is not the actual command name: the letters
! <literal>i</literal>, <literal>s</literal>, <literal>t</literal>,
! <literal>v</literal>, <literal>S</literal> stand for index,
! sequence, table, view, and system table, respectively. You can
! specify any or all of these letters, in any order, to obtain a
! listing of all the matching objects. The letter S restricts the
! listing to system objects; without <literal>S</literal>, only
! non-system objects are shown. If <literal>+</literal> is appended
! to the command name, each object is listed with its associated
! description, if any.
</para>
<para>
***************
*** 961,967 ****
<varlistentry>
! <term><literal>\dn</literal> [ <replaceable class="parameter">pattern</replaceable> ]</term>
<listitem>
<para>
--- 969,975 ----
<varlistentry>
! <term><literal>\dn [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
<listitem>
<para>
***************
*** 987,993 ****
<varlistentry>
! <term><literal>\dp</literal> [ <replaceable class="parameter">pattern</replaceable> ]</term>
<listitem>
<para>
Produces a list of all available tables, views and sequences with their
--- 995,1001 ----
<varlistentry>
! <term><literal>\dp [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
<listitem>
<para>
Produces a list of all available tables, views and sequences with their
***************
*** 1008,1013 ****
--- 1016,1022 ----
<varlistentry>
<term><literal>\dT [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
+ <term><literal>\dT+ [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
<listitem>
<para>
Lists all data types or only those that match <replaceable
***************
*** 1030,1036 ****
<varlistentry>
! <term><literal>\edit</literal> (or <literal>\e</literal>) [ <replaceable class="parameter">filename</replaceable> ]</term>
<listitem>
<para>
--- 1039,1045 ----
<varlistentry>
! <term><literal>\edit</literal> (or <literal>\e</literal>) <literal>[ <replaceable class="parameter">filename</replaceable> ]</literal></term>
<listitem>
<para>
***************
*** 1064,1070 ****
<varlistentry>
! <term><literal>\echo</literal> <replaceable class="parameter">text</replaceable> [ ... ]</term>
<listitem>
<para>
Prints the arguments to the standard output, separated by one
--- 1073,1079 ----
<varlistentry>
! <term><literal>\echo <replaceable class="parameter">text</replaceable> [ ... ]</literal></term>
<listitem>
<para>
Prints the arguments to the standard output, separated by one
***************
*** 1090,1096 ****
<varlistentry>
! <term><literal>\encoding</literal> [ <replaceable class="parameter">encoding</replaceable> ]</term>
<listitem>
<para>
--- 1099,1105 ----
<varlistentry>
! <term><literal>\encoding [ <replaceable class="parameter">encoding</replaceable> ]</literal></term>
<listitem>
<para>
***************
*** 1102,1108 ****
<varlistentry>
! <term><literal>\f</literal> [ <replaceable class="parameter">string</replaceable> ]</term>
<listitem>
<para>
--- 1111,1117 ----
<varlistentry>
! <term><literal>\f [ <replaceable class="parameter">string</replaceable> ]</literal></term>
<listitem>
<para>
***************
*** 1133,1139 ****
</varlistentry>
<varlistentry>
! <term><literal>\help</literal> (or <literal>\h</literal>) [ <replaceable class="parameter">command</replaceable> ]</term>
<listitem>
<para>
Gives syntax help on the specified <acronym>SQL</acronym>
--- 1142,1148 ----
</varlistentry>
<varlistentry>
! <term><literal>\help</literal> (or <literal>\h</literal>) <literal>[ <replaceable class="parameter">command</replaceable> ]</literal></term>
<listitem>
<para>
Gives syntax help on the specified <acronym>SQL</acronym>
***************
*** 1171,1177 ****
<varlistentry>
! <term><literal>\i</literal> <replaceable class="parameter">filename</replaceable></term>
<listitem>
<para>
Reads input from the file <replaceable
--- 1180,1186 ----
<varlistentry>
! <term><literal>\i <replaceable class="parameter">filename</replaceable></literal></term>
<listitem>
<para>
Reads input from the file <replaceable
***************
*** 1191,1208 ****
<varlistentry>
<term><literal>\l</literal> (or <literal>\list</literal>)</term>
<listitem>
<para>
List the names, owners, and character set encodings of all the databases in
! the server. Append a <literal>+</literal> to the command name to
! see any descriptions for the databases as well.
</para>
</listitem>
</varlistentry>
<varlistentry>
! <term><literal>\lo_export</literal> <replaceable class="parameter">loid</replaceable> <replaceable class="parameter">filename</replaceable></term>
<listitem>
<para>
--- 1200,1218 ----
<varlistentry>
<term><literal>\l</literal> (or <literal>\list</literal>)</term>
+ <term><literal>\l+</literal> (or <literal>\list+</literal>)</term>
<listitem>
<para>
List the names, owners, and character set encodings of all the databases in
! the server. If <literal>+</literal> is appended to the command
! name, database descriptions are also displayed.
</para>
</listitem>
</varlistentry>
<varlistentry>
! <term><literal>\lo_export <replaceable class="parameter">loid</replaceable> <replaceable class="parameter">filename</replaceable></literal></term>
<listitem>
<para>
***************
*** 1226,1232 ****
<varlistentry>
! <term><literal>\lo_import</literal> <replaceable class="parameter">filename</replaceable> [ <replaceable class="parameter">comment</replaceable> ]</term>
<listitem>
<para>
--- 1236,1242 ----
<varlistentry>
! <term><literal>\lo_import <replaceable class="parameter">filename</replaceable> [ <replaceable class="parameter">comment</replaceable> ]</literal></term>
<listitem>
<para>
***************
*** 1265,1271 ****
</varlistentry>
<varlistentry>
! <term><literal>\lo_unlink</literal> <replaceable class="parameter">loid</replaceable></term>
<listitem>
<para>
--- 1275,1281 ----
</varlistentry>
<varlistentry>
! <term><literal>\lo_unlink <replaceable class="parameter">loid</replaceable></literal></term>
<listitem>
<para>
***************
*** 1325,1331 ****
<varlistentry>
! <term><literal>\pset</literal> <replaceable class="parameter">parameter</replaceable> [ <replaceable class="parameter">value</replaceable> ]</term>
<listitem>
<para>
--- 1335,1341 ----
<varlistentry>
! <term><literal>\pset <replaceable class="parameter">parameter</replaceable> [ <replaceable class="parameter">value</replaceable> ]</literal></term>
<listitem>
<para>
***************
*** 1458,1464 ****
</varlistentry>
<varlistentry>
! <term><literal>title</literal> [ <replaceable class="parameter">text</replaceable> ]</term>
<listitem>
<para>
Sets the table title for any subsequently printed tables. This
--- 1468,1474 ----
</varlistentry>
<varlistentry>
! <term><literal>title [ <replaceable class="parameter">text</replaceable> ]</literal></term>
<listitem>
<para>
Sets the table title for any subsequently printed tables. This
***************
*** 1469,1475 ****
</varlistentry>
<varlistentry>
! <term><literal>tableattr</literal> (or <literal>T</literal>) [ <replaceable class="parameter">text</replaceable> ]</term>
<listitem>
<para>
Allows you to specify any attributes to be placed inside the
--- 1479,1485 ----
</varlistentry>
<varlistentry>
! <term><literal>tableattr</literal> (or <literal>T</literal>) <literal>[ <replaceable class="parameter">text</replaceable> ]</literal></term>
<listitem>
<para>
Allows you to specify any attributes to be placed inside the
***************
*** 1545,1551 ****
<varlistentry>
! <term><literal>\qecho</literal> <replaceable class="parameter">text</replaceable> [ ... ] </term>
<listitem>
<para>
This command is identical to <command>\echo</command> except
--- 1555,1561 ----
<varlistentry>
! <term><literal>\qecho <replaceable class="parameter">text</replaceable> [ ... ] </literal></term>
<listitem>
<para>
This command is identical to <command>\echo</command> except
***************
*** 1567,1573 ****
<varlistentry>
! <term><literal>\s</literal> [ <replaceable class="parameter">filename</replaceable> ]</term>
<listitem>
<para>
Print or save the command line history to <replaceable
--- 1577,1583 ----
<varlistentry>
! <term><literal>\s [ <replaceable class="parameter">filename</replaceable> ]</literal></term>
<listitem>
<para>
Print or save the command line history to <replaceable
***************
*** 1591,1597 ****
<varlistentry>
! <term><literal>\set</literal> [ <replaceable class="parameter">name</replaceable> [ <replaceable class="parameter">value</replaceable> [ ... ]]]</term>
<listitem>
<para>
--- 1601,1607 ----
<varlistentry>
! <term><literal>\set [ <replaceable class="parameter">name</replaceable> [ <replaceable class="parameter">value</replaceable> [ ... ] ] ]</literal></term>
<listitem>
<para>
***************
*** 1640,1646 ****
<varlistentry>
! <term><literal>\T</literal> <replaceable class="parameter">table_options</replaceable></term>
<listitem>
<para>
Allows you to specify attributes to be placed within the
--- 1650,1656 ----
<varlistentry>
! <term><literal>\T <replaceable class="parameter">table_options</replaceable></literal></term>
<listitem>
<para>
Allows you to specify attributes to be placed within the
***************
*** 1687,1693 ****
<varlistentry>
! <term><literal>\z</literal> [ <replaceable class="parameter">pattern</replaceable> ]</term>
<listitem>
<para>
Produces a list of all available tables, views and sequences with their
--- 1697,1703 ----
<varlistentry>
! <term><literal>\z [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
<listitem>
<para>
Produces a list of all available tables, views and sequences with their
***************
*** 1712,1718 ****
<varlistentry>
! <term><literal>\!</literal> [ <replaceable class="parameter">command</replaceable> ]</term>
<listitem>
<para>
Escapes to a separate Unix shell or executes the Unix command
--- 1722,1728 ----
<varlistentry>
! <term><literal>\! [ <replaceable class="parameter">command</replaceable> ]</literal></term>
<listitem>
<para>
Escapes to a separate Unix shell or executes the Unix command
***************
*** 1831,1836 ****
--- 1841,1850 ----
<variablelist>
<varlistentry>
+ <indexterm>
+ <primary>autocommit</primary>
+ <secondary>psql</secondary>
+ </indexterm>
<term><varname>AUTOCOMMIT</varname></term>
<listitem>
<para>
Index: src/bin/psql/describe.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/bin/psql/describe.c,v
retrieving revision 1.96
diff -c -r1.96 describe.c
*** a/src/bin/psql/describe.c 6 Apr 2004 04:05:17 -0000 1.96
--- b/src/bin/psql/describe.c 21 Apr 2004 22:36:09 -0000
***************
*** 549,554 ****
--- 549,556 ----
*
* This routine finds the tables to be displayed, and calls
* describeOneTableDetails for each one.
+ *
+ * verbose: if true, this is \d+
*/
bool
describeTableDetails(const char *pattern, bool verbose)
***************
*** 635,645 ****
int numrows = 0;
struct
{
- bool hasindex;
- char relkind;
int16 checks;
int16 triggers;
bool hasrules;
} tableinfo;
bool show_modifiers = false;
bool retval;
--- 637,648 ----
int numrows = 0;
struct
{
int16 checks;
int16 triggers;
+ char relkind;
+ bool hasindex;
bool hasrules;
+ bool hasoids;
} tableinfo;
bool show_modifiers = false;
bool retval;
***************
*** 652,658 ****
/* Get general table info */
printfPQExpBuffer(&buf,
! "SELECT relhasindex, relkind, relchecks, reltriggers, relhasrules\n"
"FROM pg_catalog.pg_class WHERE oid = '%s'",
oid);
res = PSQLexec(buf.data, false);
--- 655,661 ----
/* Get general table info */
printfPQExpBuffer(&buf,
! "SELECT relhasindex, relkind, relchecks, reltriggers, relhasrules, relhasoids\n"
"FROM pg_catalog.pg_class WHERE oid = '%s'",
oid);
res = PSQLexec(buf.data, false);
***************
*** 669,679 ****
}
/* FIXME: check for null pointers here? */
- tableinfo.hasindex = strcmp(PQgetvalue(res, 0, 0), "t") == 0;
- tableinfo.relkind = *(PQgetvalue(res, 0, 1));
tableinfo.checks = atoi(PQgetvalue(res, 0, 2));
tableinfo.triggers = atoi(PQgetvalue(res, 0, 3));
tableinfo.hasrules = strcmp(PQgetvalue(res, 0, 4), "t") == 0;
PQclear(res);
headers[0] = _("Column");
--- 672,683 ----
}
/* FIXME: check for null pointers here? */
tableinfo.checks = atoi(PQgetvalue(res, 0, 2));
tableinfo.triggers = atoi(PQgetvalue(res, 0, 3));
+ tableinfo.relkind = *(PQgetvalue(res, 0, 1));
+ tableinfo.hasindex = strcmp(PQgetvalue(res, 0, 0), "t") == 0;
tableinfo.hasrules = strcmp(PQgetvalue(res, 0, 4), "t") == 0;
+ tableinfo.hasoids = strcmp(PQgetvalue(res, 0, 5), "t") == 0;
PQclear(res);
headers[0] = _("Column");
***************
*** 1185,1190 ****
--- 1189,1201 ----
footers[count_footers++] = pg_strdup(buf.data);
}
+ if (verbose)
+ {
+ char *s = _("Contains OIDs");
+ printfPQExpBuffer(&buf, "%s: %s", s, (tableinfo.hasoids ? "yes" : "no"));
+ footers[count_footers++] = pg_strdup(buf.data);
+ }
+
/* end of list marker */
footers[count_footers] = NULL;
---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly