Vacuuming presents an additional challenge: in order to remove index items from an indirect index, it's critical to scan the PK index first and collect the PK values that are being removed. Then scan the indirect index and remove any items that match the PK items removed. This is a bit problematic because of the additional memory needed to store the array of PK values. I haven't implemented this yet.
Imagine another situation: PK column was not updated, but indirect indexed column was updated.
Thus, for single heap tuple we would have single PK tuple and two indirect index tuples (correct me if I'm wrong).
How are we going to delete old indirect index tuple?
------ Alexander Korotkov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company