postgresql/src/include/access
Andres Freund e9edc1ba0b Fix logical decoding error when system table w/ toast is repeatedly rewritten.
Repeatedly rewriting a mapped catalog table with VACUUM FULL or
CLUSTER could cause logical decoding to fail with:
ERROR, "could not map filenode \"%s\" to relation OID"

To trigger the problem the rewritten catalog had to have live tuples
with toasted columns.

The problem was triggered as during catalog table rewrites the
heap_insert() check that prevents logical decoding information to be
emitted for system catalogs, failed to treat the new heap's toast table
as a system catalog (because the new heap is not recognized as a
catalog table via RelationIsLogicallyLogged()). The relmapper, in
contrast to the normal catalog contents, does not contain historical
information. After a single rewrite of a mapped table the new relation
is known to the relmapper, but if the table is rewritten twice before
logical decoding occurs, the relfilenode cannot be mapped to a
relation anymore.  Which then leads us to error out.   This only
happens for toast tables, because the main table contents aren't
re-inserted with heap_insert().

The fix is simple, add a new heap_insert() flag that prevents logical
decoding information from being emitted, and accept during decoding
that there might not be tuple data for toast tables.

Unfortunately that does not fix pre-existing logical decoding
errors. Doing so would require not throwing an error when a filenode
cannot be mapped to a relation during decoding, and that seems too
likely to hide bugs.  If it's crucial to fix decoding for an existing
slot, temporarily changing the ERROR in ReorderBufferCommit() to a
WARNING appears to be the best fix.

Author: Andres Freund
Discussion: https://postgr.es/m/20180914021046.oi7dm4ra3ot2g2kt@alap3.anarazel.de
Backpatch: 9.4-, where logical decoding was introduced
2018-10-10 13:53:02 -07:00
..
amapi.h Support index INCLUDE in the AM properties interface. 2018-04-08 06:02:05 +01:00
amvalidate.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
attnum.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
brin.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
brin_internal.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
brin_page.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
brin_pageops.h Improve FSM management for BRIN indexes. 2018-04-04 14:26:04 -04:00
brin_revmap.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
brin_tuple.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
brin_xlog.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
bufmask.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
clog.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
commit_ts.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
genam.h Add support for nearest-neighbor (KNN) searches to SP-GiST 2018-09-19 01:54:10 +03:00
generic_xlog.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
gin.h Use stdbool.h if suitable 2018-03-22 20:42:25 -04:00
gin_private.h Re-think predicate locking on GIN indexes. 2018-05-04 11:27:50 +03:00
ginblock.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
ginxlog.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
gist.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
gist_private.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
gistscan.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
gistxlog.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
hash.h Fix the overrun in hash index metapage for smaller block sizes. 2018-09-06 09:27:19 +05:30
hash_xlog.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
heapam.h Fix logical decoding error when system table w/ toast is repeatedly rewritten. 2018-10-10 13:53:02 -07:00
heapam_xlog.h Post-feature-freeze pgindent run. 2018-04-26 14:47:16 -04:00
hio.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
htup.h Add FIELDNO_* macro designating offset into structs required for JIT. 2018-03-22 14:45:59 -07:00
htup_details.h Improve representation of 'moved partitions' indicator on deleted tuples. 2018-05-01 13:30:12 -07:00
itup.h Adjust INCLUDE index truncation comments and code. 2018-04-19 08:45:58 +03:00
multixact.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
nbtree.h Allow btree comparison functions to return INT_MIN. 2018-10-05 16:01:29 -04:00
nbtxlog.h Fix datatype for number of heap tuples during last cleanup 2018-04-19 11:28:03 +03:00
parallel.h Support parallel btree index builds. 2018-02-02 13:32:44 -05:00
printsimple.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
printtup.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
reloptions.h Post-feature-freeze pgindent run. 2018-04-26 14:47:16 -04:00
relscan.h Post-feature-freeze pgindent run. 2018-04-26 14:47:16 -04:00
rewriteheap.h Comment fix for rewriteheap.h. 2018-08-25 09:17:14 -07:00
rmgr.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
rmgrlist.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
sdir.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
session.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
skey.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
slru.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
spgist.h Add support for nearest-neighbor (KNN) searches to SP-GiST 2018-09-19 01:54:10 +03:00
spgist_private.h Add support for nearest-neighbor (KNN) searches to SP-GiST 2018-09-19 01:54:10 +03:00
spgxlog.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
stratnum.h Add prefix operator for TEXT type. 2018-04-03 19:46:45 +03:00
subtrans.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
sysattr.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
timeline.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
transam.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
tsmapi.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
tupconvert.h Use slots more widely in tuple mapping code and make naming more consistent. 2018-10-02 11:14:26 -07:00
tupdesc.h Fast ALTER TABLE ADD COLUMN with a non-NULL default 2018-03-28 10:43:52 +10:30
tupdesc_details.h Cosmetic improvements for faster column addition. 2018-06-27 08:16:13 +05:30
tupmacs.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
tuptoaster.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
twophase.h Post-feature-freeze pgindent run. 2018-04-26 14:47:16 -04:00
twophase_rmgr.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
valid.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
visibilitymap.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
xact.h Propagate xactStartTimestamp and stmtStartTimestamp to parallel workers. 2018-10-06 12:00:09 -04:00
xlog.h Revert "Allow on-line enabling and disabling of data checksums" 2018-04-09 19:03:42 +02:00
xlog_internal.h Flip argument order in XLogSegNoOffsetToRecPtr 2018-07-09 14:33:38 -04:00
xlogdefs.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
xloginsert.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
xlogreader.h pgindent run prior to branching 2018-06-30 12:25:49 -04:00
xlogrecord.h Update copyright for 2018 2018-01-02 23:30:12 -05:00
xlogutils.h Update copyright for 2018 2018-01-02 23:30:12 -05:00