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=&gt;
*** 1178,1186 ****
  
          <listitem>
          <para>
!         Lists functions, together with their arguments, return types, and
!         function types, which are classified as <quote>agg</> (aggregate),
!         <quote>normal</>, <quote>trigger</>, or <quote>window</>.
          To display only functions
          of specific type(s), add the corresponding letters <literal>a</>,
          <literal>n</>, <literal>t</>, or <literal>w</> to the command.
--- 1178,1187 ----
  
          <listitem>
          <para>
!         Lists functions, together with their arguments, return types,
!         function types, and security, which are classified as 
!         <quote>agg</> (aggregate), <quote>normal</>, <quote>trigger</>, 
!         or <quote>window</>.
          To display only functions
          of specific type(s), add the corresponding letters <literal>a</>,
          <literal>n</>, <literal>t</>, or <literal>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"),
