<!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.170 2006/10/03 21:14:46 momjian Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.171 2006/10/09 23:31:29 tgl Exp $
PostgreSQL documentation
-->
</variablelist>
</para>
+ <refsect3 id="APP-PSQL-patterns">
+ <title id="APP-PSQL-patterns-title">Patterns</title>
+
+ <indexterm>
+ <primary>patterns</primary>
+ <secondary>in psql and pg_dump</secondary>
+ </indexterm>
+
<para>
The various <literal>\d</> commands accept a <replaceable
class="parameter">pattern</replaceable> parameter to specify the
- object name(s) to be displayed. <literal>*</> means <quote>any
- sequence of characters</> and <literal>?</> means <quote>any single
- character</>. (This notation is comparable to Unix shell file name
- patterns.) Advanced users can also use regular-expression
- notations such as character classes, for example <literal>[0-9]</>
- to match <quote>any digit</>. To make any of these
- pattern-matching characters be interpreted literally, surround it
- with double quotes.
+ object name(s) to be displayed. In the simplest case, a pattern
+ is just the exact name of the object. The characters within a
+ pattern are normally folded to lower case, just as in SQL names;
+ for example, <literal>\dt FOO</> will display the table named
+ <literal>foo</>. As in SQL names, placing double quotes around
+ a pattern stops folding to lower case. Should you need to include
+ an actual double quote character in a pattern, write it as a pair
+ of double quotes within a double-quote sequence; again this is in
+ accord with the rules for SQL quoted identifiers. For example,
+ <literal>\dt "FOO""BAR"</> will display the table named
+ <literal>FOO"BAR</> (not <literal>foo"bar</>). Unlike the normal
+ rules for SQL names, you can put double quotes around just part
+ of a pattern, for instance <literal>\dt FOO"FOO"BAR</> will display
+ the table named <literal>fooFOObar</>.
+ </para>
+
+ <para>
+ Within a pattern, <literal>*</> matches any sequence of characters
+ (including no characters) and <literal>?</> matches any single character.
+ (This notation is comparable to Unix shell file name patterns.)
+ For example, <literal>\dt int*</> displays all tables whose names
+ begin with <literal>int</>. But within double quotes, <literal>*</>
+ and <literal>?</> lose these special meanings and are just matched
+ literally.
</para>
<para>
- A pattern that contains an (unquoted) dot is interpreted as a schema
+ A pattern that contains a dot (<literal>.</>) is interpreted as a schema
name pattern followed by an object name pattern. For example,
- <literal>\dt foo*.bar*</> displays all tables in schemas whose name
- starts with <literal>foo</> and whose table name
- starts with <literal>bar</>. If no dot appears, then the pattern
+ <literal>\dt foo*.bar*</> displays all tables whose table name
+ starts with <literal>bar</> that are in schemas whose schema name
+ starts with <literal>foo</>. When no dot appears, then the pattern
matches only objects that are visible in the current schema search path.
+ Again, a dot within double quotes loses its special meaning and is matched
+ literally.
+ </para>
+
+ <para>
+ Advanced users can use regular-expression notations such as character
+ classes, for example <literal>[0-9]</> to match any digit. All regular
+ expression special characters work as specified in
+ <xref linkend="functions-posix-regexp">, except for <literal>.</> which
+ is taken as a separator as mentioned above, <literal>*</> which is
+ translated to the regular-expression notation <literal>.*</>, and
+ <literal>?</> which is translated to <literal>.</>. You can emulate
+ these pattern characters at need by writing
+ <literal>?</> for <literal>.</>,
+ <literal>(<replaceable class="parameter">R</replaceable>+|)</literal> for
+ <literal><replaceable class="parameter">R</replaceable>*</literal>, or
+ <literal>(<replaceable class="parameter">R</replaceable>|)</literal> for
+ <literal><replaceable class="parameter">R</replaceable>?</literal>.
+ Remember that the pattern must match the whole name, unlike the usual
+ interpretation of regular expressions; write <literal>*</> at the beginning
+ and/or end if you don't wish the pattern to be anchored.
+ Note that within double quotes, all regular expression special characters
+ lose their special meanings and are matched literally. Also, the regular
+ expression special characters are matched literally in operator name
+ patterns (i.e., the argument of <literal>\do</>).
</para>
<para>
Whenever the <replaceable class="parameter">pattern</replaceable> parameter
is omitted completely, the <literal>\d</> commands display all objects
- that are visible in the current schema search path. To see all objects
- in the database, use the pattern <literal>*.*</>.
+ that are visible in the current schema search path — this is
+ equivalent to using the pattern <literal>*</>.
+ To see all objects in the database, use the pattern <literal>*.*</>.
</para>
+ </refsect3>
</refsect2>
<refsect2>