我有一大堆的表具有“统计”一栏(STAT的状态;-)手柄结果时动态SQL是在一个循环中
我希望每个统计的数量,并看看吧!
我的表看起来像这样
create table a (
a_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
a_stat status_t
);
create table b (
b_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
b_stat status_t
);
status_t
是一个枚举。
所以我这样做:
DO $$
DECLARE
tableName RECORD;
result RECORD;
BEGIN
SET SEARCH_PATH = projet, public;
FOR tableName IN SELECT
c.relname,
a.attname
FROM pg_class AS c
INNER JOIN pg_attribute AS a ON a.attrelid = c.oid
WHERE a.attname LIKE '%stat' AND c.relkind = 'r' LOOP
EXECUTE format('SELECT %I, count(%I) FROM %I GROUP BY %I',
tableName.attname, tableName.attname, tableName.relname, tableName.attname) INTO result;
SELECT * FROM result;
END LOOP;
END;
$$;
有些事情,我觉得我做得还不够好这里。
- 有可能是一个更好的形式格式的
- 我不能选择一条记录,我觉得数据类型并不好(但不能找出我应该使用什么类型)
- 一个选择在for循环中不是一个好主意(我认为?)但我没有找到如何将
result
放入结果数组中,并在for循环之后显示它。
如何正确地做到这一点?
什么是“每个统计数”?所有的行?非空行?还有别的吗? –