aboutsummaryrefslogtreecommitdiff
path: root/src/include/access
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2017-11-13 18:45:47 -0800
committerAndres Freund <andres@anarazel.de>2017-12-14 18:20:48 -0800
commit94d1c88103ff17fde7da20b98446ed6150170487 (patch)
treec035d48072b7f7374b4f030312e69098663b71db /src/include/access
parent32c0295b10878a74a4064c4e8e41b14a2206c0d5 (diff)
downloadpostgresql-94d1c88103ff17fde7da20b98446ed6150170487.tar.gz
postgresql-94d1c88103ff17fde7da20b98446ed6150170487.zip
Perform a lot more sanity checks when freezing tuples.
The previous commit has shown that the sanity checks around freezing aren't strong enough. Strengthening them seems especially important because the existance of the bug has caused corruption that we don't want to make even worse during future vacuum cycles. The errors are emitted with ereport rather than elog, despite being "should never happen" messages, so a proper error code is emitted. To avoid superflous translations, mark messages as internal. Author: Andres Freund and Alvaro Herrera Reviewed-By: Alvaro Herrera, Michael Paquier Discussion: https://postgr.es/m/20171102112019.33wb7g5wp4zpjelu@alap3.anarazel.de Backpatch: 9.3-
Diffstat (limited to 'src/include/access')
-rw-r--r--src/include/access/heapam.h5
-rw-r--r--src/include/access/heapam_xlog.h2
2 files changed, 5 insertions, 2 deletions
diff --git a/src/include/access/heapam.h b/src/include/access/heapam.h
index 75e6b72f9e0..4cba28882a2 100644
--- a/src/include/access/heapam.h
+++ b/src/include/access/heapam.h
@@ -160,8 +160,9 @@ extern HTSU_Result heap_lock_tuple(Relation relation, HeapTuple tuple,
bool follow_update,
Buffer *buffer, HeapUpdateFailureData *hufd);
extern void heap_inplace_update(Relation relation, HeapTuple tuple);
-extern bool heap_freeze_tuple(HeapTupleHeader tuple, TransactionId cutoff_xid,
- TransactionId cutoff_multi);
+extern bool heap_freeze_tuple(HeapTupleHeader tuple,
+ TransactionId relfrozenxid, TransactionId relminmxid,
+ TransactionId cutoff_xid, TransactionId cutoff_multi);
extern bool heap_tuple_needs_freeze(HeapTupleHeader tuple, TransactionId cutoff_xid,
MultiXactId cutoff_multi, Buffer buf);
diff --git a/src/include/access/heapam_xlog.h b/src/include/access/heapam_xlog.h
index 2a3ce355d99..cbfe826d602 100644
--- a/src/include/access/heapam_xlog.h
+++ b/src/include/access/heapam_xlog.h
@@ -377,6 +377,8 @@ extern XLogRecPtr log_heap_freeze(Relation reln, Buffer buffer,
TransactionId cutoff_xid, xl_heap_freeze_tuple *tuples,
int ntuples);
extern bool heap_prepare_freeze_tuple(HeapTupleHeader tuple,
+ TransactionId relfrozenxid,
+ TransactionId relminmxid,
TransactionId cutoff_xid,
TransactionId cutoff_multi,
xl_heap_freeze_tuple *frz);