diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index fdeaea604047c4053663ec529e03a8f195b79c39..9710e32dfbe44652beb6fea80cc9d7ceeaf54476 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1267,12 +1267,15 @@ testdb=> <term><literal>\dg[+] [ <link linkend="APP-PSQL-patterns"><replaceable class="parameter">pattern</replaceable></link> ]</literal></term> <listitem> <para> - Lists database roles. If <replaceable - class="parameter">pattern</replaceable> is specified, only - those roles whose names match the pattern are listed. - (This command is now effectively the same as <literal>\du</literal>). + Lists database roles. + (Since the concepts of <quote>users</> and <quote>groups</> have been + unified into <quote>roles</>, this command is now equivalent to + <literal>\du</literal>.) + If <replaceable class="parameter">pattern</replaceable> is specified, + only those roles whose names match the pattern are listed. If the form <literal>\dg+</literal> is used, additional information - is shown about each role, including the comment for each role. + is shown about each role; currently this adds the comment for each + role. </para> </listitem> </varlistentry> @@ -1421,11 +1424,15 @@ testdb=> <term><literal>\du[+] [ <link linkend="APP-PSQL-patterns"><replaceable class="parameter">pattern</replaceable></link> ]</literal></term> <listitem> <para> - Lists database roles. If <replaceable - class="parameter">pattern</replaceable> is specified, only - those roles whose names match the pattern are listed. + Lists database roles. + (Since the concepts of <quote>users</> and <quote>groups</> have been + unified into <quote>roles</>, this command is now equivalent to + <literal>\dg</literal>.) + If <replaceable class="parameter">pattern</replaceable> is specified, + only those roles whose names match the pattern are listed. If the form <literal>\du+</literal> is used, additional information - is shown about each role, including the comment for each role. + is shown about each role; currently this adds the comment for each + role. </para> </listitem> </varlistentry> diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 75709afedece9d6857c4ad0314138b704947c5dd..dc2248bc242b9954e0e3c6f6b0bbb8cad6d21aaa 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -2378,7 +2378,7 @@ describeRoles(const char *pattern, bool verbose) printfPQExpBuffer(&buf, "SELECT r.rolname, r.rolsuper, r.rolinherit,\n" " r.rolcreaterole, r.rolcreatedb, r.rolcanlogin,\n" - " r.rolconnlimit,\n" + " r.rolconnlimit, r.rolvaliduntil,\n" " ARRAY(SELECT b.rolname\n" " FROM pg_catalog.pg_auth_members m\n" " JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)\n" @@ -2406,7 +2406,8 @@ describeRoles(const char *pattern, bool verbose) " u.usesuper AS rolsuper,\n" " true AS rolinherit, false AS rolcreaterole,\n" " u.usecreatedb AS rolcreatedb, true AS rolcanlogin,\n" - " -1 AS rolconnlimit,\n" + " -1 AS rolconnlimit," + " u.valuntil as rolvaliduntil,\n" " ARRAY(SELECT g.groname FROM pg_catalog.pg_group g WHERE u.usesysid = ANY(g.grolist)) as memberof" "\nFROM pg_catalog.pg_user u\n"); @@ -2453,7 +2454,7 @@ describeRoles(const char *pattern, bool verbose) add_role_attribute(&buf, _("Cannot login")); if (pset.sversion >= 90100) - if (strcmp(PQgetvalue(res, i, (verbose ? 9 : 8)), "t") == 0) + if (strcmp(PQgetvalue(res, i, (verbose ? 10 : 9)), "t") == 0) add_role_attribute(&buf, _("Replication")); conns = atoi(PQgetvalue(res, i, 6)); @@ -2471,14 +2472,22 @@ describeRoles(const char *pattern, bool verbose) conns); } + if (strcmp(PQgetvalue(res, i, 7), "") != 0) + { + if (buf.len > 0) + appendPQExpBufferStr(&buf, "\n"); + appendPQExpBufferStr(&buf, _("Password valid until ")); + appendPQExpBufferStr(&buf, PQgetvalue(res, i, 7)); + } + attr[i] = pg_strdup(buf.data); printTableAddCell(&cont, attr[i], false, false); - printTableAddCell(&cont, PQgetvalue(res, i, 7), false, false); + printTableAddCell(&cont, PQgetvalue(res, i, 8), false, false); if (verbose && pset.sversion >= 80200) - printTableAddCell(&cont, PQgetvalue(res, i, 8), false, false); + printTableAddCell(&cont, PQgetvalue(res, i, 9), false, false); } termPQExpBuffer(&buf);