网上有多种解决方案,但它们都在其解决方案中使用“CREATE TABLE”和“INSERT”。
我只有读取权限。那么如何打印模式中的所有表名和行数呢?如果可能的话,如何打印列数,但它是可选的。
为了精确计数,您需要动态 SQL。创建一个类似的函数:
CREATE OR REPLACE FUNCTION f_tables_n_count_of(_schema text = 'public')
RETURNS TABLE (table_name text, row_count bigint)
LANGUAGE plpgsql AS
$func$
BEGIN
FOR tbl IN
SELECT c.relname
FROM pg_catalog.pg_class c
WHERE c.relnamespace = _schema::regnamespace
AND c.relkind = 'r' -- only plain tables
ORDER BY 1
LOOP
RETURN QUERY EXECUTE format('SELECT %1$L, count(*) FROM %2$I.%1$I', tbl, _schema)
USING tbl;
END LOOP;
END
$func$;
致电:
SELECT * FROM f_tables_n_count_of(); -- defaults to 'public'
或者:
SELECT * FROM f_tables_n_count_of('myschema');
对于非常快速估计:
SELECT relname AS table_name
, (CASE WHEN c.reltuples < 0 THEN NULL -- never vacuumed
WHEN c.relpages = 0 THEN float8 '0' -- empty table
ELSE c.reltuples / c.relpages END
* (pg_catalog.pg_relation_size(c.oid)
/ pg_catalog.current_setting('block_size')::int))::bigint AS row_count
FROM pg_catalog.pg_class c
WHERE c.relnamespace = 'public'::regnamespace
ORDER BY 1;
详细说明: