В Postgres нет встроенной системы квот, поэтому, я думаю, вы не поняли это.
Однако, вы могли бы сделать это несколько способов:
Создать табличные для каждого пользователя. Если у вас есть квоты в файловой системе, вы можете согласовать их. Однако вы, конечно, рискуете целостностью базы данных. Я бы не пробовал.
Напишите сценарий, который отключает INSERT
в учетной записи. Вы можете запросить использование диска в базе данных с помощью pg_database_size
. Я бы написал сценарий оболочки, чтобы проверять и отзывать/предоставлять доступ и периодически запускать его с помощью cron.
Например:
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
представляет собой базу данных на моей машине.)
Предположим, у вас есть пользователи и базы данных, имена которых совпадают, и все они имеют ту же квоту (скажем,) 100 МБ. Вы могли бы сделать что-то вроде этого:?
# 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
ссылки на эти старые страницы .. очень любопытный –
Это мой результат Google https://www.google.de/?client=safari#q=restrict+database+size + postgres 2005, 2008, ... Ответы подобны ответам @daniel ниже. Поскольку я был уверен в том, что я читал, я думал, что информация в Интернете устарела. Очевидно, это не так. –
спасибо за ссылку - я думал, что вы имели в виду документацию о очень старых версиях. Фактически, ответ Дэниелса намного эффективнее, чем использование пределов пропускной способности FS :) –