我需要一个查询或脚本来生成以下内容:
select count(*) from events_abc;
select count(*) from events_def;
select count(*) from events_123;
理想情况下,我想做所有计数的总和,但如果我不能,那么所有计数的列表将是一个不错的开始。
我需要为Amazon Redshift执行此操作。问题是我有许多不同的模式,它们可以具有相同的表名。
因此架构john__foo
可以有一个表名events_abc
,架构mary__foo
也可以有一个名为events_abc
的表。
我会使用某种光标吗?编写脚本的最佳方法是什么?
答案 0 :(得分:2)
来自Amazon RedShift Dev Guides - Examples of Catalog Queries
列出数据库中的模式和表
以下查询将STV_TBL_PERM连接到某些PG表以返回a TICKIT数据库中的表列表及其架构名称(NSPNAME 柱)。该查询还返回每个中的总行数 表。 (当您的系统中有多个模式时,此查询很有用 具有相同的表名。)
select datname, nspname, relname, sum(rows) as rows from pg_class, pg_namespace, pg_database, stv_tbl_perm where pg_namespace.oid = relnamespace and pg_class.oid = stv_tbl_perm.id and pg_database.oid = stv_tbl_perm.db_id and datname ='tickit' group by datname, nspname, relname order by datname, nspname, relname; datname | nspname | relname | rows --------+---------+----------+-------- tickit | public | category | 11 tickit | public | date | 365 tickit | public | event | 8798 tickit | public | listing | 192497 tickit | public | sales | 172456 tickit | public | users | 49990 tickit | public | venue | 202 (7 rows)
这或多或少是你想做的事,不是吗?
所以只需使用此查询。如果您已连接到正确的数据库,并希望在所有模式中列出所有以event_
开头的表,则应执行以下操作:
SELECT datname, nspname, relname, SUM(rows) AS rows
FROM pg_class, pg_namespace, pg_database, stv_tbl_perm
WHERE pg_namespace.oid = relnamespace
AND pg_class.oid = stv_tbl_perm.id
AND pg_database.oid = stv_tbl_perm.db_id
AND relname LIKE 'event_%'
GROUP BY datname, nspname, relname
ORDER BY datname, nspname, relname;