Согласно документам Redshift, Redshift, похоже, не предоставляет функции для ограничения размера каждой схемы/базы данных, но есть обходной путь.
Поскольку вы можете получить размер данных в таблице со следующим запросом, вы можете написать сценарий, который отслеживает их использование и отправляет предупреждение, если оно превышено. Затем просто запускайте скрипт периодически через cron.
- запрос, чтобы получить размер данных и количество строк в таблице
select
trim(pgdb.datname) as database, trim(pgn.nspname) as schema,
trim(a.name) as Table, b.mbytes, a.rows
from
(select db_id, id, name, sum(rows) as rows from stv_tbl_perm a group by db_id, id, name) as a
join pg_class as pgc on pgc.oid = a.id
join pg_namespace as pgn on pgn.oid = pgc.relnamespace
join pg_database as pgdb on pgdb.oid = a.db_id
join (select tbl, count(*) as mbytes from stv_blocklist group by tbl) b on a.id=b.tbl
order by 1, 2, 3;
database | schema | table | mbytes | rows
----------+---------------+-------------+--------+----------+
test_db | dev_schmea_1 | click_log | 23 | 4653
prod_db | prod_schema_1 | click_log | 16217 | 2112354
prod_db | prod_schema_1 | install_log | 5544 | 433538
- запрос, чтобы получить размер данных и число строк по схеме
select
trim(pgdb.datname) as database, trim(pgn.nspname) as schema,
sum(b.mbytes) as mbytes, sum(a.rows) as rows
from
(select db_id, id, name, sum(rows) as rows from stv_tbl_perm a group by db_id, id, name) as a
join pg_class as pgc on pgc.oid = a.id
join pg_namespace as pgn on pgn.oid = pgc.relnamespace
join pg_database as pgdb on pgdb.oid = a.db_id
join (select tbl, count(*) as mbytes from stv_blocklist group by tbl) b on a.id=b.tbl
group by pgdb.datname, pgn.nspname
order by 1, 2;
- запрос, чтобы получить размер данных и количество строк в базе данных
select
trim(pgdb.datname) as database, sum(b.mbytes) as mbytes, sum(a.rows) as rows
from
(select db_id, id, name, sum(rows) as rows from stv_tbl_perm a group by db_id, id, name) as a
join pg_class as pgc on pgc.oid = a.id
join pg_namespace as pgn on pgn.oid = pgc.relnamespace
join pg_database as pgdb on pgdb.oid = a.db_id
join (select tbl, count(*) as mbytes from stv_blocklist group by tbl) b on a.id=b.tbl
group by pgdb.datname
order by 1;
Спасибо за ответ. Это помогает в обходной путь. – Senthil