Postgresql 限制数据库大小

Postgresql 限制数据库大小,postgresql,Postgresql,我很惊讶,我没有发现这个问题如此。然而,谷歌搜索它会带来非常旧的页面。可能我没有找到正确的关键字。将此问题发布到数据库管理员时未得到答复 对于Q本身: 我很确定我读过postgres中的一个限制数据库大小的功能。但我今天在手册里找不到 我记错了吗?如何限制数据库的大小?Postgres中没有内置的配额系统,所以我猜你听错了 但是,您可以通过以下两种方式实现: 为每个用户创建表空间。如果文件系统上有配额,可以安排它们匹配。当然,您正在冒着数据库完整性的风险。我不会尝试的 编写一个脚本,禁用帐户上的

我很惊讶,我没有发现这个问题如此。然而,谷歌搜索它会带来非常旧的页面。可能我没有找到正确的关键字。将此问题发布到数据库管理员时未得到答复

对于Q本身:

我很确定我读过postgres中的一个限制数据库大小的功能。但我今天在手册里找不到


我记错了吗?如何限制数据库的大小?

Postgres中没有内置的配额系统,所以我猜你听错了

但是,您可以通过以下两种方式实现:

为每个用户创建表空间。如果文件系统上有配额,可以安排它们匹配。当然,您正在冒着数据库完整性的风险。我不会尝试的

编写一个脚本,禁用帐户上的插入。您可以使用pg_database_size查询数据库上的磁盘利用率。我将编写一个shell脚本来检查和撤销/授予访问权,并使用cron定期运行它

例如:

evlaopt是我机器上的一个数据库

假设您有名称匹配的用户和数据库,并且它们都有相同的配额,比如说100 MB。你可以这样做:

# 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

那些旧网页的链接?。。非常奇怪,这是我2005年、2008年的谷歌搜索结果,…答案如下@daniel。因为我对我读到的东西很有把握,所以我认为网络上的信息已经过时了。显然不是。谢谢你的链接-我以为你指的是非常旧版本的文档。事实上,Daniels的答案比使用FS容量限制要有效得多:是的,通过FS进行限制绝对不是选项。我相信这就是heroku所做的-计算最大表中的行数并撤销权限Hank you@VaoTsun和Daniel Lyons。这是为了客观的云。我托管第三方开发者的应用程序,他们的应用程序可以访问数据库。由于该服务是基于req-resp模型的,所以我只需在大约1000个req上启动一个低优先级后台线程。
# 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