Thread: Multiline privileges in \z

Multiline privileges in \z

From
"Brendan Jurd"
Date:
Hi hackers,

It occurred to me that psql's \z command could benefit from the
addition of some newlines.  With any more than one grantee per object,
the output of \z rapidly becomes extremely wide, and very hard to
read.

I'd like to split the output onto one line per grantee.  So, instead of this:

 Schema | Name | Type  |                            Access privileges
--------+------+-------+-------------------------------------------------------------------------
 public | a    | table |
{brendanjurd=arwdxt/brendanjurd,foo=arwd/brendanjurd,bar=r/brendanjurd}
 public | b    | table | {brendanjurd=arwdxt/brendanjurd,foo=arwd/brendanjurd}
(2 rows)

You would get this:

 Schema | Name | Type  |       Access privileges
--------+------+-------+--------------------------------
 public | a    | table | brendanjurd=arwdxt/brendanjurd
                       : foo=arwd/brendanjurd
                       : bar=r/brendanjurd
 public | b    | table | brendanjurd=arwdxt/brendanjurd
                       : foo=arwd/brendanjurd
(2 rows)

Because the -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

ACLs
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: http://getfiregpg.org

iD8DBQFIB3kL5YBsbHkuyV0RAgWQAJ9bcl3bOFozvi9LxRAQN1OwT3t+QgCcCGVq
dcMw3wIBQVPv1nYDBCSRpDA=
=s1eD
-----END PGP SIGNATURE-----
 are stored as an array, the patch to achieve this is trivial (see attached).

Looking forward to your comments.

Added to wiki.

Cheers,
BJ

Attachment

Re: [HACKERS] Multiline privileges in \z

From
Tom Lane
Date:
"Brendan Jurd" <direvus@gmail.com> writes:
> It occurred to me that psql's \z command could benefit from the
> addition of some newlines.  With any more than one grantee per object,
> the output of \z rapidly becomes extremely wide, and very hard to
> read.

Seems like a good idea now that psql deals nicely with multiline output.

The function names in the patch need schema-qualification in case
pg_catalog is not first in the search path.

            regards, tom lane

Re: [HACKERS] Multiline privileges in \z

From
"Brendan Jurd"
Date:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Fri, Apr 18, 2008 at 2:37 AM, Tom Lane  wrote:
>  The function names in the patch need schema-qualification in case
>  pg_catalog is not first in the search path.
>

Ah, yes.  I should have seen that.  Thanks Tom.

New version attached with schema-qualification.

Cheers,
BJ
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: http://getfiregpg.org

iD8DBQFIB4Ae5YBsbHkuyV0RAqJVAJ9+h6wZrLT9YFRw3s2E742sg7Yr4wCgvtcq
xK7cTnbiGtfpGGYw5WP4asI=
=hf8W
-----END PGP SIGNATURE-----

Attachment

Re: [HACKERS] Multiline privileges in \z

From
Andrew Dunstan
Date:

Brendan Jurd wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On Fri, Apr 18, 2008 at 2:37 AM, Tom Lane  wrote:
>
>>  The function names in the patch need schema-qualification in case
>>  pg_catalog is not first in the search path.
>>
>>
>
> Ah, yes.  I should have seen that.  Thanks Tom.
>
> New version attached with schema-qualification.
>

Wouldn't this expression:


       pg_catalog.array_to_string(c.relacl, chr(10))


be better expressed as


    pg_catalog.array_to_string(c.relacl, E'\n')

?

Quoted inside a C literal, the backslash would have to be doubled, of course.

cheers

andrew




Re: [HACKERS] Multiline privileges in \z

From
Tom Lane
Date:
Andrew Dunstan <andrew@dunslane.net> writes:
> Wouldn't this expression:
>        pg_catalog.array_to_string(c.relacl, chr(10))
> be better expressed as
>     pg_catalog.array_to_string(c.relacl, E'\n')

+1 ... it's minor, but knowing that ASCII LF is 10 is probably not
wired into too many people's brains anymore.  (Besides, some of us
remember it as octal 12, anyway...)

            regards, tom lane

Re: [HACKERS] Multiline privileges in \z

From
"Brendan Jurd"
Date:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Sun, May 4, 2008 at 10:55 AM, Tom Lane  wrote:
> Andrew Dunstan  writes:
>  > Wouldn't this expression:
>  >       pg_catalog.array_to_string(c.relacl, chr(10))
>  > be better expressed as
>  >       pg_catalog.array_to_string(c.relacl, E'\n')
>
>  +1 ... it's minor, but knowing that ASCII LF is 10 is probably not
>  wired into too many people's brains anymore.  (Besides, some of us
>  remember it as octal 12, anyway...)
>

Fair enough.  I just wanted a non-messy way of saying "1 newline,
please", and I wasn't too sure whether backslash escapes were
considered kosher for internal queries.

But you're right, readability is important.  No objections to using
the escape syntax.

Please note that I used chr(10) in my \du attributes patch as well.

Cheers,
BJ

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: http://getfiregpg.org

iD8DBQFIHjNA5YBsbHkuyV0RAuNSAJ0ZDLxhHaPj4CBsBCILnxHy+5Jf5ACfQHMH
4XZxczc+YEow3AFdayn9fGs=
=+TSV
-----END PGP SIGNATURE-----

Re: [HACKERS] Multiline privileges in \z

From
Andrew Dunstan
Date:

Brendan Jurd wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On Fri, Apr 18, 2008 at 2:37 AM, Tom Lane  wrote:
>
>>  The function names in the patch need schema-qualification in case
>>  pg_catalog is not first in the search path.
>>
>>
>
> Ah, yes.  I should have seen that.  Thanks Tom.
>
> New version attached with schema-qualification.
>
>
>

Committed with slight editorialization and a consequent docs change.

cheers

andrew