Тази заявка ще създаде DML израза, за да получите това, което искате.
SELECT 'SELECT ' || string_agg('count(' || quote_ident(attname) || ')', ', ')
|| 'FROM ' || attrelid::regclass
FROM pg_attribute
WHERE attrelid = 'mytbl'::regclass
AND attnum >= 1 -- exclude tableoid & friends (neg. attnum)
AND attisdropped is FALSE -- exclude deleted columns
GROUP BY attrelid;
Връща:
SELECT count(col1), count(col2), count(col3), ...
FROM mytbl
Можете също да го изпълните автоматично. Но не в план SQL, трябва EXECUTE
във функция plpgsql или DO
изявление (PostgreSQL 9.0 или по-нова версия) за това.
Също така се нуждаете от Postgres 9.0 или по-нова версия за string_agg()
функция. В по-старите версии можете да замените:array_to_string(array_agg(...), ', ')
.
Може да се чудите за специалното предаване 'mytbl'::regclass
. Прочетете повече за типовете идентификатори на обекти в ръководството.
BTW:NULL
стойностите не се добавят към COUNT(col)
по подразбиране.
Заменете името на таблицата (квалифицирано към схемата) за mytbl
. Във вашия случай това трябва да бъде:
...
WHERE attrelid = 'geoproject.mes_wastab'::regclass
...
Ако трябва да използвате смесени главни или по друг начин объркани идентификатори (обърнете внимание на кавичките):
...
WHERE attrelid = '"gEopRoject"."MES_wastab"'::regclass
...