[PATCH] Add size/acl information when listing databases

Started by Andrew Gilliganabout 18 years ago7 messageshackers
Jump to latest
#1Andrew Gilligan
andy@tcpd.net

Greetings,

Attached is a rather small change to src/bin/psql/describe.c to
show database size and permissions when using the psql \l command.

Typical output would be:

                                  List of databases
    Name    | Owner | Encoding |  Size   |             Access privileges
-----------+-------+----------+--------- 
+-------------------------------------------
  andy      | andy  | UTF8     | 734 MB  | {andy=CTc/andy}
  postgres  | pgsql | UTF8     | 3914 kB |
  template0 | pgsql | UTF8     | 3656 kB | {=c/pgsql,pgsql=CTc/pgsql}
  template1 | pgsql | UTF8     | 4034 kB | {=c/pgsql,pgsql=CTc/pgsql}

Hope someone finds this useful.

Best regards,
-Andy

Attachments:

patch-psql-describe.capplication/octet-stream; name=patch-psql-describe.c; x-unix-mode=0644Download+4-0
#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Gilligan (#1)
Re: [PATCH] Add size/acl information when listing databases

Andrew Gilligan <andy@tcpd.net> writes:

Attached is a rather small change to src/bin/psql/describe.c to
show database size and permissions when using the psql \l command.

Doesn't this slow down \l by several orders of magnitude? There's
also the small problem that the query will fail entirely if there are
any databases the current user cannot connect to.

The ACL part is fine, the database size not so much. I could see
relegating the size to a \l+ option, but you still have to deal with the
permissions problem.

regards, tom lane

#3Andrew Gilligan
andy@tcpd.net
In reply to: Tom Lane (#2)
Re: [PATCH] Add size/acl information when listing databases

On 20 Jan 2008, at 02:06, Tom Lane wrote:

Andrew Gilligan <andy@tcpd.net> writes:

Attached is a rather small change to src/bin/psql/describe.c to
show database size and permissions when using the psql \l command.

Doesn't this slow down \l by several orders of magnitude? There's
also the small problem that the query will fail entirely if there are
any databases the current user cannot connect to.

I didn't run into the permissions issue while testing on 8.2.6, but
you're quite correct, after trying 8.3.x it fails entirely. Sorry.

On databases containing around 50 tables it seems to return in under
10ms, but I haven't been able to test with larger than that.

The ACL part is fine, the database size not so much. I could see
relegating the size to a \l+ option, but you still have to deal with
the
permissions problem.

Showing the size on \l+ probably makes more sense, but I imagine that
would require a very different approach due to the permissions changes?

Best regards,
-Andy

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Gilligan (#3)
Re: [PATCH] Add size/acl information when listing databases

Andrew Gilligan <andy@tcpd.net> writes:

Showing the size on \l+ probably makes more sense, but I imagine that
would require a very different approach due to the permissions changes?

I haven't experimented, but perhaps something along the lines of

case when has_database_privilege(current_user, db.oid, 'connect')
then pg_database_size...
else null
end

would fix it.

regards, tom lane

#5Andrew Gilligan
andy@tcpd.net
In reply to: Tom Lane (#4)
Re: [PATCH] Add size/acl information when listing databases

On 20 Jan 2008, at 04:34, Tom Lane wrote:

Andrew Gilligan <andy@tcpd.net> writes:

Showing the size on \l+ probably makes more sense, but I imagine that
would require a very different approach due to the permissions
changes?

I haven't experimented, but perhaps something along the lines of

case when has_database_privilege(current_user, db.oid, 'connect')
then pg_database_size...
else null
end

would fix it.

Yep, that seems to do the trick.

I've attached an updated patch (based on 8.3RC2) that adds the ACL
information to \l and the size to \l+ if available.

Best regards,
-Andy

Attachments:

patch-83rc2-src-bin-psql-describe.c.diffapplication/octet-stream; name=patch-83rc2-src-bin-psql-describe.c.diff; x-unix-mode=0644Download+10-2
#6Bruce Momjian
bruce@momjian.us
In reply to: Andrew Gilligan (#5)
Re: [PATCH] Add size/acl information when listing databases

This has been saved for the 8.4 release:

http://momjian.postgresql.org/cgi-bin/pgpatches_hold

---------------------------------------------------------------------------

Andrew Gilligan wrote:

On 20 Jan 2008, at 04:34, Tom Lane wrote:

Andrew Gilligan <andy@tcpd.net> writes:

Showing the size on \l+ probably makes more sense, but I imagine that
would require a very different approach due to the permissions
changes?

I haven't experimented, but perhaps something along the lines of

case when has_database_privilege(current_user, db.oid, 'connect')
then pg_database_size...
else null
end

would fix it.

Yep, that seems to do the trick.

I've attached an updated patch (based on 8.3RC2) that adds the ACL
information to \l and the size to \l+ if available.

Best regards,
-Andy

[ Attachment, skipping... ]

---------------------------(end of broadcast)---------------------------
TIP 7: You can help support the PostgreSQL project by donating at

http://www.postgresql.org/about/donate

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://postgres.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

#7Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Gilligan (#5)
Re: [PATCH] Add size/acl information when listing databases

Andrew Gilligan <andy@tcpd.net> writes:

I've attached an updated patch (based on 8.3RC2) that adds the ACL
information to \l and the size to \l+ if available.

Applied, thanks.

regards, tom lane