How do you find the row count for all your tables in Postgres

前端 未结 15 2241
无人及你
无人及你 2020-11-22 12:31

I\'m looking for a way to find the row count for all my tables in Postgres. I know I can do this one table at a time with:

SELECT count(*) FROM table_name;
         


        
15条回答
  •  挽巷
    挽巷 (楼主)
    2020-11-22 13:14

    I made a small variation to include all tables, also for non-public tables.

    CREATE TYPE table_count AS (table_schema TEXT,table_name TEXT, num_rows INTEGER); 
    
    CREATE OR REPLACE FUNCTION count_em_all () RETURNS SETOF table_count  AS '
    DECLARE 
        the_count RECORD; 
        t_name RECORD; 
        r table_count%ROWTYPE; 
    
    BEGIN
        FOR t_name IN 
            SELECT table_schema,table_name
            FROM information_schema.tables
            where table_schema !=''pg_catalog''
              and table_schema !=''information_schema''
            ORDER BY 1,2
            LOOP
                FOR the_count IN EXECUTE ''SELECT COUNT(*) AS "count" FROM '' || t_name.table_schema||''.''||t_name.table_name
                LOOP 
                END LOOP; 
    
                r.table_schema := t_name.table_schema;
                r.table_name := t_name.table_name; 
                r.num_rows := the_count.count; 
                RETURN NEXT r; 
            END LOOP; 
            RETURN; 
    END;
    ' LANGUAGE plpgsql; 
    

    use select count_em_all(); to call it.

    Hope you find this usefull. Paul

提交回复
热议问题