diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index c666f714c3b449329cec36e684e47ee22925c2c9..7ed20e4dd9adba314ec515ee12029486c498de6b 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1199,12 +1199,13 @@ testdb=> <literal>n</>, <literal>t</>, or <literal>w</> to the command. If <replaceable class="parameter">pattern</replaceable> is specified, only - functions whose names match the pattern are shown. If the - form <literal>\df+</literal> is used, additional information - about each function, including security, volatility, language, source - code and description, is shown. By default, only user-created + functions whose names match the pattern are shown. + By default, only user-created objects are shown; supply a pattern or the <literal>S</literal> modifier to include system objects. + If the form <literal>\df+</literal> is used, additional information + about each function is shown, including security classification, + volatility, owner, language, source code and description. </para> <tip> @@ -1337,15 +1338,18 @@ testdb=> <varlistentry> - <term><literal>\do[S] [ <link linkend="APP-PSQL-patterns"><replaceable class="parameter">pattern</replaceable></link> ]</literal></term> + <term><literal>\do[S+] [ <link linkend="APP-PSQL-patterns"><replaceable class="parameter">pattern</replaceable></link> ]</literal></term> <listitem> <para> - Lists operators with their operand and return types. + Lists operators with their operand and result types. If <replaceable class="parameter">pattern</replaceable> is specified, only operators whose names match the pattern are listed. - By default, only user-created objects are shown; supply a + By default, only user-created objects are shown; supply a pattern or the <literal>S</literal> modifier to include system objects. + If <literal>+</literal> is appended to the command name, + additional information about each operator is shown, currently just + the name of the underlying function. </para> </listitem> </varlistentry> diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index f8572951f18b113c19fe1603fb4e12502116e4c3..49f389071a16d86598248fd9fe3e2eb962bbdd05 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -410,7 +410,7 @@ exec_command(const char *cmd, success = listSchemas(pattern, show_verbose, show_system); break; case 'o': - success = describeOperators(pattern, show_system); + success = describeOperators(pattern, show_verbose, show_system); break; case 'O': success = listCollations(pattern, show_verbose, show_system); diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index dedb0362d6687cd9681e41d91ee8104b9f06c2f7..0d4b151679a3b1169824d892084cfd32c9e5b0f3 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -577,9 +577,10 @@ describeTypes(const char *pattern, bool verbose, bool showSystem) /* \do + * Describe operators */ bool -describeOperators(const char *pattern, bool showSystem) +describeOperators(const char *pattern, bool verbose, bool showSystem) { PQExpBufferData buf; PGresult *res; @@ -605,16 +606,23 @@ describeOperators(const char *pattern, bool showSystem) " o.oprname AS \"%s\",\n" " CASE WHEN o.oprkind='l' THEN NULL ELSE pg_catalog.format_type(o.oprleft, NULL) END AS \"%s\",\n" " CASE WHEN o.oprkind='r' THEN NULL ELSE pg_catalog.format_type(o.oprright, NULL) END AS \"%s\",\n" - " pg_catalog.format_type(o.oprresult, NULL) AS \"%s\",\n" - " coalesce(pg_catalog.obj_description(o.oid, 'pg_operator'),\n" - " pg_catalog.obj_description(o.oprcode, 'pg_proc')) AS \"%s\"\n" - "FROM pg_catalog.pg_operator o\n" - " LEFT JOIN pg_catalog.pg_namespace n ON n.oid = o.oprnamespace\n", + " pg_catalog.format_type(o.oprresult, NULL) AS \"%s\",\n", gettext_noop("Schema"), gettext_noop("Name"), gettext_noop("Left arg type"), gettext_noop("Right arg type"), - gettext_noop("Result type"), + gettext_noop("Result type")); + + if (verbose) + appendPQExpBuffer(&buf, + " o.oprcode AS \"%s\",\n", + gettext_noop("Function")); + + appendPQExpBuffer(&buf, + " coalesce(pg_catalog.obj_description(o.oid, 'pg_operator'),\n" + " pg_catalog.obj_description(o.oprcode, 'pg_proc')) AS \"%s\"\n" + "FROM pg_catalog.pg_operator o\n" + " LEFT JOIN pg_catalog.pg_namespace n ON n.oid = o.oprnamespace\n", gettext_noop("Description")); if (!showSystem && !pattern) diff --git a/src/bin/psql/describe.h b/src/bin/psql/describe.h index 86b86f682899f5c343e9de90a1c8028d8e8133f2..491de920af610c689fb5331737e1248803f7c9c8 100644 --- a/src/bin/psql/describe.h +++ b/src/bin/psql/describe.h @@ -22,7 +22,7 @@ extern bool describeFunctions(const char *functypes, const char *pattern, bool v extern bool describeTypes(const char *pattern, bool verbose, bool showSystem); /* \do */ -extern bool describeOperators(const char *pattern, bool showSystem); +extern bool describeOperators(const char *pattern, bool verbose, bool showSystem); /* \du, \dg */ extern bool describeRoles(const char *pattern, bool verbose);