The following bug has been logged on the website:
Bug reference: 10542
Logged by: Hannes Janetzek
Email address: hannes.janetzek@gmail.com
PostgreSQL version: 9.3.4
Operating system: Linux, Ubuntu 12.04
Description:
While trying to get our database working again after a forced shutdown the
reindexing of the system tables in single user mode went into an infinite
loop. I can just roughly guess that between the lines:
https://github.com/postgres/postgres/blob/REL9_3_STABLE/src/backend/catalog/index.c#L2260-
L2385
the function is assuming that another process tries to delete a tuple that
is about to be indexed (even though in single user mode this should probably
not be possible)
I found these lines by attaching gdb and stepping through. The command to
reindex was:
sudo -u postgres /usr/lib/postgresql/9.3/bin/postgres --single -D
/etc/postgresql/9.3/main -d 5 osm
backend> REINDEX SYSTEM osm;
2014-06-05 23:36:27 CEST STATEMENT: REINDEX SYSTEM osm;
2014-06-05 23:36:27 CEST DEBUG: ProcessUtility
2014-06-05 23:36:27 CEST DEBUG: CommitTransaction
2014-06-05 23:36:27 CEST DEBUG: name: unnamed; blockState: STARTED;
state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
2014-06-05 23:36:27 CEST DEBUG: StartTransaction
2014-06-05 23:36:27 CEST DEBUG: name: unnamed; blockState: DEFAULT;
state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
2014-06-05 23:36:27 CEST DEBUG: building index "pg_class_oid_index" on
table "pg_class"
2014-06-05 23:36:27 CEST DEBUG: building index "pg_class_relname_nsp_index"
on table "pg_class"
2014-06-05 23:36:27 CEST NOTICE: table "pg_catalog.pg_class" was reindexed
2014-06-05 23:36:27 CEST DEBUG: CommitTransaction
2014-06-05 23:36:27 CEST DEBUG: name: unnamed; blockState: STARTED;
state: INPROGR, xid/subid/cid: 196462163/1/4, nestlvl: 1, children:
2014-06-05 23:36:27 CEST DEBUG: StartTransaction
2014-06-05 23:36:27 CEST DEBUG: name: unnamed; blockState: DEFAULT;
state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
2014-06-05 23:36:27 CEST DEBUG: building index
"pg_statistic_relid_att_inh_index" on table "pg_statistic"