Thread

  1. pg_class.relpages not updated for toast index

    Fabrízio de Royes Mello <fabriziomello@gmail.com> — 2023-11-21T14:34:08Z

    Hi all,
    
    Was doing a relation size estimation based on pg_class.relpages of the
    relation and the related objects (index, toast) and noticed that it is not
    updated for the toast index, for example:
    
    fabrizio=# CREATE TABLE t(c TEXT);
    INSERT INTO t VALUES (repeat('x', (8192^2)::int));
    
    VACUUM (ANALYZE) t;
    CREATE TABLE
    INSERT 0 1
    VACUUM
    fabrizio=# \x on
    Expanded display is on.
    fabrizio=# SELECT
      c.oid,
      c.relname,
      c.relpages,
      t.relname,
      t.relpages AS toast_pages,
      ci.relname,
      ci.relpages AS toast_index_pages,
      (pg_stat_file(pg_relation_filepath(ci.oid))).size AS toast_index_size
    FROM
      pg_class c
      JOIN pg_class t ON t.oid = c.reltoastrelid
      JOIN pg_index i ON i.indrelid = t.oid
      JOIN pg_class ci ON ci.oid = i.indexrelid
    WHERE
      c.oid = 't'::regclass;
    -[ RECORD 1 ]-----+---------------------
    oid               | 17787
    relname           | t
    relpages          | 1
    relname           | pg_toast_17787
    toast_pages       | 97
    relname           | pg_toast_17787_index
    toast_index_pages | 1
    toast_index_size  | 16384
    
    Are there any reasons for toast index relpages not to be updated? Or is it
    a bug?
    
    Regards,
    
    -- 
    Fabrízio de Royes Mello