Do you need to know which columns takes most disk space in your tables? Here is one useful statement:
with srcdata as ( select table_schema||'.'||table_name as _table, column_name as _column, count(column_name) over (partition by table_schema, table_name) as _column_count from information_schema.columns where table_schema||'.'||table_name like '...schema.tablemask%...' order by table_schema, table_name), results1 as (select * from srcdata join lateral (select * from dblink('dbname=...your_database...'::text, 'select sum(pg_column_size("'||_column||'"))::bigint as total_size, avg(pg_column_size("'||_column||'"))::numeric as average_size, case when pg_relation_size('''||_table||''')>0 then sum(pg_column_size("'||_column||'")) * 100.0::numeric / pg_relation_size('''||_table||''') else 0 end as percentage, pg_relation_size('''||_table||''')::bigint as table_size from '||_table||'') as t(total_size bigint, average_size numeric, percentage numeric, table_size bigint) ) t on true), results2 as (select substr(_table, 1, position('_' in _table)) as _tablename, _column, sum(total_size) as _total_column_size, avg(average_size) as average_column_size, sum(table_size) as _total_table_size, count(_table) as _tables_count from results1 group by substr(_table, 1, position('_' in _table)), _column) select _tablename, _column, round(_total_column_size::numeric / _total_table_size * 100,2) as percentage, round(average_column_size,2) as average_column_size, _total_column_size, _total_table_size, _tables_count from results2 order by percentage desc nulls last