diff options
-rw-r--r-- | doc/src/sgml/indices.sgml | 9 | ||||
-rw-r--r-- | doc/src/sgml/ref/psql-ref.sgml | 38 | ||||
-rw-r--r-- | src/bin/psql/describe.c | 28 |
3 files changed, 48 insertions, 27 deletions
diff --git a/doc/src/sgml/indices.sgml b/doc/src/sgml/indices.sgml index 28adaba72d0..671299ff059 100644 --- a/doc/src/sgml/indices.sgml +++ b/doc/src/sgml/indices.sgml @@ -1410,6 +1410,15 @@ SELECT am.amname AS index_method, ORDER BY index_method, opfamily_name, opfamily_operator; </programlisting> </para> + + <tip> + <para> + <xref linkend="app-psql"/> has + commands <command>\dAc</command>, <command>\dAf</command>, + and <command>\dAo</command>, which provide slightly more sophisticated + versions of these queries. + </para> + </tip> </sect1> diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index 13179e845da..fc16e6c0c41 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1245,13 +1245,13 @@ testdb=> <listitem> <para> Lists operator classes - (see <xref linkend="catalog-pg-opclass"/>). + (see <xref linkend="xindex-opclass"/>). If <replaceable class="parameter">access-method-pattern</replaceable> is specified, only operator classes associated with access methods whose - names match the pattern are listed. + names match that pattern are listed. If <replaceable class="parameter">input-type-pattern</replaceable> is specified, only operator classes associated with input types whose - names match the pattern are listed. + names match that pattern are listed. If <literal>+</literal> is appended to the command name, each operator class is listed with its associated operator family and owner. </para> @@ -1268,13 +1268,13 @@ testdb=> <listitem> <para> Lists operator families - (see <xref linkend="catalog-pg-opfamily"/>). + (see <xref linkend="xindex-opfamily"/>). If <replaceable class="parameter">access-method-pattern</replaceable> is specified, only operator families associated with access methods whose - names match the pattern are listed. + names match that pattern are listed. If <replaceable class="parameter">input-type-pattern</replaceable> is specified, only operator families associated with input types whose - names match the pattern are listed. + names match that pattern are listed. If <literal>+</literal> is appended to the command name, each operator family is listed with its owner. </para> @@ -1292,15 +1292,15 @@ testdb=> <listitem> <para> Lists operators associated with operator families - (<xref linkend="catalog-pg-amop"/>). + (see <xref linkend="xindex-strategies"/>). If <replaceable class="parameter">access-method-pattern</replaceable> is specified, only members of operator families associated with access - methods whose names match the pattern are listed. - If <replaceable class="parameter">input-type-pattern</replaceable> - is specified, only members of operator families whose names match the + methods whose names match that pattern are listed. + If <replaceable class="parameter">operator-family-pattern</replaceable> + is specified, only members of operator families whose names match that pattern are listed. If <literal>+</literal> is appended to the command name, each operator - is listed with its strategy number, purpose and sort operator family. + is listed with its sort operator family (if it is an ordering operator). </para> </listitem> </varlistentry> @@ -1314,14 +1314,16 @@ testdb=> </term> <listitem> <para> - Lists functions associated with operator families - (<xref linkend="catalog-pg-amproc"/>). + Lists support functions associated with operator families + (see <xref linkend="xindex-support"/>). If <replaceable class="parameter">access-method-pattern</replaceable> - is specified, only members of operator families associated with access - methods whose names match the pattern are listed. - If <replaceable class="parameter">input-type-pattern</replaceable> - is specified, only members of operator families whose names match the - pattern are listed. + is specified, only functions of operator families associated with + access methods whose names match that pattern are listed. + If <replaceable class="parameter">operator-family-pattern</replaceable> + is specified, only functions of operator families whose names match + that pattern are listed. + If <literal>+</literal> is appended to the command name, functions are + displayed verbosely, with their actual parameter lists. </para> </listitem> </varlistentry> diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 3b870c3b17e..25d5b06de25 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -6050,7 +6050,7 @@ printACLColumn(PQExpBuffer buf, const char *colname) * \dAc * Lists operator classes * - * Takes an optional regexps to filter by index access method and type. + * Takes optional regexps to filter by index access method and input data type. */ bool listOperatorClasses(const char *access_method_pattern, @@ -6104,6 +6104,7 @@ listOperatorClasses(const char *access_method_pattern, " LEFT JOIN pg_catalog.pg_am am on am.oid = c.opcmethod\n" " LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.opcnamespace\n" " LEFT JOIN pg_catalog.pg_type t ON t.oid = c.opcintype\n" + " LEFT JOIN pg_catalog.pg_namespace tn ON tn.oid = t.typnamespace\n" ); if (verbose) appendPQExpBuffer(&buf, @@ -6114,8 +6115,13 @@ listOperatorClasses(const char *access_method_pattern, have_where = processSQLNamePattern(pset.db, &buf, access_method_pattern, false, false, NULL, "am.amname", NULL, NULL); if (type_pattern) + { + /* Match type name pattern against either internal or external name */ processSQLNamePattern(pset.db, &buf, type_pattern, have_where, false, - NULL, "t.typname", NULL, NULL); + "tn.nspname", "t.typname", + "pg_catalog.format_type(t.oid, NULL)", + "pg_catalog.pg_type_is_visible(t.oid)"); + } appendPQExpBufferStr(&buf, "ORDER BY 1, 2, 4;"); res = PSQLexec(buf.data); @@ -6139,7 +6145,7 @@ listOperatorClasses(const char *access_method_pattern, * \dAf * Lists operator families * - * Takes an optional regexps to filter by index access method and type. + * Takes optional regexps to filter by index access method and input data type. */ bool listOperatorFamilies(const char *access_method_pattern, @@ -6184,15 +6190,19 @@ listOperatorFamilies(const char *access_method_pattern, if (type_pattern) { appendPQExpBuffer(&buf, - "\n %s EXISTS (\n" + " %s EXISTS (\n" " SELECT 1\n" " FROM pg_catalog.pg_type t\n" " JOIN pg_catalog.pg_opclass oc ON oc.opcintype = t.oid\n" - " WHERE oc.opcfamily = f.oid", + " LEFT JOIN pg_catalog.pg_namespace tn ON tn.oid = t.typnamespace\n" + " WHERE oc.opcfamily = f.oid\n", have_where ? "AND" : "WHERE"); + /* Match type name pattern against either internal or external name */ processSQLNamePattern(pset.db, &buf, type_pattern, true, false, - NULL, "t.typname", NULL, NULL); - appendPQExpBuffer(&buf, ")"); + "tn.nspname", "t.typname", + "pg_catalog.format_type(t.oid, NULL)", + "pg_catalog.pg_type_is_visible(t.oid)"); + appendPQExpBuffer(&buf, " )\n"); } appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); @@ -6217,7 +6227,7 @@ listOperatorFamilies(const char *access_method_pattern, * \dAo * Lists operators of operator families * - * Takes an optional regexps to filter by index access method and operator + * Takes optional regexps to filter by index access method and operator * family. */ bool @@ -6304,7 +6314,7 @@ listOpFamilyOperators(const char *access_method_pattern, * \dAp * Lists support functions of operator families * - * Takes an optional regexps to filter by index access method and operator + * Takes optional regexps to filter by index access method and operator * family. */ bool |