Re: How to restrict schema size per tenant - Mailing list pgsql-admin

From niraj nandane
Subject Re: How to restrict schema size per tenant
Date
Msg-id CALpWO+DZ=-O3-ngy6O=K3kpwVXauN45xXvaDMSZRMa6+DsUrwA@mail.gmail.com
Whole thread Raw
In response to Re: How to restrict schema size per tenant  (Laurenz Albe <laurenz.albe@cybertec.at>)
List pgsql-admin
Thank you guys.

On Sat, Jul 6, 2024 at 11:16 AM Laurenz Albe <laurenz.albe@cybertec.at> wrote:
On Fri, 2024-07-05 at 17:33 +0200, Laurenz Albe wrote:
> On Fri, 2024-07-05 at 20:03 +0530, niraj nandane wrote:
> > We are using Postgres schema based tenancy approach for our SaaS application.
> > We create schema per tenant. We have Postgres instance in HA mode.
> > We have multiple micro services and each service have its own database.
> > For eg. Auth service have auth database, audit have audit. Inside each database,
> > we create schema per tenant. We want to restrict usage to 10GB per tenant combined
> > across all database. Is there any tool or built in way to monitor this in Postgres?
>
> I don't know any.  You'll have to run a query like
>
> SELECT sum(pg_total_relation_size(t.oid)),
>        s.nspname
> FROM pg_class AS t
>    RIGHT JOIN pg_namespace AS s
>       ON t.relnamespace = s.oid
> WHERE NOT s.nspname LIKE ANY (ARRAY['pg\_catalog','pg\_toast%','information\_schema','pg\_temp%'])
> GROUP BY s.nspname;

Sorry, I forgot to restrict the query to tables.  It should be

SELECT sum(pg_total_relation_size(t.oid)),
       s.nspname
FROM pg_class AS t
   RIGHT JOIN pg_namespace AS s
      ON t.relnamespace = s.oid
WHERE NOT s.nspname LIKE ANY (ARRAY['pg\_catalog','pg\_toast%','information\_schema','pg\_temp%'])
  AND t.relkind = 'r'
GROUP BY s.nspname;

Yours,
Laurenz Albe


--

Thanks,
Niraj Nandane,
Veritas LLC, Pune

pgsql-admin by date:

Previous
From: Lucio Chiessi
Date:
Subject: Logical Replication disconnecting and taking a while to return back.
Next
From: Sathish Reddy
Date:
Subject: Re: Detach partition concurrently from pg cron