postgresql/contrib/test_decoding/expected
Andres Freund 3dbb317d32 Fix potential assertion failure when reindexing a pg_class index.
When reindexing individual indexes on pg_class it was possible to
either trigger an assertion failure:
TRAP: FailedAssertion("!(!ReindexIsProcessingIndex(((index)->rd_id)))

That's because reindex_index() called SetReindexProcessing() - which
enables an asserts ensuring no index insertions happen into the index
- before calling RelationSetNewRelfilenode(). That not correct for
indexes on pg_class, because RelationSetNewRelfilenode() updates the
relevant pg_class row, which needs to update the indexes.

The are two reasons this wasn't noticed earlier. Firstly the bug
doesn't trigger when reindexing all of pg_class, as reindex_relation
has code "hiding" all yet-to-be-reindexed indexes. Secondly, the bug
only triggers when the the update to pg_class doesn't turn out to be a
HOT update - otherwise there's no index insertion to trigger the
bug. Most of the time there's enough space, making this bug hard to
trigger.

To fix, move RelationSetNewRelfilenode() to before the
SetReindexProcessing() (and, together with some other code, to outside
of the PG_TRY()).

To make sure the error checking intended by SetReindexProcessing() is
more robust, modify CatalogIndexInsert() to check
ReindexIsProcessingIndex() even when the update is a HOT update.

Also add a few regression tests for REINDEXing of system catalogs.

The last two improvements would have prevented some of the issues
fixed in 5c1560606d from being introduced in the first place.

Reported-By: Michael Paquier
Diagnosed-By: Tom Lane and Andres Freund
Author: Andres Freund
Reviewed-By: Tom Lane
Discussion: https://postgr.es/m/20190418011430.GA19133@paquier.xyz
Backpatch: 9.4-, the bug is present in all branches
2019-04-29 19:42:08 -07:00
..
binary.out Message style improvements 2015-10-28 20:38:36 -04:00
concurrent_ddl_dml.out Handle heap rewrites even better in logical decoding 2018-03-21 09:15:04 -04:00
ddl.out Relax overly strict assertion 2019-02-12 18:42:37 -03:00
decoding_in_xact.out Collection of typo fixes. 2015-05-20 16:56:22 +03:00
decoding_into_rel.out Fix crash when logical decoding is invoked from a PL function. 2017-10-06 19:18:58 -04:00
delayed_startup.out Introduce logical decoding. 2014-03-03 16:32:18 -05:00
messages.out Add required database and origin filtering for logical messages. 2016-04-13 17:38:54 -07:00
mxact.out Introduce logical decoding. 2014-03-03 16:32:18 -05:00
oldest_xmin.out Reduce cost of test_decoding's new oldest_xmin test 2018-07-05 16:37:32 -04:00
ondisk_startup.out Fix race condition leading to hanging logical slot creation. 2017-05-13 14:21:00 -07:00
permissions.out Replace AclObjectKind with ObjectType 2018-01-19 14:01:15 -05:00
prepared.out Add skip-empty-xacts option to test_decoding for use in the regression tests. 2014-09-01 15:59:44 +02:00
replorigin.out Fix more user-visible elog() calls. 2017-10-05 07:58:02 -04:00
rewrite.out Fix potential assertion failure when reindexing a pg_class index. 2019-04-29 19:42:08 -07:00
slot.out Add facility to copy replication slots 2019-04-05 18:05:18 -03:00
snapshot_transfer.out Fix "base" snapshot handling in logical decoding 2018-06-26 16:48:10 -04:00
spill.out Make contrib/test_decoding regression tests safe for CZ locale. 2016-11-21 20:39:28 -05:00
time.out logical decoding: fix decoding of a commit's commit time. 2016-03-02 23:42:21 -08:00
toast.out Add regression test for wide REPLICA IDENTITY FULL updates. 2017-08-05 14:43:11 -07:00
truncate.out Force synchronous commit to be enabled for all test_decoding tests. 2018-10-10 13:53:02 -07:00
xact.out Don't propagate a null subtransaction snapshot up to parent transaction. 2016-08-07 13:15:55 -04:00