diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index c666f714c3..7ed20e4dd9 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1199,12 +1199,13 @@ testdb=> n, t, or w to the command. If pattern is specified, only - functions whose names match the pattern are shown. If the - form \df+ 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 S modifier to include system objects. + If the form \df+ is used, additional information + about each function is shown, including security classification, + volatility, owner, language, source code and description. @@ -1337,15 +1338,18 @@ testdb=> - \do[S] [ pattern ] + \do[S+] [ pattern ] - Lists operators with their operand and return types. + Lists operators with their operand and result types. If pattern 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 S modifier to include system objects. + If + is appended to the command name, + additional information about each operator is shown, currently just + the name of the underlying function. diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index f8572951f1..49f389071a 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 dedb0362d6..0d4b151679 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 86b86f6828..491de920af 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);