VACUUM;
--
-- sanity check, if we don't have indices the test will take years to
-- complete.  But skip TOAST relations (since they will have varying
-- names depending on the current OID counter) as well as temp tables
-- of other backends (to avoid timing-dependent behavior).
--
SELECT relname, relhasindex
   FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = relnamespace
   WHERE relkind = 'r' AND (nspname ~ '^pg_temp_') IS NOT TRUE
   ORDER BY relname;
         relname         | relhasindex 
-------------------------+-------------
 a                       | f
 a_star                  | f
 abstime_tbl             | f
 aggtest                 | f
 array_index_op_test     | t
 array_op_test           | f
 b                       | f
 b_star                  | f
 box_tbl                 | f
 bprime                  | f
 bt_f8_heap              | t
 bt_i4_heap              | t
 bt_name_heap            | t
 bt_txt_heap             | t
 c                       | f
 c_star                  | f
 char_tbl                | f
 check2_tbl              | f
 check_tbl               | f
 circle_tbl              | t
 city                    | f
 copy_tbl                | f
 d                       | f
 d_star                  | f
 date_tbl                | f
 default_tbl             | f
 defaultexpr_tbl         | f
 dept                    | f
 e_star                  | f
 emp                     | f
 equipment_r             | f
 f_star                  | f
 fast_emp4000            | t
 float4_tbl              | f
 float8_tbl              | f
 func_index_heap         | t
 hash_f8_heap            | t
 hash_i4_heap            | t
 hash_name_heap          | t
 hash_txt_heap           | t
 hobbies_r               | f
 ihighway                | t
 inet_tbl                | f
 inhe                    | f
 inhf                    | f
 inhx                    | t
 insert_tbl              | f
 int2_tbl                | f
 int4_tbl                | f
 int8_tbl                | f
 interval_tbl            | f
 iportaltest             | f
 log_table               | f
 lseg_tbl                | f
 main_table              | f
 money_data              | f
 num_data                | f
 num_exp_add             | t
 num_exp_div             | t
 num_exp_ln              | t
 num_exp_log10           | t
 num_exp_mul             | t
 num_exp_power_10_ln     | t
 num_exp_sqrt            | t
 num_exp_sub             | t
 num_input_test          | f
 num_result              | f
 onek                    | t
 onek2                   | t
 path_tbl                | f
 person                  | f
 pg_aggregate            | t
 pg_am                   | t
 pg_amop                 | t
 pg_amproc               | t
 pg_attrdef              | t
 pg_attribute            | t
 pg_auth_members         | t
 pg_authid               | t
 pg_cast                 | t
 pg_class                | t
 pg_constraint           | t
 pg_conversion           | t
 pg_database             | t
 pg_depend               | t
 pg_description          | t
 pg_enum                 | t
 pg_foreign_data_wrapper | t
 pg_foreign_server       | t
 pg_index                | t
 pg_inherits             | t
 pg_language             | t
 pg_largeobject          | t
 pg_listener             | f
 pg_namespace            | t
 pg_opclass              | t
 pg_operator             | t
 pg_opfamily             | t
 pg_pltemplate           | t
 pg_proc                 | t
 pg_rewrite              | t
 pg_shdepend             | t
 pg_shdescription        | t
 pg_statistic            | t
 pg_tablespace           | t
 pg_trigger              | t
 pg_ts_config            | t
 pg_ts_config_map        | t
 pg_ts_dict              | t
 pg_ts_parser            | t
 pg_ts_template          | t
 pg_type                 | t
 pg_user_mapping         | t
 point_tbl               | f
 polygon_tbl             | t
 ramp                    | f
 real_city               | f
 reltime_tbl             | f
 road                    | t
 shighway                | t
 slow_emp4000            | f
 sql_features            | f
 sql_implementation_info | f
 sql_languages           | f
 sql_packages            | f
 sql_parts               | f
 sql_sizing              | f
 sql_sizing_profiles     | f
 stud_emp                | f
 student                 | f
 tenk1                   | t
 tenk2                   | t
 test_tsvector           | f
 text_tbl                | f
 time_tbl                | f
 timestamp_tbl           | f
 timestamptz_tbl         | f
 timetz_tbl              | f
 tinterval_tbl           | f
 varchar_tbl             | f
(140 rows)

--
-- another sanity check: every system catalog that has OIDs should have
-- a unique index on OID.  This ensures that the OIDs will be unique,
-- even after the OID counter wraps around.
-- We exclude non-system tables from the check by looking at nspname.
--
SELECT relname, nspname
FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = relnamespace
WHERE relhasoids
    AND ((nspname ~ '^pg_') IS NOT FALSE)
    AND NOT EXISTS (SELECT 1 FROM pg_index i WHERE indrelid = c.oid
                    AND indkey[0] = -2 AND indnatts = 1 AND indisunique);
 relname | nspname 
---------+---------
(0 rows)

