如何列出模式中的所有表名称以及仅具有读访问权限的 DB2 或 PostgreSQL 中的行数?

问题描述 投票:0回答:1

网上有多种解决方案,但它们都在其解决方案中使用“CREATE TABLE”和“INSERT”。

我只有读取权限。那么如何打印模式中的所有表名和行数呢?如果可能的话,如何打印列数,但它是可选的。

sql postgresql db2
1个回答
0
投票

为了精确计数,您需要动态 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;

详细说明:

© www.soinside.com 2019 - 2024. All rights reserved.