Es gibt kein integriertes Quotensystem in Postgres, also haben Sie das vermutlich falsch verstanden.
Allerdings könnte man es ein paar Möglichkeiten:
erstellen Tablespaces für jeden Benutzer. Wenn Sie im Dateisystem Quotas haben, können Sie dafür sorgen, dass sie übereinstimmen. Sie riskieren natürlich die Integrität der Datenbank. Ich würde es nicht versuchen.
Schreiben Sie ein Skript, das INSERT
auf einem Konto deaktiviert. Sie können die Datenträgerauslastung in der Datenbank mit pg_database_size
abfragen. Ich würde ein Shell-Skript schreiben, um den Zugriff zu überprüfen und zu widerrufen/gewähren und ihn regelmäßig mit Cron auszuführen.
ZB:
evlaopt=# select pg_database_size('evlaopt');
pg_database_size
------------------
9240136352
(1 row)
evlaopt=# select pg_size_pretty(pg_database_size('evlaopt'));
pg_size_pretty
----------------
8812 MB
(1 row)
(evlaopt
ist eine Datenbank, auf meinem Rechner.)
Angenommen, Sie haben Benutzer und Datenbanken, deren Namen, und sie alle haben die gleiche Quote von (sagen wir) 100 MB. Man könnte so etwas tun:
# grant access to databases below the limit
for DB in $(psql -At -c 'SELECT datname FROM pg_database WHERE NOT datistemplate AND pg_database_size(datname) < 1024 * 1024 * 100'); do
psql -At -c "GRANT INSERT ON ALL TABLES IN SCHEMA public TO $DB" $DB
done
# revoke access to databases at or above the limit
for DB in $(psql -At -c 'SELECT datname FROM pg_database WHERE NOT datistemplate AND pg_database_size(datname) >= 1024 * 1024 * 100'); do
psql -At -c "REVOKE INSERT ON ALL TABLES IN SCHEMA public FROM $DB" $DB
done
Links zu den alten Seiten .. sehr neugierig –
Das ist mein Google-Ergebnis ist https://www.google.de/?client=safari#q=restrict+database+size + postgres 2005, 2008, ... Die Antworten sind wie folgt von @daniel. Da ich mir ziemlich sicher war, was ich gelesen habe, dachte ich, dass die Informationen im Web veraltet sind. Offensichtlich ist es nicht. –
danke für den Link - ich dachte, du meintest Dokumentation von sehr alten Releases obwohl. In der Tat, Daniels Antwort ist viel effizienter als FS-Kapazität Grenzen verwenden :) –