Age Owner Branch data TLA Line data Source code
1 : : /*-------------------------------------------------------------------------
2 : : *
3 : : * heapdesc.c
4 : : * rmgr descriptor routines for access/heap/heapam.c
5 : : *
6 : : * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
7 : : * Portions Copyright (c) 1994, Regents of the University of California
8 : : *
9 : : *
10 : : * IDENTIFICATION
11 : : * src/backend/access/rmgrdesc/heapdesc.c
12 : : *
13 : : *-------------------------------------------------------------------------
14 : : */
15 : : #include "postgres.h"
16 : :
17 : : #include "access/heapam_xlog.h"
18 : : #include "access/rmgrdesc_utils.h"
19 : :
20 : : /*
21 : : * NOTE: "keyname" argument cannot have trailing spaces or punctuation
22 : : * characters
23 : : */
24 : : static void
369 pg@bowt.ie 25 :CBC 62175 : infobits_desc(StringInfo buf, uint8 infobits, const char *keyname)
26 : : {
27 : 62175 : appendStringInfo(buf, "%s: [", keyname);
28 : :
29 [ - + ]: 62175 : Assert(buf->data[buf->len - 1] != ' ');
30 : :
4099 alvherre@alvh.no-ip. 31 [ - + ]: 62175 : if (infobits & XLHL_XMAX_IS_MULTI)
369 pg@bowt.ie 32 :UBC 0 : appendStringInfoString(buf, "IS_MULTI, ");
4099 alvherre@alvh.no-ip. 33 [ + + ]:CBC 62175 : if (infobits & XLHL_XMAX_LOCK_ONLY)
369 pg@bowt.ie 34 : 30493 : appendStringInfoString(buf, "LOCK_ONLY, ");
4099 alvherre@alvh.no-ip. 35 [ + + ]: 62175 : if (infobits & XLHL_XMAX_EXCL_LOCK)
369 pg@bowt.ie 36 : 30493 : appendStringInfoString(buf, "EXCL_LOCK, ");
4099 alvherre@alvh.no-ip. 37 [ - + ]: 62175 : if (infobits & XLHL_XMAX_KEYSHR_LOCK)
369 pg@bowt.ie 38 :UBC 0 : appendStringInfoString(buf, "KEYSHR_LOCK, ");
4099 alvherre@alvh.no-ip. 39 [ + + ]:CBC 62175 : if (infobits & XLHL_KEYS_UPDATED)
369 pg@bowt.ie 40 : 335 : appendStringInfoString(buf, "KEYS_UPDATED, ");
41 : :
42 [ + + ]: 62175 : if (buf->data[buf->len - 1] == ' ')
43 : : {
44 : : /* Truncate-away final unneeded ", " */
45 [ - + ]: 30828 : Assert(buf->data[buf->len - 2] == ',');
46 : 30828 : buf->len -= 2;
47 : 30828 : buf->data[buf->len] = '\0';
48 : : }
49 : :
194 drowley@postgresql.o 50 :GNC 62175 : appendStringInfoChar(buf, ']');
369 pg@bowt.ie 51 :CBC 62175 : }
52 : :
53 : : static void
369 pg@bowt.ie 54 :GBC 6 : truncate_flags_desc(StringInfo buf, uint8 flags)
55 : : {
56 : 6 : appendStringInfoString(buf, "flags: [");
57 : :
58 [ - + ]: 6 : if (flags & XLH_TRUNCATE_CASCADE)
369 pg@bowt.ie 59 :UBC 0 : appendStringInfoString(buf, "CASCADE, ");
369 pg@bowt.ie 60 [ - + ]:GBC 6 : if (flags & XLH_TRUNCATE_RESTART_SEQS)
369 pg@bowt.ie 61 :UBC 0 : appendStringInfoString(buf, "RESTART_SEQS, ");
62 : :
369 pg@bowt.ie 63 [ - + ]:GBC 6 : if (buf->data[buf->len - 1] == ' ')
64 : : {
65 : : /* Truncate-away final unneeded ", " */
369 pg@bowt.ie 66 [ # # ]:UBC 0 : Assert(buf->data[buf->len - 2] == ',');
67 : 0 : buf->len -= 2;
68 : 0 : buf->data[buf->len] = '\0';
69 : : }
70 : :
194 drowley@postgresql.o 71 :GNC 6 : appendStringInfoChar(buf, ']');
373 pg@bowt.ie 72 :GBC 6 : }
73 : :
74 : : static void
75 : 624 : plan_elem_desc(StringInfo buf, void *plan, void *data)
76 : : {
20 heikki.linnakangas@i 77 :GNC 624 : xlhp_freeze_plan *new_plan = (xlhp_freeze_plan *) plan;
373 pg@bowt.ie 78 :GBC 624 : OffsetNumber **offsets = data;
79 : :
80 : 624 : appendStringInfo(buf, "{ xmax: %u, infomask: %u, infomask2: %u, ntuples: %u",
81 : : new_plan->xmax,
82 : 624 : new_plan->t_infomask, new_plan->t_infomask2,
83 : 624 : new_plan->ntuples);
84 : :
85 : 624 : appendStringInfoString(buf, ", offsets:");
86 : 624 : array_desc(buf, *offsets, sizeof(OffsetNumber), new_plan->ntuples,
87 : : &offset_elem_desc, NULL);
88 : :
89 : 624 : *offsets += new_plan->ntuples;
90 : :
194 drowley@postgresql.o 91 :GNC 624 : appendStringInfoString(buf, " }");
4099 alvherre@alvh.no-ip. 92 : 624 : }
93 : :
94 : :
95 : : /*
96 : : * Given a MAXALIGNed buffer returned by XLogRecGetBlockData() and pointed to
97 : : * by cursor and any xl_heap_prune flags, deserialize the arrays of
98 : : * OffsetNumbers contained in an XLOG_HEAP2_PRUNE_* record.
99 : : *
100 : : * This is in heapdesc.c so it can be shared between heap2_redo and heap2_desc
101 : : * code, the latter of which is used in frontend (pg_waldump) code.
102 : : */
103 : : void
20 heikki.linnakangas@i 104 : 13523 : heap_xlog_deserialize_prune_and_freeze(char *cursor, uint8 flags,
105 : : int *nplans, xlhp_freeze_plan **plans,
106 : : OffsetNumber **frz_offsets,
107 : : int *nredirected, OffsetNumber **redirected,
108 : : int *ndead, OffsetNumber **nowdead,
109 : : int *nunused, OffsetNumber **nowunused)
110 : : {
111 [ + + ]: 13523 : if (flags & XLHP_HAS_FREEZE_PLANS)
112 : : {
113 : 1016 : xlhp_freeze_plans *freeze_plans = (xlhp_freeze_plans *) cursor;
114 : :
115 : 1016 : *nplans = freeze_plans->nplans;
116 [ - + ]: 1016 : Assert(*nplans > 0);
117 : 1016 : *plans = freeze_plans->plans;
118 : :
119 : 1016 : cursor += offsetof(xlhp_freeze_plans, plans);
120 : 1016 : cursor += sizeof(xlhp_freeze_plan) * *nplans;
121 : : }
122 : : else
123 : : {
124 : 12507 : *nplans = 0;
125 : 12507 : *plans = NULL;
126 : : }
127 : :
128 [ + + ]: 13523 : if (flags & XLHP_HAS_REDIRECTIONS)
129 : : {
130 : 2043 : xlhp_prune_items *subrecord = (xlhp_prune_items *) cursor;
131 : :
132 : 2043 : *nredirected = subrecord->ntargets;
133 [ - + ]: 2043 : Assert(*nredirected > 0);
134 : 2043 : *redirected = &subrecord->data[0];
135 : :
136 : 2043 : cursor += offsetof(xlhp_prune_items, data);
137 : 2043 : cursor += sizeof(OffsetNumber[2]) * *nredirected;
138 : : }
139 : : else
140 : : {
141 : 11480 : *nredirected = 0;
142 : 11480 : *redirected = NULL;
143 : : }
144 : :
145 [ + + ]: 13523 : if (flags & XLHP_HAS_DEAD_ITEMS)
146 : : {
147 : 7466 : xlhp_prune_items *subrecord = (xlhp_prune_items *) cursor;
148 : :
149 : 7466 : *ndead = subrecord->ntargets;
150 [ - + ]: 7466 : Assert(*ndead > 0);
151 : 7466 : *nowdead = subrecord->data;
152 : :
153 : 7466 : cursor += offsetof(xlhp_prune_items, data);
154 : 7466 : cursor += sizeof(OffsetNumber) * *ndead;
155 : : }
156 : : else
157 : : {
158 : 6057 : *ndead = 0;
159 : 6057 : *nowdead = NULL;
160 : : }
161 : :
162 [ + + ]: 13523 : if (flags & XLHP_HAS_NOW_UNUSED_ITEMS)
163 : : {
164 : 5651 : xlhp_prune_items *subrecord = (xlhp_prune_items *) cursor;
165 : :
166 : 5651 : *nunused = subrecord->ntargets;
167 [ - + ]: 5651 : Assert(*nunused > 0);
168 : 5651 : *nowunused = subrecord->data;
169 : :
170 : 5651 : cursor += offsetof(xlhp_prune_items, data);
171 : 5651 : cursor += sizeof(OffsetNumber) * *nunused;
172 : : }
173 : : else
174 : : {
175 : 7872 : *nunused = 0;
176 : 7872 : *nowunused = NULL;
177 : : }
178 : :
179 : 13523 : *frz_offsets = (OffsetNumber *) cursor;
20 heikki.linnakangas@i 180 :GBC 13523 : }
181 : :
182 : : void
3433 heikki.linnakangas@i 183 :CBC 167515 : heap_desc(StringInfo buf, XLogReaderState *record)
184 : : {
3592 185 : 167515 : char *rec = XLogRecGetData(record);
3433 186 : 167515 : uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
187 : :
4155 alvherre@alvh.no-ip. 188 : 167515 : info &= XLOG_HEAP_OPMASK;
189 [ + + ]: 167515 : if (info == XLOG_HEAP_INSERT)
190 : : {
191 : 104009 : xl_heap_insert *xlrec = (xl_heap_insert *) rec;
192 : :
373 pg@bowt.ie 193 : 104009 : appendStringInfo(buf, "off: %u, flags: 0x%02X",
194 : 104009 : xlrec->offnum,
1978 michael@paquier.xyz 195 : 104009 : xlrec->flags);
196 : : }
4155 alvherre@alvh.no-ip. 197 [ + + ]: 63506 : else if (info == XLOG_HEAP_DELETE)
198 : : {
199 : 335 : xl_heap_delete *xlrec = (xl_heap_delete *) rec;
200 : :
369 pg@bowt.ie 201 : 335 : appendStringInfo(buf, "xmax: %u, off: %u, ",
202 : 335 : xlrec->xmax, xlrec->offnum);
203 : 335 : infobits_desc(buf, xlrec->infobits_set, "infobits");
204 : 335 : appendStringInfo(buf, ", flags: 0x%02X", xlrec->flags);
205 : : }
4155 alvherre@alvh.no-ip. 206 [ + + ]: 63171 : else if (info == XLOG_HEAP_UPDATE)
207 : : {
208 : 30524 : xl_heap_update *xlrec = (xl_heap_update *) rec;
209 : :
369 pg@bowt.ie 210 : 30524 : appendStringInfo(buf, "old_xmax: %u, old_off: %u, ",
211 : 30524 : xlrec->old_xmax, xlrec->old_offnum);
212 : 30524 : infobits_desc(buf, xlrec->old_infobits_set, "old_infobits");
213 : 30524 : appendStringInfo(buf, ", flags: 0x%02X, new_xmax: %u, new_off: %u",
214 : 30524 : xlrec->flags, xlrec->new_xmax, xlrec->new_offnum);
215 : : }
4155 alvherre@alvh.no-ip. 216 [ + + ]: 32647 : else if (info == XLOG_HEAP_HOT_UPDATE)
217 : : {
218 : 823 : xl_heap_update *xlrec = (xl_heap_update *) rec;
219 : :
369 pg@bowt.ie 220 : 823 : appendStringInfo(buf, "old_xmax: %u, old_off: %u, ",
221 : 823 : xlrec->old_xmax, xlrec->old_offnum);
222 : 823 : infobits_desc(buf, xlrec->old_infobits_set, "old_infobits");
223 : 823 : appendStringInfo(buf, ", flags: 0x%02X, new_xmax: %u, new_off: %u",
224 : 823 : xlrec->flags, xlrec->new_xmax, xlrec->new_offnum);
225 : : }
2199 peter_e@gmx.net 226 [ + + ]: 31824 : else if (info == XLOG_HEAP_TRUNCATE)
227 : : {
2199 peter_e@gmx.net 228 :GBC 6 : xl_heap_truncate *xlrec = (xl_heap_truncate *) rec;
229 : :
369 pg@bowt.ie 230 : 6 : truncate_flags_desc(buf, xlrec->flags);
373 231 : 6 : appendStringInfo(buf, ", nrelids: %u", xlrec->nrelids);
232 : 6 : appendStringInfoString(buf, ", relids:");
233 : 6 : array_desc(buf, xlrec->relids, sizeof(Oid), xlrec->nrelids,
234 : : &oid_elem_desc, NULL);
235 : : }
3264 andres@anarazel.de 236 [ - + ]:CBC 31818 : else if (info == XLOG_HEAP_CONFIRM)
237 : : {
3264 andres@anarazel.de 238 :UBC 0 : xl_heap_confirm *xlrec = (xl_heap_confirm *) rec;
239 : :
373 pg@bowt.ie 240 : 0 : appendStringInfo(buf, "off: %u", xlrec->offnum);
241 : : }
4155 alvherre@alvh.no-ip. 242 [ + + ]:CBC 31818 : else if (info == XLOG_HEAP_LOCK)
243 : : {
244 : 30493 : xl_heap_lock *xlrec = (xl_heap_lock *) rec;
245 : :
369 pg@bowt.ie 246 : 30493 : appendStringInfo(buf, "xmax: %u, off: %u, ",
247 : 30493 : xlrec->xmax, xlrec->offnum);
248 : 30493 : infobits_desc(buf, xlrec->infobits_set, "infobits");
249 : 30493 : appendStringInfo(buf, ", flags: 0x%02X", xlrec->flags);
250 : : }
4155 alvherre@alvh.no-ip. 251 [ + - ]: 1325 : else if (info == XLOG_HEAP_INPLACE)
252 : : {
253 : 1325 : xl_heap_inplace *xlrec = (xl_heap_inplace *) rec;
254 : :
373 pg@bowt.ie 255 : 1325 : appendStringInfo(buf, "off: %u", xlrec->offnum);
256 : : }
4155 alvherre@alvh.no-ip. 257 : 167515 : }
258 : :
259 : : void
3433 heikki.linnakangas@i 260 : 8890 : heap2_desc(StringInfo buf, XLogReaderState *record)
261 : : {
3592 262 : 8890 : char *rec = XLogRecGetData(record);
3433 263 : 8890 : uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
264 : :
4155 alvherre@alvh.no-ip. 265 : 8890 : info &= XLOG_HEAP_OPMASK;
20 heikki.linnakangas@i 266 [ + + + + ]:GNC 8890 : if (info == XLOG_HEAP2_PRUNE_ON_ACCESS ||
267 [ + + ]: 7598 : info == XLOG_HEAP2_PRUNE_VACUUM_SCAN ||
268 : : info == XLOG_HEAP2_PRUNE_VACUUM_CLEANUP)
4155 alvherre@alvh.no-ip. 269 :GIC 1572 : {
1104 pg@bowt.ie 270 :CBC 1572 : xl_heap_prune *xlrec = (xl_heap_prune *) rec;
271 : :
20 heikki.linnakangas@i 272 [ + + ]:GNC 1572 : if (xlrec->flags & XLHP_HAS_CONFLICT_HORIZON)
273 : : {
274 : : TransactionId conflict_xid;
275 : :
276 : 1198 : memcpy(&conflict_xid, rec + SizeOfHeapPrune, sizeof(TransactionId));
277 : :
278 : 1198 : appendStringInfo(buf, "snapshotConflictHorizon: %u",
279 : : conflict_xid);
280 : : }
281 : :
282 : 1572 : appendStringInfo(buf, ", isCatalogRel: %c",
283 [ + + ]: 1572 : xlrec->flags & XLHP_IS_CATALOG_REL ? 'T' : 'F');
284 : :
361 pg@bowt.ie 285 [ + + ]:CBC 1572 : if (XLogRecHasBlockData(record, 0))
286 : : {
287 : : Size datalen;
288 : : OffsetNumber *redirected;
289 : : OffsetNumber *nowdead;
290 : : OffsetNumber *nowunused;
291 : : int nredirected;
292 : : int nunused;
293 : : int ndead;
294 : : int nplans;
295 : : xlhp_freeze_plan *plans;
296 : : OffsetNumber *frz_offsets;
297 : :
20 heikki.linnakangas@i 298 :GNC 1565 : char *cursor = XLogRecGetBlockData(record, 0, &datalen);
299 : :
300 : 1565 : heap_xlog_deserialize_prune_and_freeze(cursor, xlrec->flags,
301 : : &nplans, &plans, &frz_offsets,
302 : : &nredirected, &redirected,
303 : : &ndead, &nowdead,
304 : : &nunused, &nowunused);
305 : :
306 : 1565 : appendStringInfo(buf, ", nplans: %u, nredirected: %u, ndead: %u, nunused: %u",
307 : : nplans, nredirected, ndead, nunused);
308 : :
309 [ + + ]: 1565 : if (nplans > 0)
310 : : {
311 : 516 : appendStringInfoString(buf, ", plans:");
312 : 516 : array_desc(buf, plans, sizeof(xlhp_freeze_plan), nplans,
313 : : &plan_elem_desc, &frz_offsets);
314 : : }
315 : :
316 [ + + ]: 1565 : if (nredirected > 0)
317 : : {
318 : 357 : appendStringInfoString(buf, ", redirected:");
319 : 357 : array_desc(buf, redirected, sizeof(OffsetNumber) * 2,
320 : : nredirected, &redirect_elem_desc, NULL);
321 : : }
322 : :
323 [ + + ]: 1565 : if (ndead > 0)
324 : : {
325 : 447 : appendStringInfoString(buf, ", dead:");
326 : 447 : array_desc(buf, nowdead, sizeof(OffsetNumber), ndead,
327 : : &offset_elem_desc, NULL);
328 : : }
329 : :
330 [ + + ]: 1565 : if (nunused > 0)
331 : : {
332 : 375 : appendStringInfoString(buf, ", unused:");
333 : 375 : array_desc(buf, nowunused, sizeof(OffsetNumber), nunused,
334 : : &offset_elem_desc, NULL);
335 : : }
336 : : }
337 : : }
4155 alvherre@alvh.no-ip. 338 [ + + ]:CBC 7318 : else if (info == XLOG_HEAP2_VISIBLE)
339 : : {
340 : 1574 : xl_heap_visible *xlrec = (xl_heap_visible *) rec;
341 : :
373 pg@bowt.ie 342 : 1574 : appendStringInfo(buf, "snapshotConflictHorizon: %u, flags: 0x%02X",
514 343 : 1574 : xlrec->snapshotConflictHorizon, xlrec->flags);
344 : : }
4155 alvherre@alvh.no-ip. 345 [ + + ]: 5744 : else if (info == XLOG_HEAP2_MULTI_INSERT)
346 : : {
347 : 3865 : xl_heap_multi_insert *xlrec = (xl_heap_multi_insert *) rec;
373 pg@bowt.ie 348 : 3865 : bool isinit = (XLogRecGetInfo(record) & XLOG_HEAP_INIT_PAGE) != 0;
349 : :
350 : 3865 : appendStringInfo(buf, "ntuples: %d, flags: 0x%02X", xlrec->ntuples,
1978 michael@paquier.xyz 351 : 3865 : xlrec->flags);
352 : :
361 pg@bowt.ie 353 [ + + + + ]: 3865 : if (XLogRecHasBlockData(record, 0) && !isinit)
354 : : {
369 355 : 3711 : appendStringInfoString(buf, ", offsets:");
373 356 : 3711 : array_desc(buf, xlrec->offsets, sizeof(OffsetNumber),
357 : 3711 : xlrec->ntuples, &offset_elem_desc, NULL);
358 : : }
359 : : }
4099 alvherre@alvh.no-ip. 360 [ - + ]:GBC 1879 : else if (info == XLOG_HEAP2_LOCK_UPDATED)
361 : : {
4099 alvherre@alvh.no-ip. 362 :UBC 0 : xl_heap_lock_updated *xlrec = (xl_heap_lock_updated *) rec;
363 : :
369 pg@bowt.ie 364 : 0 : appendStringInfo(buf, "xmax: %u, off: %u, ",
365 : 0 : xlrec->xmax, xlrec->offnum);
366 : 0 : infobits_desc(buf, xlrec->infobits_set, "infobits");
367 : 0 : appendStringInfo(buf, ", flags: 0x%02X", xlrec->flags);
368 : : }
3778 rhaas@postgresql.org 369 [ + - ]:GBC 1879 : else if (info == XLOG_HEAP2_NEW_CID)
370 : : {
371 : 1879 : xl_heap_new_cid *xlrec = (xl_heap_new_cid *) rec;
372 : :
373 pg@bowt.ie 373 : 1879 : appendStringInfo(buf, "rel: %u/%u/%u, tid: %u/%u",
374 : : xlrec->target_locator.spcOid,
375 : : xlrec->target_locator.dbOid,
376 : : xlrec->target_locator.relNumber,
3433 heikki.linnakangas@i 377 : 1879 : ItemPointerGetBlockNumber(&(xlrec->target_tid)),
378 : 1879 : ItemPointerGetOffsetNumber(&(xlrec->target_tid)));
373 pg@bowt.ie 379 : 1879 : appendStringInfo(buf, ", cmin: %u, cmax: %u, combo: %u",
380 : : xlrec->cmin, xlrec->cmax, xlrec->combocid);
381 : : }
3495 andres@anarazel.de 382 :CBC 8890 : }
383 : :
384 : : const char *
385 : 167524 : heap_identify(uint8 info)
386 : : {
387 : 167524 : const char *id = NULL;
388 : :
3492 389 [ + + + + : 167524 : switch (info & ~XLR_INFO_MASK)
+ + - + -
+ + - ]
390 : : {
3495 391 : 101875 : case XLOG_HEAP_INSERT:
392 : 101875 : id = "INSERT";
393 : 101875 : break;
3492 394 : 2136 : case XLOG_HEAP_INSERT | XLOG_HEAP_INIT_PAGE:
395 : 2136 : id = "INSERT+INIT";
396 : 2136 : break;
3495 397 : 336 : case XLOG_HEAP_DELETE:
398 : 336 : id = "DELETE";
399 : 336 : break;
400 : 30302 : case XLOG_HEAP_UPDATE:
401 : 30302 : id = "UPDATE";
402 : 30302 : break;
3492 andres@anarazel.de 403 :GBC 224 : case XLOG_HEAP_UPDATE | XLOG_HEAP_INIT_PAGE:
404 : 224 : id = "UPDATE+INIT";
405 : 224 : break;
3495 andres@anarazel.de 406 :CBC 824 : case XLOG_HEAP_HOT_UPDATE:
407 : 824 : id = "HOT_UPDATE";
408 : 824 : break;
3492 andres@anarazel.de 409 :UBC 0 : case XLOG_HEAP_HOT_UPDATE | XLOG_HEAP_INIT_PAGE:
410 : 0 : id = "HOT_UPDATE+INIT";
411 : 0 : break;
2199 peter_e@gmx.net 412 :GBC 7 : case XLOG_HEAP_TRUNCATE:
413 : 7 : id = "TRUNCATE";
414 : 7 : break;
3264 andres@anarazel.de 415 :UBC 0 : case XLOG_HEAP_CONFIRM:
416 : 0 : id = "HEAP_CONFIRM";
417 : 0 : break;
3495 andres@anarazel.de 418 :CBC 30494 : case XLOG_HEAP_LOCK:
419 : 30494 : id = "LOCK";
420 : 30494 : break;
421 : 1326 : case XLOG_HEAP_INPLACE:
422 : 1326 : id = "INPLACE";
423 : 1326 : break;
424 : : }
425 : :
426 : 167524 : return id;
427 : : }
428 : :
429 : : const char *
430 : 8897 : heap2_identify(uint8 info)
431 : : {
432 : 8897 : const char *id = NULL;
433 : :
3492 434 [ + + + + : 8897 : switch (info & ~XLR_INFO_MASK)
+ + - + -
- ]
435 : : {
20 heikki.linnakangas@i 436 :GNC 584 : case XLOG_HEAP2_PRUNE_ON_ACCESS:
437 : 584 : id = "PRUNE_ON_ACCESS";
1104 pg@bowt.ie 438 :CBC 584 : break;
20 heikki.linnakangas@i 439 :GNC 710 : case XLOG_HEAP2_PRUNE_VACUUM_SCAN:
440 : 710 : id = "PRUNE_VACUUM_SCAN";
3495 andres@anarazel.de 441 :CBC 710 : break;
20 heikki.linnakangas@i 442 :GNC 281 : case XLOG_HEAP2_PRUNE_VACUUM_CLEANUP:
443 : 281 : id = "PRUNE_VACUUM_CLEANUP";
3495 andres@anarazel.de 444 :GBC 281 : break;
3495 andres@anarazel.de 445 :CBC 1575 : case XLOG_HEAP2_VISIBLE:
446 : 1575 : id = "VISIBLE";
447 : 1575 : break;
448 : 3754 : case XLOG_HEAP2_MULTI_INSERT:
449 : 3754 : id = "MULTI_INSERT";
450 : 3754 : break;
3492 andres@anarazel.de 451 :GBC 113 : case XLOG_HEAP2_MULTI_INSERT | XLOG_HEAP_INIT_PAGE:
452 : 113 : id = "MULTI_INSERT+INIT";
453 : 113 : break;
3495 andres@anarazel.de 454 :UBC 0 : case XLOG_HEAP2_LOCK_UPDATED:
455 : 0 : id = "LOCK_UPDATED";
456 : 0 : break;
3495 andres@anarazel.de 457 :GBC 1880 : case XLOG_HEAP2_NEW_CID:
458 : 1880 : id = "NEW_CID";
459 : 1880 : break;
3495 andres@anarazel.de 460 :UBC 0 : case XLOG_HEAP2_REWRITE:
461 : 0 : id = "REWRITE";
462 : 0 : break;
463 : : }
464 : :
3495 andres@anarazel.de 465 :CBC 8897 : return id;
466 : : }
|