• Tomas Vondra's avatar
    Rework the pg_statistic_ext catalog · 6cbfb784
    Tomas Vondra authored
    Since extended statistic got introduced in PostgreSQL 10, there was a
    single catalog pg_statistic_ext storing both the definitions and built
    statistic.  That's however problematic when a user is supposed to have
    access only to the definitions, but not to user data.
    
    Consider for example pg_dump on a database with RLS enabled - if the
    pg_statistic_ext catalog respects RLS (which it should, if it contains
    user data), pg_dump would not see any records and the result would not
    define any extended statistics.  That would be a surprising behavior.
    
    Until now this was not a pressing issue, because the existing types of
    extended statistic (functional dependencies and ndistinct coefficients)
    do not include any user data directly.  This changed with introduction
    of MCV lists, which do include most common combinations of values.
    
    The easiest way to fix this is to split the pg_statistic_ext catalog
    into two - one for definitions, one for the built statistic values.
    The new catalog is called pg_statistic_ext_data, and we're maintaining
    a 1:1 relationship with the old catalog - either there are matching
    records in both catalogs, or neither of them.
    
    Bumped CATVERSION due to changing system catalog definitions.
    
    Author: Dean Rasheed, with improvements by me
    Reviewed-by: Dean Rasheed, John Naylor
    Discussion: https://postgr.es/m/CAEZATCUhT9rt7Ui%3DVdx4N%3D%3DVV5XOK5dsXfnGgVOz_JhAicB%3DZA%40mail.gmail.com
    6cbfb784
Makefile 5.67 KB