Re: Adding "quota user limit" using triggers - Mailing list pgsql-general

From David Johnston
Subject Re: Adding "quota user limit" using triggers
Date
Msg-id 039d01cc26b4$e89eed00$b9dcc700$@yahoo.com
Whole thread Raw
In response to Adding "quota user limit" using triggers  (Andrea Peri <aperi2007@gmail.com>)
List pgsql-general
From: pgsql-general-owner@postgresql.org
[mailto:pgsql-general-owner@postgresql.org] On Behalf Of Andrea Peri
Sent: Thursday, June 09, 2011 6:05 AM
To: pgsql-general@postgresql.org
Subject: [GENERAL] Adding "quota user limit" using triggers

>on 06/08/11 11:14 PM, Andrea Peri wrote:
>Hi,
>

>
>Is possible the limit the size of an user (quota user) as space allocated
in a tablespace ?
>I don't find this option in the 9.0 version of PG,
>so I think it is not available.
>
>Perhaps it should be possible to simulate it using triggers.
>
>
>However before start to work on it , I like to have a confirm and if there
is some documentation or information on this
>problem available.

>what exactly would this limit?
>
>
>The total size of tables created by that user regardless of what role
inserted data into said tables? There's really no way to >track the data
written by a user into tables that multiple users have insert/update privs
to. and does it include older tuple >versions that aren't yet vacuumed?
calculating pg_total_relation_size is fairly expensive, too, it requires
scanning the table >and ancilliary items (indexes, toast storage) to sum up
the number of blocks allocated.
>

I guess the quota limit should be applied to the owner of the table is also
the owner of the indexes, sequences, and so on..
regardless of which has inserted on it.
And also regardless of vacuumed space.

>calculating pg_total_relation_size is fairly expensive, too, it requires
scanning the table >and ancilliary items (indexes, toast
>storage) to sum up the number of blocks allocated.

yes I think this is a fairly expensive task,

But is for me necessary.

>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Is a hard-limit required or would a simple periodic size/limit check query -
run during low activity timeframes - be sufficient?  No triggers required
and you only call the expensive size check occasionally instead of during
every insert.  Or, instead of limiting by size you could limit by number of
records which can either be done fairly quickly via trigger or still via a
periodic query.  You could maybe add a trigger to ensure that any bytea or
text fields fall under an expected maximum size so that your average row
size calculation stays within reason.  You don't even need to disallow the
insert but instead simply put a message out that a particular record is
over-sized.

Arbitrary hard limits are problematic since they force action when the
threshold is met - even if only by a few bits.  If someone with database
privileges is abusing them to the point where a hard-quota is your solution
you have bigger problems to address.  If it is NOT an abuse issue then you
need to revise your expectations - or get more hardware.

David J.



pgsql-general by date:

Previous
From: Tom Lane
Date:
Subject: Re: plpgsql function with update and seeing changed data from outside during run
Next
From: Alan Hodgson
Date:
Subject: Re: Write performance on a large database