【发布时间】:2017-09-18 15:18:34
【问题描述】:
我有一堆表有一个“stat”列(stat 表示状态;-)
我想要每个统计数据的计数,看看吧!
我的桌子是这样的
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;
$$;
有些事情我认为我在这里做得不好。
- 也许有更好的格式
- 我无法选择 RECORD,我认为数据类型不好(但无法弄清楚我应该使用哪种类型)
- for 循环中的选择不是一个好主意(我认为?)但我没有找到如何将
result放入结果数组中,并在 for 循环之后显示它。
如何正确地做到这一点?
【问题讨论】:
标签: postgresql count plpgsql dynamic-sql