DB Internals AtlasPostgreSQL 18.6 Home About

Parameter · Developer Options

ignore_system_indexes

Disables reading from system indexes. It does not prevent updating the indexes, so it is safe to use. The worst consequence is slowness.

  • Default: off
  • Type: bool
  • Applies: New connections

In plain words

PostgreSQL looks up tables, columns and functions in its own catalog tables, using indexes for speed. If one of those catalog indexes is corrupt, even simple commands can fail. With this setting a session reads the catalogs by scanning them instead, so you can still connect and run REINDEX.

It is safe (the indexes are still updated) but slow.

For DBAs and operators

The catalog indexes are still maintained on writes, so the worst consequence is slowness. It has backend context: it cannot be changed with SET (ERROR: parameter "ignore_system_indexes" cannot be set after connection start), so pass it at connection time:

PGOPTIONS="-c ignore_system_indexes=on" psql -d mydb
REINDEX (VERBOSE) TABLE pg_catalog.pg_class;
-- or: REINDEX SYSTEM mydb;

Symptoms that call for it: errors such as could not find pg_class tuple for index, cache lookup failed for relation, or a backend crash when touching any table, after a storage problem. pg_amcheck --install-missing (or bt_index_check from amcheck) can confirm which catalog index is damaged.

In a postgres single-user session (postgres --single -P) the -P switch sets the same option, which is the classic way out when even logging in fails.

Developer option: meant for debugging and testing PostgreSQL itself. Leave it at the default on production servers unless a specific diagnosis calls for it.

How to change it

Set in postgresql.conf and reload; applies to connections opened afterwards.

See it in context

Logical structure B-tree indexes Client backend

Related parameters

allow_system_table_mods zero_damaged_pages

All Developer Options parameters