]> granicus.if.org Git - postgresql/commitdiff
In psql, restore old behavior of Query_for_list_of_functions.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 10 Mar 2018 18:18:21 +0000 (13:18 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 10 Mar 2018 18:18:21 +0000 (13:18 -0500)
Historically, tab completion for functions has offered the names of
aggregates as well.  This is essential in at least one context, namely
GRANT/REVOKE, because there is no GRANT ON AGGREGATE syntax.  There
are other cases where a command that nominally is for functions will
allow aggregates as well, though not all do.

Commit fd1a421fe changed this query to disallow aggregates, but that
doesn't seem to have been thought through very carefully.  Change it
to allow aggregates (but still ignore procedures).

We might at some point tighten this up, but it'd require sorting through
all the uses of this query to see which ones should offer aggregate
names and which shouldn't.  Given the lack of field complaints about
the historical laxity here, that's work I'm not eager to do right now.

Discussion: https://postgr.es/m/14268.1520283126@sss.pgh.pa.us

src/bin/psql/tab-complete.c

index 340febedb97b54e1fc02eff7da7990d65f6e771f..08d8ef09a4c7c85bcc46eee74297ea10bddc82d9 100644 (file)
@@ -461,6 +461,7 @@ static const SchemaQuery Query_for_list_of_domains = {
        NULL
 };
 
+/* Note: this intentionally accepts aggregates as well as plain functions */
 static const SchemaQuery Query_for_list_of_functions[] = {
        {
                /* min_server_version */
@@ -468,7 +469,7 @@ static const SchemaQuery Query_for_list_of_functions[] = {
                /* catname */
                "pg_catalog.pg_proc p",
                /* selcondition */
-               "p.prokind IN ('f', 'w')",
+               "p.prokind != 'p'",
                /* viscondition */
                "pg_catalog.pg_function_is_visible(p.oid)",
                /* namespace */