gpt4 book ai didi

postgresql - 限制数据库大小

转载 作者:行者123 更新时间:2023-11-29 12:43:25 25 4
gpt4 key购买 nike

我很惊讶我没有在 SO 上找到这个 Q。然而,谷歌搜索它会带来非常旧的页面。可能我没有找到正确的关键词。将此问题发布给数据库管理员后无人回答。

对于 Q 本身:

我很确定我已经阅读过有关 postgres 中限制数据库大小的功能。但我今天在手册中找不到它。

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

最佳答案

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

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

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

  2. 编写一个脚本来禁用帐户上的 INSERT。您可以使用 pg_database_size 查询数据库的磁盘利用率。我会编写一个 shell 脚本来检查和撤销/授予访问权限,并使用 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 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

关于postgresql - 限制数据库大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37822195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com