To zapytanie utworzy instrukcję DML, aby uzyskać to, czego chcesz.
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;
Zwroty:
SELECT count(col1), count(col2), count(col3), ...
FROM mytbl
Możesz go również wykonać automatycznie. Ale nie w planach SQL, potrzebujesz EXECUTE
w funkcji plpgsql lub DO
w tym celu (PostgreSQL 9.0 lub nowszy).
Potrzebujesz również Postgresa 9.0 lub nowszego dla string_agg()
funkcjonować. W starszych wersjach możesz zastąpić:array_to_string(array_agg(...), ', ')
.
Możesz się zastanawiać nad specjalną obsadą 'mytbl'::regclass
. Przeczytaj więcej o typach identyfikatorów obiektów w podręczniku.
BTW:NULL
wartości nie są dodawane do COUNT(col)
domyślnie.
Zastąp (z kwalifikowaną schematem) nazwę tabeli dla mytbl
. W twoim przypadku powinno to być:
...
WHERE attrelid = 'geoproject.mes_wastab'::regclass
...
Jeśli powinieneś używać różnych wielkości liter lub w inny sposób pomieszanych identyfikatorów (zwróć uwagę na cudzysłowy):
...
WHERE attrelid = '"gEopRoject"."MES_wastab"'::regclass
...