Kueri ini akan membuat pernyataan DML untuk mendapatkan apa yang Anda inginkan.
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;
Pengembalian:
SELECT count(col1), count(col2), count(col3), ...
FROM mytbl
Anda juga dapat menjalankannya secara otomatis. Tetapi tidak dalam paket SQL, Anda perlu EXECUTE
dalam fungsi plpgsql atau DO
pernyataan (PostgreSQL 9.0 atau yang lebih baru) untuk itu.
Anda juga memerlukan Postgres 9.0 atau yang lebih baru untuk string_agg()
fungsi. Di versi yang lebih lama, Anda dapat mengganti:array_to_string(array_agg(...), ', ')
.
Anda mungkin bertanya-tanya tentang pemeran khusus 'mytbl'::regclass
. Baca lebih lanjut tentang jenis pengenal objek di manual.
BTW:NULL
nilai tidak ditambahkan ke COUNT(col)
secara default.
Ganti nama tabel (memenuhi syarat skema) untuk mytbl
. Dalam kasus Anda yang seharusnya:
...
WHERE attrelid = 'geoproject.mes_wastab'::regclass
...
Jika Anda harus menggunakan huruf besar atau kecil atau pengidentifikasi yang kacau (perhatikan tanda kutip):
...
WHERE attrelid = '"gEopRoject"."MES_wastab"'::regclass
...