up

in db/migrate/20241119101703_add_postgres_table_sizes_view.rb [5:22]


  def up
    execute(<<~SQL)
      CREATE OR REPLACE VIEW postgres_table_sizes AS
      SELECT
          schemaname || '.' || relname as identifier,
          schemaname as schema_name,
          relname as table_name,
          pg_size_pretty(pg_total_relation_size(quote_ident(schemaname) || '.' || quote_ident(relname))) as total_size,
          pg_size_pretty(pg_relation_size(quote_ident(schemaname) || '.' || quote_ident(relname))) as table_size,
          pg_size_pretty(pg_total_relation_size(quote_ident(schemaname) || '.' || quote_ident(relname)) -
                        pg_relation_size(quote_ident(schemaname) || '.' || quote_ident(relname))) as index_size,
          pg_total_relation_size(quote_ident(schemaname) || '.' || quote_ident(relname)) as size_in_bytes
      FROM pg_stat_user_tables
      WHERE pg_total_relation_size(quote_ident(schemaname) || '.' || quote_ident(relname)) IS NOT NULL
      ORDER BY pg_total_relation_size(quote_ident(schemaname) || '.' || quote_ident(relname)) DESC;
    SQL
  end