diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml new file mode 100644 index c41593c..04bde18 *** a/doc/src/sgml/ref/psql-ref.sgml --- b/doc/src/sgml/ref/psql-ref.sgml *************** testdb=> *** 1178,1186 **** ! Lists functions, together with their arguments, return types, and ! function types, which are classified as agg (aggregate), ! normal, trigger, or window. To display only functions of specific type(s), add the corresponding letters a, n, t, or w to the command. --- 1178,1187 ---- ! Lists functions, together with their arguments, return types, ! function types, and security, which are classified as ! agg (aggregate), normal, trigger, ! or window. To display only functions of specific type(s), add the corresponding letters a, n, t, or w to the command. diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c new file mode 100644 index 15d02ee..5e5cefe *** a/src/bin/psql/describe.c --- b/src/bin/psql/describe.c *************** describeFunctions(const char *functypes, *** 254,260 **** " WHEN p.proiswindow THEN '%s'\n" " WHEN p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype THEN '%s'\n" " ELSE '%s'\n" ! "END as \"%s\"", gettext_noop("Result data type"), gettext_noop("Argument data types"), /* translator: "agg" is short for "aggregate" */ --- 254,260 ---- " WHEN p.proiswindow THEN '%s'\n" " WHEN p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype THEN '%s'\n" " ELSE '%s'\n" ! " END as \"%s\"", gettext_noop("Result data type"), gettext_noop("Argument data types"), /* translator: "agg" is short for "aggregate" */ *************** describeFunctions(const char *functypes, *** 329,342 **** if (verbose) appendPQExpBuffer(&buf, ",\n CASE\n" " WHEN p.provolatile = 'i' THEN '%s'\n" " WHEN p.provolatile = 's' THEN '%s'\n" " WHEN p.provolatile = 'v' THEN '%s'\n" ! "END as \"%s\"" ",\n pg_catalog.pg_get_userbyid(p.proowner) as \"%s\",\n" " l.lanname as \"%s\",\n" " p.prosrc as \"%s\",\n" " pg_catalog.obj_description(p.oid, 'pg_proc') as \"%s\"", gettext_noop("immutable"), gettext_noop("stable"), gettext_noop("volatile"), --- 329,347 ---- if (verbose) appendPQExpBuffer(&buf, ",\n CASE\n" + " WHEN prosecdef THEN 'definer'\n" + " ELSE 'invoker'\n" + " END AS \"%s\"" + ",\n CASE\n" " WHEN p.provolatile = 'i' THEN '%s'\n" " WHEN p.provolatile = 's' THEN '%s'\n" " WHEN p.provolatile = 'v' THEN '%s'\n" ! " END as \"%s\"" ",\n pg_catalog.pg_get_userbyid(p.proowner) as \"%s\",\n" " l.lanname as \"%s\",\n" " p.prosrc as \"%s\",\n" " pg_catalog.obj_description(p.oid, 'pg_proc') as \"%s\"", + gettext_noop("Security"), gettext_noop("immutable"), gettext_noop("stable"), gettext_noop("volatile"),