Coverage Report

Created: 2025-07-03 06:49

/src/postgres/src/include/utils/rel.h
Line
Count
Source (jump to first uncovered line)
1
/*-------------------------------------------------------------------------
2
 *
3
 * rel.h
4
 *    POSTGRES relation descriptor (a/k/a relcache entry) definitions.
5
 *
6
 *
7
 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
8
 * Portions Copyright (c) 1994, Regents of the University of California
9
 *
10
 * src/include/utils/rel.h
11
 *
12
 *-------------------------------------------------------------------------
13
 */
14
#ifndef REL_H
15
#define REL_H
16
17
#include "access/tupdesc.h"
18
#include "access/xlog.h"
19
#include "catalog/catalog.h"
20
#include "catalog/pg_class.h"
21
#include "catalog/pg_index.h"
22
#include "catalog/pg_publication.h"
23
#include "nodes/bitmapset.h"
24
#include "partitioning/partdefs.h"
25
#include "rewrite/prs2lock.h"
26
#include "storage/block.h"
27
#include "storage/relfilelocator.h"
28
#include "storage/smgr.h"
29
#include "utils/relcache.h"
30
#include "utils/reltrigger.h"
31
32
33
/*
34
 * LockRelId and LockInfo really belong to lmgr.h, but it's more convenient
35
 * to declare them here so we can have a LockInfoData field in a Relation.
36
 */
37
38
typedef struct LockRelId
39
{
40
  Oid     relId;      /* a relation identifier */
41
  Oid     dbId;     /* a database identifier */
42
} LockRelId;
43
44
typedef struct LockInfoData
45
{
46
  LockRelId lockRelId;
47
} LockInfoData;
48
49
typedef LockInfoData *LockInfo;
50
51
/*
52
 * Here are the contents of a relation cache entry.
53
 */
54
55
typedef struct RelationData
56
{
57
  RelFileLocator rd_locator;  /* relation physical identifier */
58
  SMgrRelation rd_smgr;   /* cached file handle, or NULL */
59
  int     rd_refcnt;    /* reference count */
60
  ProcNumber  rd_backend;   /* owning backend's proc number, if temp rel */
61
  bool    rd_islocaltemp; /* rel is a temp rel of this session */
62
  bool    rd_isnailed;  /* rel is nailed in cache */
63
  bool    rd_isvalid;   /* relcache entry is valid */
64
  bool    rd_indexvalid;  /* is rd_indexlist valid? (also rd_pkindex and
65
                 * rd_replidindex) */
66
  bool    rd_statvalid; /* is rd_statlist valid? */
67
68
  /*----------
69
   * rd_createSubid is the ID of the highest subtransaction the rel has
70
   * survived into or zero if the rel or its storage was created before the
71
   * current top transaction.  (IndexStmt.oldNumber leads to the case of a new
72
   * rel with an old rd_locator.)  rd_firstRelfilelocatorSubid is the ID of the
73
   * highest subtransaction an rd_locator change has survived into or zero if
74
   * rd_locator matches the value it had at the start of the current top
75
   * transaction.  (Rolling back the subtransaction that
76
   * rd_firstRelfilelocatorSubid denotes would restore rd_locator to the value it
77
   * had at the start of the current top transaction.  Rolling back any
78
   * lower subtransaction would not.)  Their accuracy is critical to
79
   * RelationNeedsWAL().
80
   *
81
   * rd_newRelfilelocatorSubid is the ID of the highest subtransaction the
82
   * most-recent relfilenumber change has survived into or zero if not changed
83
   * in the current transaction (or we have forgotten changing it).  This
84
   * field is accurate when non-zero, but it can be zero when a relation has
85
   * multiple new relfilenumbers within a single transaction, with one of them
86
   * occurring in a subsequently aborted subtransaction, e.g.
87
   *    BEGIN;
88
   *    TRUNCATE t;
89
   *    SAVEPOINT save;
90
   *    TRUNCATE t;
91
   *    ROLLBACK TO save;
92
   *    -- rd_newRelfilelocatorSubid is now forgotten
93
   *
94
   * If every rd_*Subid field is zero, they are read-only outside
95
   * relcache.c.  Files that trigger rd_locator changes by updating
96
   * pg_class.reltablespace and/or pg_class.relfilenode call
97
   * RelationAssumeNewRelfilelocator() to update rd_*Subid.
98
   *
99
   * rd_droppedSubid is the ID of the highest subtransaction that a drop of
100
   * the rel has survived into.  In entries visible outside relcache.c, this
101
   * is always zero.
102
   */
103
  SubTransactionId rd_createSubid;  /* rel was created in current xact */
104
  SubTransactionId rd_newRelfilelocatorSubid; /* highest subxact changing
105
                         * rd_locator to current value */
106
  SubTransactionId rd_firstRelfilelocatorSubid; /* highest subxact
107
                           * changing rd_locator to
108
                           * any value */
109
  SubTransactionId rd_droppedSubid; /* dropped with another Subid set */
110
111
  Form_pg_class rd_rel;   /* RELATION tuple */
112
  TupleDesc rd_att;     /* tuple descriptor */
113
  Oid     rd_id;      /* relation's object id */
114
  LockInfoData rd_lockInfo; /* lock mgr's info for locking relation */
115
  RuleLock   *rd_rules;   /* rewrite rules */
116
  MemoryContext rd_rulescxt;  /* private memory cxt for rd_rules, if any */
117
  TriggerDesc *trigdesc;    /* Trigger info, or NULL if rel has none */
118
  /* use "struct" here to avoid needing to include rowsecurity.h: */
119
  struct RowSecurityDesc *rd_rsdesc;  /* row security policies, or NULL */
120
121
  /* data managed by RelationGetFKeyList: */
122
  List     *rd_fkeylist;  /* list of ForeignKeyCacheInfo (see below) */
123
  bool    rd_fkeyvalid; /* true if list has been computed */
124
125
  /* data managed by RelationGetPartitionKey: */
126
  PartitionKey rd_partkey;  /* partition key, or NULL */
127
  MemoryContext rd_partkeycxt;  /* private context for rd_partkey, if any */
128
129
  /* data managed by RelationGetPartitionDesc: */
130
  PartitionDesc rd_partdesc;  /* partition descriptor, or NULL */
131
  MemoryContext rd_pdcxt;   /* private context for rd_partdesc, if any */
132
133
  /* Same as above, for partdescs that omit detached partitions */
134
  PartitionDesc rd_partdesc_nodetached; /* partdesc w/o detached parts */
135
  MemoryContext rd_pddcxt;  /* for rd_partdesc_nodetached, if any */
136
137
  /*
138
   * pg_inherits.xmin of the partition that was excluded in
139
   * rd_partdesc_nodetached.  This informs a future user of that partdesc:
140
   * if this value is not in progress for the active snapshot, then the
141
   * partdesc can be used, otherwise they have to build a new one.  (This
142
   * matches what find_inheritance_children_extended would do).
143
   */
144
  TransactionId rd_partdesc_nodetached_xmin;
145
146
  /* data managed by RelationGetPartitionQual: */
147
  List     *rd_partcheck; /* partition CHECK quals */
148
  bool    rd_partcheckvalid;  /* true if list has been computed */
149
  MemoryContext rd_partcheckcxt;  /* private cxt for rd_partcheck, if any */
150
151
  /* data managed by RelationGetIndexList: */
152
  List     *rd_indexlist; /* list of OIDs of indexes on relation */
153
  Oid     rd_pkindex;   /* OID of (deferrable?) primary key, if any */
154
  bool    rd_ispkdeferrable;  /* is rd_pkindex a deferrable PK? */
155
  Oid     rd_replidindex; /* OID of replica identity index, if any */
156
157
  /* data managed by RelationGetStatExtList: */
158
  List     *rd_statlist;  /* list of OIDs of extended stats */
159
160
  /* data managed by RelationGetIndexAttrBitmap: */
161
  bool    rd_attrsvalid;  /* are bitmaps of attrs valid? */
162
  Bitmapset  *rd_keyattr;   /* cols that can be ref'd by foreign keys */
163
  Bitmapset  *rd_pkattr;    /* cols included in primary key */
164
  Bitmapset  *rd_idattr;    /* included in replica identity index */
165
  Bitmapset  *rd_hotblockingattr; /* cols blocking HOT update */
166
  Bitmapset  *rd_summarizedattr;  /* cols indexed by summarizing indexes */
167
168
  PublicationDesc *rd_pubdesc;  /* publication descriptor, or NULL */
169
170
  /*
171
   * rd_options is set whenever rd_rel is loaded into the relcache entry.
172
   * Note that you can NOT look into rd_rel for this data.  NULL means "use
173
   * defaults".
174
   */
175
  bytea    *rd_options;   /* parsed pg_class.reloptions */
176
177
  /*
178
   * Oid of the handler for this relation. For an index this is a function
179
   * returning IndexAmRoutine, for table like relations a function returning
180
   * TableAmRoutine.  This is stored separately from rd_indam, rd_tableam as
181
   * its lookup requires syscache access, but during relcache bootstrap we
182
   * need to be able to initialize rd_tableam without syscache lookups.
183
   */
184
  Oid     rd_amhandler; /* OID of index AM's handler function */
185
186
  /*
187
   * Table access method.
188
   */
189
  const struct TableAmRoutine *rd_tableam;
190
191
  /* These are non-NULL only for an index relation: */
192
  Form_pg_index rd_index;   /* pg_index tuple describing this index */
193
  /* use "struct" here to avoid needing to include htup.h: */
194
  struct HeapTupleData *rd_indextuple;  /* all of pg_index tuple */
195
196
  /*
197
   * index access support info (used only for an index relation)
198
   *
199
   * Note: only default support procs for each opclass are cached, namely
200
   * those with lefttype and righttype equal to the opclass's opcintype. The
201
   * arrays are indexed by support function number, which is a sufficient
202
   * identifier given that restriction.
203
   */
204
  MemoryContext rd_indexcxt;  /* private memory cxt for this stuff */
205
  /* use "struct" here to avoid needing to include amapi.h: */
206
  struct IndexAmRoutine *rd_indam;  /* index AM's API struct */
207
  Oid      *rd_opfamily;  /* OIDs of op families for each index col */
208
  Oid      *rd_opcintype; /* OIDs of opclass declared input data types */
209
  RegProcedure *rd_support; /* OIDs of support procedures */
210
  struct FmgrInfo *rd_supportinfo;  /* lookup info for support procedures */
211
  int16    *rd_indoption; /* per-column AM-specific flags */
212
  List     *rd_indexprs;  /* index expression trees, if any */
213
  List     *rd_indpred;   /* index predicate tree, if any */
214
  Oid      *rd_exclops;   /* OIDs of exclusion operators, if any */
215
  Oid      *rd_exclprocs; /* OIDs of exclusion ops' procs, if any */
216
  uint16     *rd_exclstrats;  /* exclusion ops' strategy numbers, if any */
217
  Oid      *rd_indcollation;  /* OIDs of index collations */
218
  bytea   **rd_opcoptions;  /* parsed opclass-specific options */
219
220
  /*
221
   * rd_amcache is available for index and table AMs to cache private data
222
   * about the relation.  This must be just a cache since it may get reset
223
   * at any time (in particular, it will get reset by a relcache inval
224
   * message for the relation).  If used, it must point to a single memory
225
   * chunk palloc'd in CacheMemoryContext, or in rd_indexcxt for an index
226
   * relation.  A relcache reset will include freeing that chunk and setting
227
   * rd_amcache = NULL.
228
   */
229
  void     *rd_amcache;   /* available for use by index/table AM */
230
231
  /*
232
   * foreign-table support
233
   *
234
   * rd_fdwroutine must point to a single memory chunk palloc'd in
235
   * CacheMemoryContext.  It will be freed and reset to NULL on a relcache
236
   * reset.
237
   */
238
239
  /* use "struct" here to avoid needing to include fdwapi.h: */
240
  struct FdwRoutine *rd_fdwroutine; /* cached function pointers, or NULL */
241
242
  /*
243
   * Hack for CLUSTER, rewriting ALTER TABLE, etc: when writing a new
244
   * version of a table, we need to make any toast pointers inserted into it
245
   * have the existing toast table's OID, not the OID of the transient toast
246
   * table.  If rd_toastoid isn't InvalidOid, it is the OID to place in
247
   * toast pointers inserted into this rel.  (Note it's set on the new
248
   * version of the main heap, not the toast table itself.)  This also
249
   * causes toast_save_datum() to try to preserve toast value OIDs.
250
   */
251
  Oid     rd_toastoid;  /* Real TOAST table's OID, or InvalidOid */
252
253
  bool    pgstat_enabled; /* should relation stats be counted */
254
  /* use "struct" here to avoid needing to include pgstat.h: */
255
  struct PgStat_TableStatus *pgstat_info; /* statistics collection area */
256
} RelationData;
257
258
259
/*
260
 * ForeignKeyCacheInfo
261
 *    Information the relcache can cache about foreign key constraints
262
 *
263
 * This is basically just an image of relevant columns from pg_constraint.
264
 * We make it a subclass of Node so that copyObject() can be used on a list
265
 * of these, but we also ensure it is a "flat" object without substructure,
266
 * so that list_free_deep() is sufficient to free such a list.
267
 * The per-FK-column arrays can be fixed-size because we allow at most
268
 * INDEX_MAX_KEYS columns in a foreign key constraint.
269
 *
270
 * Currently, we mostly cache fields of interest to the planner, but the set
271
 * of fields has already grown the constraint OID for other uses.
272
 */
273
typedef struct ForeignKeyCacheInfo
274
{
275
  pg_node_attr(no_equal, no_read, no_query_jumble)
276
277
  NodeTag   type;
278
  /* oid of the constraint itself */
279
  Oid     conoid;
280
  /* relation constrained by the foreign key */
281
  Oid     conrelid;
282
  /* relation referenced by the foreign key */
283
  Oid     confrelid;
284
  /* number of columns in the foreign key */
285
  int     nkeys;
286
287
  /* Is enforced ? */
288
  bool    conenforced;
289
290
  /*
291
   * these arrays each have nkeys valid entries:
292
   */
293
  /* cols in referencing table */
294
  AttrNumber  conkey[INDEX_MAX_KEYS] pg_node_attr(array_size(nkeys));
295
  /* cols in referenced table */
296
  AttrNumber  confkey[INDEX_MAX_KEYS] pg_node_attr(array_size(nkeys));
297
  /* PK = FK operator OIDs */
298
  Oid     conpfeqop[INDEX_MAX_KEYS] pg_node_attr(array_size(nkeys));
299
} ForeignKeyCacheInfo;
300
301
302
/*
303
 * StdRdOptions
304
 *    Standard contents of rd_options for heaps.
305
 *
306
 * RelationGetFillFactor() and RelationGetTargetPageFreeSpace() can only
307
 * be applied to relations that use this format or a superset for
308
 * private options data.
309
 */
310
 /* autovacuum-related reloptions. */
311
typedef struct AutoVacOpts
312
{
313
  bool    enabled;
314
  int     vacuum_threshold;
315
  int     vacuum_max_threshold;
316
  int     vacuum_ins_threshold;
317
  int     analyze_threshold;
318
  int     vacuum_cost_limit;
319
  int     freeze_min_age;
320
  int     freeze_max_age;
321
  int     freeze_table_age;
322
  int     multixact_freeze_min_age;
323
  int     multixact_freeze_max_age;
324
  int     multixact_freeze_table_age;
325
  int     log_min_duration;
326
  float8    vacuum_cost_delay;
327
  float8    vacuum_scale_factor;
328
  float8    vacuum_ins_scale_factor;
329
  float8    analyze_scale_factor;
330
} AutoVacOpts;
331
332
/* StdRdOptions->vacuum_index_cleanup values */
333
typedef enum StdRdOptIndexCleanup
334
{
335
  STDRD_OPTION_VACUUM_INDEX_CLEANUP_AUTO = 0,
336
  STDRD_OPTION_VACUUM_INDEX_CLEANUP_OFF,
337
  STDRD_OPTION_VACUUM_INDEX_CLEANUP_ON,
338
} StdRdOptIndexCleanup;
339
340
typedef struct StdRdOptions
341
{
342
  int32   vl_len_;    /* varlena header (do not touch directly!) */
343
  int     fillfactor;   /* page fill factor in percent (0..100) */
344
  int     toast_tuple_target; /* target for tuple toasting */
345
  AutoVacOpts autovacuum;   /* autovacuum-related options */
346
  bool    user_catalog_table; /* use as an additional catalog relation */
347
  int     parallel_workers; /* max number of parallel workers */
348
  StdRdOptIndexCleanup vacuum_index_cleanup;  /* controls index vacuuming */
349
  bool    vacuum_truncate;  /* enables vacuum to truncate a relation */
350
  bool    vacuum_truncate_set;  /* whether vacuum_truncate is set */
351
352
  /*
353
   * Fraction of pages in a relation that vacuum can eagerly scan and fail
354
   * to freeze. 0 if disabled, -1 if unspecified.
355
   */
356
  double    vacuum_max_eager_freeze_failure_rate;
357
} StdRdOptions;
358
359
#define HEAP_MIN_FILLFACTOR     10
360
#define HEAP_DEFAULT_FILLFACTOR   100
361
362
/*
363
 * RelationGetToastTupleTarget
364
 *    Returns the relation's toast_tuple_target.  Note multiple eval of argument!
365
 */
366
#define RelationGetToastTupleTarget(relation, defaulttarg) \
367
0
  ((relation)->rd_options ? \
368
0
   ((StdRdOptions *) (relation)->rd_options)->toast_tuple_target : (defaulttarg))
369
370
/*
371
 * RelationGetFillFactor
372
 *    Returns the relation's fillfactor.  Note multiple eval of argument!
373
 */
374
#define RelationGetFillFactor(relation, defaultff) \
375
0
  ((relation)->rd_options ? \
376
0
   ((StdRdOptions *) (relation)->rd_options)->fillfactor : (defaultff))
377
378
/*
379
 * RelationGetTargetPageUsage
380
 *    Returns the relation's desired space usage per page in bytes.
381
 */
382
#define RelationGetTargetPageUsage(relation, defaultff) \
383
  (BLCKSZ * RelationGetFillFactor(relation, defaultff) / 100)
384
385
/*
386
 * RelationGetTargetPageFreeSpace
387
 *    Returns the relation's desired freespace per page in bytes.
388
 */
389
#define RelationGetTargetPageFreeSpace(relation, defaultff) \
390
0
  (BLCKSZ * (100 - RelationGetFillFactor(relation, defaultff)) / 100)
391
392
/*
393
 * RelationIsUsedAsCatalogTable
394
 *    Returns whether the relation should be treated as a catalog table
395
 *    from the pov of logical decoding.  Note multiple eval of argument!
396
 */
397
#define RelationIsUsedAsCatalogTable(relation)  \
398
0
  ((relation)->rd_options && \
399
0
   ((relation)->rd_rel->relkind == RELKIND_RELATION || \
400
0
    (relation)->rd_rel->relkind == RELKIND_MATVIEW) ? \
401
0
   ((StdRdOptions *) (relation)->rd_options)->user_catalog_table : false)
402
403
/*
404
 * RelationGetParallelWorkers
405
 *    Returns the relation's parallel_workers reloption setting.
406
 *    Note multiple eval of argument!
407
 */
408
#define RelationGetParallelWorkers(relation, defaultpw) \
409
0
  ((relation)->rd_options ? \
410
0
   ((StdRdOptions *) (relation)->rd_options)->parallel_workers : (defaultpw))
411
412
/* ViewOptions->check_option values */
413
typedef enum ViewOptCheckOption
414
{
415
  VIEW_OPTION_CHECK_OPTION_NOT_SET,
416
  VIEW_OPTION_CHECK_OPTION_LOCAL,
417
  VIEW_OPTION_CHECK_OPTION_CASCADED,
418
} ViewOptCheckOption;
419
420
/*
421
 * ViewOptions
422
 *    Contents of rd_options for views
423
 */
424
typedef struct ViewOptions
425
{
426
  int32   vl_len_;    /* varlena header (do not touch directly!) */
427
  bool    security_barrier;
428
  bool    security_invoker;
429
  ViewOptCheckOption check_option;
430
} ViewOptions;
431
432
/*
433
 * RelationIsSecurityView
434
 *    Returns whether the relation is security view, or not.  Note multiple
435
 *    eval of argument!
436
 */
437
#define RelationIsSecurityView(relation)                  \
438
0
  (AssertMacro(relation->rd_rel->relkind == RELKIND_VIEW),        \
439
0
   (relation)->rd_options ?                        \
440
0
    ((ViewOptions *) (relation)->rd_options)->security_barrier : false)
441
442
/*
443
 * RelationHasSecurityInvoker
444
 *    Returns true if the relation has the security_invoker property set.
445
 *    Note multiple eval of argument!
446
 */
447
#define RelationHasSecurityInvoker(relation)                \
448
0
  (AssertMacro(relation->rd_rel->relkind == RELKIND_VIEW),        \
449
0
   (relation)->rd_options ?                        \
450
0
    ((ViewOptions *) (relation)->rd_options)->security_invoker : false)
451
452
/*
453
 * RelationHasCheckOption
454
 *    Returns true if the relation is a view defined with either the local
455
 *    or the cascaded check option.  Note multiple eval of argument!
456
 */
457
#define RelationHasCheckOption(relation)                  \
458
0
  (AssertMacro(relation->rd_rel->relkind == RELKIND_VIEW),        \
459
0
   (relation)->rd_options &&                       \
460
0
   ((ViewOptions *) (relation)->rd_options)->check_option !=       \
461
0
   VIEW_OPTION_CHECK_OPTION_NOT_SET)
462
463
/*
464
 * RelationHasLocalCheckOption
465
 *    Returns true if the relation is a view defined with the local check
466
 *    option.  Note multiple eval of argument!
467
 */
468
#define RelationHasLocalCheckOption(relation)               \
469
  (AssertMacro(relation->rd_rel->relkind == RELKIND_VIEW),        \
470
   (relation)->rd_options &&                        \
471
   ((ViewOptions *) (relation)->rd_options)->check_option ==        \
472
   VIEW_OPTION_CHECK_OPTION_LOCAL)
473
474
/*
475
 * RelationHasCascadedCheckOption
476
 *    Returns true if the relation is a view defined with the cascaded check
477
 *    option.  Note multiple eval of argument!
478
 */
479
#define RelationHasCascadedCheckOption(relation)              \
480
0
  (AssertMacro(relation->rd_rel->relkind == RELKIND_VIEW),        \
481
0
   (relation)->rd_options &&                       \
482
0
   ((ViewOptions *) (relation)->rd_options)->check_option ==       \
483
0
    VIEW_OPTION_CHECK_OPTION_CASCADED)
484
485
/*
486
 * RelationIsValid
487
 *    True iff relation descriptor is valid.
488
 */
489
0
#define RelationIsValid(relation) PointerIsValid(relation)
490
491
#define InvalidRelation ((Relation) NULL)
492
493
/*
494
 * RelationHasReferenceCountZero
495
 *    True iff relation reference count is zero.
496
 *
497
 * Note:
498
 *    Assumes relation descriptor is valid.
499
 */
500
#define RelationHasReferenceCountZero(relation) \
501
0
    ((bool)((relation)->rd_refcnt == 0))
502
503
/*
504
 * RelationGetForm
505
 *    Returns pg_class tuple for a relation.
506
 *
507
 * Note:
508
 *    Assumes relation descriptor is valid.
509
 */
510
0
#define RelationGetForm(relation) ((relation)->rd_rel)
511
512
/*
513
 * RelationGetRelid
514
 *    Returns the OID of the relation
515
 */
516
0
#define RelationGetRelid(relation) ((relation)->rd_id)
517
518
/*
519
 * RelationGetNumberOfAttributes
520
 *    Returns the total number of attributes in a relation.
521
 */
522
0
#define RelationGetNumberOfAttributes(relation) ((relation)->rd_rel->relnatts)
523
524
/*
525
 * IndexRelationGetNumberOfAttributes
526
 *    Returns the number of attributes in an index.
527
 */
528
#define IndexRelationGetNumberOfAttributes(relation) \
529
0
    ((relation)->rd_index->indnatts)
530
531
/*
532
 * IndexRelationGetNumberOfKeyAttributes
533
 *    Returns the number of key attributes in an index.
534
 */
535
#define IndexRelationGetNumberOfKeyAttributes(relation) \
536
0
    ((relation)->rd_index->indnkeyatts)
537
538
/*
539
 * RelationGetDescr
540
 *    Returns tuple descriptor for a relation.
541
 */
542
0
#define RelationGetDescr(relation) ((relation)->rd_att)
543
544
/*
545
 * RelationGetRelationName
546
 *    Returns the rel's name.
547
 *
548
 * Note that the name is only unique within the containing namespace.
549
 */
550
#define RelationGetRelationName(relation) \
551
0
  (NameStr((relation)->rd_rel->relname))
552
553
/*
554
 * RelationGetNamespace
555
 *    Returns the rel's namespace OID.
556
 */
557
#define RelationGetNamespace(relation) \
558
0
  ((relation)->rd_rel->relnamespace)
559
560
/*
561
 * RelationIsMapped
562
 *    True if the relation uses the relfilenumber map.  Note multiple eval
563
 *    of argument!
564
 */
565
#define RelationIsMapped(relation) \
566
0
  (RELKIND_HAS_STORAGE((relation)->rd_rel->relkind) && \
567
0
   ((relation)->rd_rel->relfilenode == InvalidRelFileNumber))
568
569
#ifndef FRONTEND
570
/*
571
 * RelationGetSmgr
572
 *    Returns smgr file handle for a relation, opening it if needed.
573
 *
574
 * Very little code is authorized to touch rel->rd_smgr directly.  Instead
575
 * use this function to fetch its value.
576
 */
577
static inline SMgrRelation
578
RelationGetSmgr(Relation rel)
579
0
{
580
0
  if (unlikely(rel->rd_smgr == NULL))
581
0
  {
582
0
    rel->rd_smgr = smgropen(rel->rd_locator, rel->rd_backend);
583
0
    smgrpin(rel->rd_smgr);
584
0
  }
585
0
  return rel->rd_smgr;
586
0
}
Unexecuted instantiation: fuzzer_initialize.c:RelationGetSmgr
Unexecuted instantiation: brin.c:RelationGetSmgr
Unexecuted instantiation: brin_bloom.c:RelationGetSmgr
Unexecuted instantiation: brin_inclusion.c:RelationGetSmgr
Unexecuted instantiation: brin_minmax.c:RelationGetSmgr
Unexecuted instantiation: brin_minmax_multi.c:RelationGetSmgr
Unexecuted instantiation: brin_pageops.c:RelationGetSmgr
Unexecuted instantiation: brin_revmap.c:RelationGetSmgr
Unexecuted instantiation: detoast.c:RelationGetSmgr
Unexecuted instantiation: relation.c:RelationGetSmgr
Unexecuted instantiation: reloptions.c:RelationGetSmgr
Unexecuted instantiation: syncscan.c:RelationGetSmgr
Unexecuted instantiation: toast_internals.c:RelationGetSmgr
Unexecuted instantiation: ginbtree.c:RelationGetSmgr
Unexecuted instantiation: gindatapage.c:RelationGetSmgr
Unexecuted instantiation: ginentrypage.c:RelationGetSmgr
Unexecuted instantiation: ginfast.c:RelationGetSmgr
Unexecuted instantiation: ginget.c:RelationGetSmgr
Unexecuted instantiation: gininsert.c:RelationGetSmgr
Unexecuted instantiation: ginscan.c:RelationGetSmgr
Unexecuted instantiation: ginutil.c:RelationGetSmgr
Unexecuted instantiation: ginvacuum.c:RelationGetSmgr
Unexecuted instantiation: gist.c:RelationGetSmgr
Unexecuted instantiation: gistbuild.c:RelationGetSmgr
Unexecuted instantiation: gistbuildbuffers.c:RelationGetSmgr
Unexecuted instantiation: gistget.c:RelationGetSmgr
Unexecuted instantiation: gistscan.c:RelationGetSmgr
Unexecuted instantiation: gistsplit.c:RelationGetSmgr
Unexecuted instantiation: gistutil.c:RelationGetSmgr
Unexecuted instantiation: gistvacuum.c:RelationGetSmgr
Unexecuted instantiation: gistxlog.c:RelationGetSmgr
Unexecuted instantiation: hash.c:RelationGetSmgr
Unexecuted instantiation: hashinsert.c:RelationGetSmgr
Unexecuted instantiation: hashovfl.c:RelationGetSmgr
Unexecuted instantiation: hashpage.c:RelationGetSmgr
Unexecuted instantiation: hashsearch.c:RelationGetSmgr
Unexecuted instantiation: hashutil.c:RelationGetSmgr
Unexecuted instantiation: heapam.c:RelationGetSmgr
Unexecuted instantiation: heapam_handler.c:RelationGetSmgr
Unexecuted instantiation: heapam_visibility.c:RelationGetSmgr
Unexecuted instantiation: heapam_xlog.c:RelationGetSmgr
Unexecuted instantiation: heaptoast.c:RelationGetSmgr
Unexecuted instantiation: hio.c:RelationGetSmgr
Unexecuted instantiation: pruneheap.c:RelationGetSmgr
Unexecuted instantiation: rewriteheap.c:RelationGetSmgr
Unexecuted instantiation: vacuumlazy.c:RelationGetSmgr
Unexecuted instantiation: visibilitymap.c:RelationGetSmgr
Unexecuted instantiation: genam.c:RelationGetSmgr
Unexecuted instantiation: indexam.c:RelationGetSmgr
Unexecuted instantiation: nbtdedup.c:RelationGetSmgr
Unexecuted instantiation: nbtinsert.c:RelationGetSmgr
Unexecuted instantiation: nbtpage.c:RelationGetSmgr
Unexecuted instantiation: nbtpreprocesskeys.c:RelationGetSmgr
Unexecuted instantiation: nbtree.c:RelationGetSmgr
Unexecuted instantiation: nbtsearch.c:RelationGetSmgr
Unexecuted instantiation: nbtsort.c:RelationGetSmgr
Unexecuted instantiation: nbtsplitloc.c:RelationGetSmgr
Unexecuted instantiation: nbtutils.c:RelationGetSmgr
Unexecuted instantiation: nbtvalidate.c:RelationGetSmgr
Unexecuted instantiation: nbtxlog.c:RelationGetSmgr
Unexecuted instantiation: genericdesc.c:RelationGetSmgr
Unexecuted instantiation: spgdoinsert.c:RelationGetSmgr
Unexecuted instantiation: spginsert.c:RelationGetSmgr
Unexecuted instantiation: spgscan.c:RelationGetSmgr
Unexecuted instantiation: spgutils.c:RelationGetSmgr
Unexecuted instantiation: spgvacuum.c:RelationGetSmgr
Unexecuted instantiation: sequence.c:RelationGetSmgr
Unexecuted instantiation: table.c:RelationGetSmgr
Unexecuted instantiation: tableam.c:RelationGetSmgr
Unexecuted instantiation: tableamapi.c:RelationGetSmgr
Unexecuted instantiation: toast_helper.c:RelationGetSmgr
Unexecuted instantiation: generic_xlog.c:RelationGetSmgr
Unexecuted instantiation: parallel.c:RelationGetSmgr
Unexecuted instantiation: rmgr.c:RelationGetSmgr
Unexecuted instantiation: xact.c:RelationGetSmgr
Unexecuted instantiation: xlog.c:RelationGetSmgr
Unexecuted instantiation: xlogfuncs.c:RelationGetSmgr
Unexecuted instantiation: xlogrecovery.c:RelationGetSmgr
Unexecuted instantiation: xlogutils.c:RelationGetSmgr
Unexecuted instantiation: bootstrap.c:RelationGetSmgr
Unexecuted instantiation: aclchk.c:RelationGetSmgr
Unexecuted instantiation: catalog.c:RelationGetSmgr
Unexecuted instantiation: dependency.c:RelationGetSmgr
Unexecuted instantiation: heap.c:RelationGetSmgr
Unexecuted instantiation: index.c:RelationGetSmgr
Unexecuted instantiation: indexing.c:RelationGetSmgr
Unexecuted instantiation: namespace.c:RelationGetSmgr
Unexecuted instantiation: objectaddress.c:RelationGetSmgr
Unexecuted instantiation: partition.c:RelationGetSmgr
Unexecuted instantiation: pg_aggregate.c:RelationGetSmgr
Unexecuted instantiation: pg_attrdef.c:RelationGetSmgr
Unexecuted instantiation: pg_cast.c:RelationGetSmgr
Unexecuted instantiation: pg_collation.c:RelationGetSmgr
Unexecuted instantiation: pg_constraint.c:RelationGetSmgr
Unexecuted instantiation: pg_conversion.c:RelationGetSmgr
Unexecuted instantiation: pg_db_role_setting.c:RelationGetSmgr
Unexecuted instantiation: pg_depend.c:RelationGetSmgr
Unexecuted instantiation: pg_enum.c:RelationGetSmgr
Unexecuted instantiation: pg_inherits.c:RelationGetSmgr
Unexecuted instantiation: pg_largeobject.c:RelationGetSmgr
Unexecuted instantiation: pg_namespace.c:RelationGetSmgr
Unexecuted instantiation: pg_operator.c:RelationGetSmgr
Unexecuted instantiation: pg_parameter_acl.c:RelationGetSmgr
Unexecuted instantiation: pg_proc.c:RelationGetSmgr
Unexecuted instantiation: pg_publication.c:RelationGetSmgr
Unexecuted instantiation: pg_range.c:RelationGetSmgr
Unexecuted instantiation: pg_shdepend.c:RelationGetSmgr
Unexecuted instantiation: pg_subscription.c:RelationGetSmgr
Unexecuted instantiation: pg_type.c:RelationGetSmgr
Unexecuted instantiation: storage.c:RelationGetSmgr
Unexecuted instantiation: toasting.c:RelationGetSmgr
Unexecuted instantiation: analyze.c:RelationGetSmgr
Unexecuted instantiation: gram.c:RelationGetSmgr
Unexecuted instantiation: parse_clause.c:RelationGetSmgr
Unexecuted instantiation: parse_merge.c:RelationGetSmgr
Unexecuted instantiation: parse_relation.c:RelationGetSmgr
Unexecuted instantiation: parse_target.c:RelationGetSmgr
Unexecuted instantiation: parse_utilcmd.c:RelationGetSmgr
Unexecuted instantiation: alter.c:RelationGetSmgr
Unexecuted instantiation: amcmds.c:RelationGetSmgr
Unexecuted instantiation: async.c:RelationGetSmgr
Unexecuted instantiation: cluster.c:RelationGetSmgr
Unexecuted instantiation: collationcmds.c:RelationGetSmgr
Unexecuted instantiation: comment.c:RelationGetSmgr
Unexecuted instantiation: constraint.c:RelationGetSmgr
Unexecuted instantiation: copy.c:RelationGetSmgr
Unexecuted instantiation: copyfrom.c:RelationGetSmgr
Unexecuted instantiation: copyfromparse.c:RelationGetSmgr
Unexecuted instantiation: copyto.c:RelationGetSmgr
Unexecuted instantiation: createas.c:RelationGetSmgr
Unexecuted instantiation: dbcommands.c:RelationGetSmgr
Unexecuted instantiation: event_trigger.c:RelationGetSmgr
Unexecuted instantiation: explain.c:RelationGetSmgr
Unexecuted instantiation: extension.c:RelationGetSmgr
Unexecuted instantiation: foreigncmds.c:RelationGetSmgr
Unexecuted instantiation: functioncmds.c:RelationGetSmgr
Unexecuted instantiation: indexcmds.c:RelationGetSmgr
Unexecuted instantiation: lockcmds.c:RelationGetSmgr
Unexecuted instantiation: matview.c:RelationGetSmgr
Unexecuted instantiation: opclasscmds.c:RelationGetSmgr
Unexecuted instantiation: operatorcmds.c:RelationGetSmgr
Unexecuted instantiation: policy.c:RelationGetSmgr
Unexecuted instantiation: proclang.c:RelationGetSmgr
Unexecuted instantiation: publicationcmds.c:RelationGetSmgr
Unexecuted instantiation: schemacmds.c:RelationGetSmgr
Unexecuted instantiation: seclabel.c:RelationGetSmgr
Unexecuted instantiation: statscmds.c:RelationGetSmgr
Unexecuted instantiation: subscriptioncmds.c:RelationGetSmgr
Unexecuted instantiation: tablecmds.c:RelationGetSmgr
Unexecuted instantiation: tablespace.c:RelationGetSmgr
Unexecuted instantiation: trigger.c:RelationGetSmgr
Unexecuted instantiation: tsearchcmds.c:RelationGetSmgr
Unexecuted instantiation: typecmds.c:RelationGetSmgr
Unexecuted instantiation: user.c:RelationGetSmgr
Unexecuted instantiation: vacuum.c:RelationGetSmgr
Unexecuted instantiation: vacuumparallel.c:RelationGetSmgr
Unexecuted instantiation: view.c:RelationGetSmgr
Unexecuted instantiation: execCurrent.c:RelationGetSmgr
Unexecuted instantiation: execExpr.c:RelationGetSmgr
Unexecuted instantiation: execIndexing.c:RelationGetSmgr
Unexecuted instantiation: execMain.c:RelationGetSmgr
Unexecuted instantiation: execPartition.c:RelationGetSmgr
Unexecuted instantiation: execReplication.c:RelationGetSmgr
Unexecuted instantiation: execUtils.c:RelationGetSmgr
Unexecuted instantiation: nodeBitmapHeapscan.c:RelationGetSmgr
Unexecuted instantiation: nodeCustom.c:RelationGetSmgr
Unexecuted instantiation: nodeForeignscan.c:RelationGetSmgr
Unexecuted instantiation: nodeIndexonlyscan.c:RelationGetSmgr
Unexecuted instantiation: nodeIndexscan.c:RelationGetSmgr
Unexecuted instantiation: nodeLockRows.c:RelationGetSmgr
Unexecuted instantiation: nodeMergejoin.c:RelationGetSmgr
Unexecuted instantiation: nodeModifyTable.c:RelationGetSmgr
Unexecuted instantiation: nodeSamplescan.c:RelationGetSmgr
Unexecuted instantiation: nodeSeqscan.c:RelationGetSmgr
Unexecuted instantiation: nodeTidrangescan.c:RelationGetSmgr
Unexecuted instantiation: nodeTidscan.c:RelationGetSmgr
Unexecuted instantiation: spi.c:RelationGetSmgr
Unexecuted instantiation: foreign.c:RelationGetSmgr
Unexecuted instantiation: copyfuncs.c:RelationGetSmgr
Unexecuted instantiation: equalfuncs.c:RelationGetSmgr
Unexecuted instantiation: outfuncs.c:RelationGetSmgr
Unexecuted instantiation: queryjumblefuncs.c:RelationGetSmgr
Unexecuted instantiation: readfuncs.c:RelationGetSmgr
Unexecuted instantiation: initsplan.c:RelationGetSmgr
Unexecuted instantiation: planner.c:RelationGetSmgr
Unexecuted instantiation: prepjointree.c:RelationGetSmgr
Unexecuted instantiation: preptlist.c:RelationGetSmgr
Unexecuted instantiation: appendinfo.c:RelationGetSmgr
Unexecuted instantiation: inherit.c:RelationGetSmgr
Unexecuted instantiation: plancat.c:RelationGetSmgr
Unexecuted instantiation: partbounds.c:RelationGetSmgr
Unexecuted instantiation: partdesc.c:RelationGetSmgr
Unexecuted instantiation: partprune.c:RelationGetSmgr
Unexecuted instantiation: autovacuum.c:RelationGetSmgr
Unexecuted instantiation: launch_backend.c:RelationGetSmgr
Unexecuted instantiation: postmaster.c:RelationGetSmgr
Unexecuted instantiation: walsummarizer.c:RelationGetSmgr
Unexecuted instantiation: applyparallelworker.c:RelationGetSmgr
Unexecuted instantiation: conflict.c:RelationGetSmgr
Unexecuted instantiation: decode.c:RelationGetSmgr
Unexecuted instantiation: launcher.c:RelationGetSmgr
Unexecuted instantiation: logical.c:RelationGetSmgr
Unexecuted instantiation: logicalfuncs.c:RelationGetSmgr
Unexecuted instantiation: origin.c:RelationGetSmgr
Unexecuted instantiation: proto.c:RelationGetSmgr
Unexecuted instantiation: reorderbuffer.c:RelationGetSmgr
Unexecuted instantiation: slotsync.c:RelationGetSmgr
Unexecuted instantiation: snapbuild.c:RelationGetSmgr
Unexecuted instantiation: tablesync.c:RelationGetSmgr
Unexecuted instantiation: worker.c:RelationGetSmgr
Unexecuted instantiation: slot.c:RelationGetSmgr
Unexecuted instantiation: slotfuncs.c:RelationGetSmgr
Unexecuted instantiation: walreceiver.c:RelationGetSmgr
Unexecuted instantiation: walreceiverfuncs.c:RelationGetSmgr
Unexecuted instantiation: walsender.c:RelationGetSmgr
Unexecuted instantiation: rewriteDefine.c:RelationGetSmgr
Unexecuted instantiation: rewriteHandler.c:RelationGetSmgr
Unexecuted instantiation: rewriteRemove.c:RelationGetSmgr
Unexecuted instantiation: rowsecurity.c:RelationGetSmgr
Unexecuted instantiation: basebackup.c:RelationGetSmgr
Unexecuted instantiation: attribute_stats.c:RelationGetSmgr
Unexecuted instantiation: extended_stats.c:RelationGetSmgr
Unexecuted instantiation: relation_stats.c:RelationGetSmgr
Unexecuted instantiation: stat_utils.c:RelationGetSmgr
Unexecuted instantiation: read_stream.c:RelationGetSmgr
Unexecuted instantiation: bufmgr.c:RelationGetSmgr
Unexecuted instantiation: freespace.c:RelationGetSmgr
Unexecuted instantiation: ipci.c:RelationGetSmgr
Unexecuted instantiation: procarray.c:RelationGetSmgr
Unexecuted instantiation: standby.c:RelationGetSmgr
Unexecuted instantiation: inv_api.c:RelationGetSmgr
Unexecuted instantiation: deadlock.c:RelationGetSmgr
Unexecuted instantiation: lmgr.c:RelationGetSmgr
Unexecuted instantiation: lock.c:RelationGetSmgr
Unexecuted instantiation: predicate.c:RelationGetSmgr
Unexecuted instantiation: proc.c:RelationGetSmgr
Unexecuted instantiation: bulk_write.c:RelationGetSmgr
Unexecuted instantiation: postgres.c:RelationGetSmgr
Unexecuted instantiation: utility.c:RelationGetSmgr
Unexecuted instantiation: pgstat_relation.c:RelationGetSmgr
Unexecuted instantiation: pgstat_replslot.c:RelationGetSmgr
Unexecuted instantiation: wait_event.c:RelationGetSmgr
Unexecuted instantiation: dbsize.c:RelationGetSmgr
Unexecuted instantiation: genfile.c:RelationGetSmgr
Unexecuted instantiation: pg_upgrade_support.c:RelationGetSmgr
Unexecuted instantiation: ri_triggers.c:RelationGetSmgr
Unexecuted instantiation: ruleutils.c:RelationGetSmgr
Unexecuted instantiation: selfuncs.c:RelationGetSmgr
Unexecuted instantiation: skipsupport.c:RelationGetSmgr
Unexecuted instantiation: tid.c:RelationGetSmgr
Unexecuted instantiation: trigfuncs.c:RelationGetSmgr
Unexecuted instantiation: tsquery_rewrite.c:RelationGetSmgr
Unexecuted instantiation: tsvector_op.c:RelationGetSmgr
Unexecuted instantiation: xml.c:RelationGetSmgr
Unexecuted instantiation: catcache.c:RelationGetSmgr
Unexecuted instantiation: evtcache.c:RelationGetSmgr
Unexecuted instantiation: funccache.c:RelationGetSmgr
Unexecuted instantiation: inval.c:RelationGetSmgr
Unexecuted instantiation: partcache.c:RelationGetSmgr
Unexecuted instantiation: plancache.c:RelationGetSmgr
Unexecuted instantiation: relcache.c:RelationGetSmgr
Unexecuted instantiation: syscache.c:RelationGetSmgr
Unexecuted instantiation: typcache.c:RelationGetSmgr
Unexecuted instantiation: funcapi.c:RelationGetSmgr
Unexecuted instantiation: miscinit.c:RelationGetSmgr
Unexecuted instantiation: postinit.c:RelationGetSmgr
Unexecuted instantiation: guc_tables.c:RelationGetSmgr
Unexecuted instantiation: queryenvironment.c:RelationGetSmgr
Unexecuted instantiation: sortsupport.c:RelationGetSmgr
Unexecuted instantiation: tuplesortvariants.c:RelationGetSmgr
Unexecuted instantiation: simple_query_fuzzer.c:RelationGetSmgr
587
588
/*
589
 * RelationCloseSmgr
590
 *    Close the relation at the smgr level, if not already done.
591
 */
592
static inline void
593
RelationCloseSmgr(Relation relation)
594
0
{
595
0
  if (relation->rd_smgr != NULL)
596
0
  {
597
0
    smgrunpin(relation->rd_smgr);
598
0
    smgrclose(relation->rd_smgr);
599
0
    relation->rd_smgr = NULL;
600
0
  }
601
0
}
Unexecuted instantiation: fuzzer_initialize.c:RelationCloseSmgr
Unexecuted instantiation: brin.c:RelationCloseSmgr
Unexecuted instantiation: brin_bloom.c:RelationCloseSmgr
Unexecuted instantiation: brin_inclusion.c:RelationCloseSmgr
Unexecuted instantiation: brin_minmax.c:RelationCloseSmgr
Unexecuted instantiation: brin_minmax_multi.c:RelationCloseSmgr
Unexecuted instantiation: brin_pageops.c:RelationCloseSmgr
Unexecuted instantiation: brin_revmap.c:RelationCloseSmgr
Unexecuted instantiation: detoast.c:RelationCloseSmgr
Unexecuted instantiation: relation.c:RelationCloseSmgr
Unexecuted instantiation: reloptions.c:RelationCloseSmgr
Unexecuted instantiation: syncscan.c:RelationCloseSmgr
Unexecuted instantiation: toast_internals.c:RelationCloseSmgr
Unexecuted instantiation: ginbtree.c:RelationCloseSmgr
Unexecuted instantiation: gindatapage.c:RelationCloseSmgr
Unexecuted instantiation: ginentrypage.c:RelationCloseSmgr
Unexecuted instantiation: ginfast.c:RelationCloseSmgr
Unexecuted instantiation: ginget.c:RelationCloseSmgr
Unexecuted instantiation: gininsert.c:RelationCloseSmgr
Unexecuted instantiation: ginscan.c:RelationCloseSmgr
Unexecuted instantiation: ginutil.c:RelationCloseSmgr
Unexecuted instantiation: ginvacuum.c:RelationCloseSmgr
Unexecuted instantiation: gist.c:RelationCloseSmgr
Unexecuted instantiation: gistbuild.c:RelationCloseSmgr
Unexecuted instantiation: gistbuildbuffers.c:RelationCloseSmgr
Unexecuted instantiation: gistget.c:RelationCloseSmgr
Unexecuted instantiation: gistscan.c:RelationCloseSmgr
Unexecuted instantiation: gistsplit.c:RelationCloseSmgr
Unexecuted instantiation: gistutil.c:RelationCloseSmgr
Unexecuted instantiation: gistvacuum.c:RelationCloseSmgr
Unexecuted instantiation: gistxlog.c:RelationCloseSmgr
Unexecuted instantiation: hash.c:RelationCloseSmgr
Unexecuted instantiation: hashinsert.c:RelationCloseSmgr
Unexecuted instantiation: hashovfl.c:RelationCloseSmgr
Unexecuted instantiation: hashpage.c:RelationCloseSmgr
Unexecuted instantiation: hashsearch.c:RelationCloseSmgr
Unexecuted instantiation: hashutil.c:RelationCloseSmgr
Unexecuted instantiation: heapam.c:RelationCloseSmgr
Unexecuted instantiation: heapam_handler.c:RelationCloseSmgr
Unexecuted instantiation: heapam_visibility.c:RelationCloseSmgr
Unexecuted instantiation: heapam_xlog.c:RelationCloseSmgr
Unexecuted instantiation: heaptoast.c:RelationCloseSmgr
Unexecuted instantiation: hio.c:RelationCloseSmgr
Unexecuted instantiation: pruneheap.c:RelationCloseSmgr
Unexecuted instantiation: rewriteheap.c:RelationCloseSmgr
Unexecuted instantiation: vacuumlazy.c:RelationCloseSmgr
Unexecuted instantiation: visibilitymap.c:RelationCloseSmgr
Unexecuted instantiation: genam.c:RelationCloseSmgr
Unexecuted instantiation: indexam.c:RelationCloseSmgr
Unexecuted instantiation: nbtdedup.c:RelationCloseSmgr
Unexecuted instantiation: nbtinsert.c:RelationCloseSmgr
Unexecuted instantiation: nbtpage.c:RelationCloseSmgr
Unexecuted instantiation: nbtpreprocesskeys.c:RelationCloseSmgr
Unexecuted instantiation: nbtree.c:RelationCloseSmgr
Unexecuted instantiation: nbtsearch.c:RelationCloseSmgr
Unexecuted instantiation: nbtsort.c:RelationCloseSmgr
Unexecuted instantiation: nbtsplitloc.c:RelationCloseSmgr
Unexecuted instantiation: nbtutils.c:RelationCloseSmgr
Unexecuted instantiation: nbtvalidate.c:RelationCloseSmgr
Unexecuted instantiation: nbtxlog.c:RelationCloseSmgr
Unexecuted instantiation: genericdesc.c:RelationCloseSmgr
Unexecuted instantiation: spgdoinsert.c:RelationCloseSmgr
Unexecuted instantiation: spginsert.c:RelationCloseSmgr
Unexecuted instantiation: spgscan.c:RelationCloseSmgr
Unexecuted instantiation: spgutils.c:RelationCloseSmgr
Unexecuted instantiation: spgvacuum.c:RelationCloseSmgr
Unexecuted instantiation: sequence.c:RelationCloseSmgr
Unexecuted instantiation: table.c:RelationCloseSmgr
Unexecuted instantiation: tableam.c:RelationCloseSmgr
Unexecuted instantiation: tableamapi.c:RelationCloseSmgr
Unexecuted instantiation: toast_helper.c:RelationCloseSmgr
Unexecuted instantiation: generic_xlog.c:RelationCloseSmgr
Unexecuted instantiation: parallel.c:RelationCloseSmgr
Unexecuted instantiation: rmgr.c:RelationCloseSmgr
Unexecuted instantiation: xact.c:RelationCloseSmgr
Unexecuted instantiation: xlog.c:RelationCloseSmgr
Unexecuted instantiation: xlogfuncs.c:RelationCloseSmgr
Unexecuted instantiation: xlogrecovery.c:RelationCloseSmgr
Unexecuted instantiation: xlogutils.c:RelationCloseSmgr
Unexecuted instantiation: bootstrap.c:RelationCloseSmgr
Unexecuted instantiation: aclchk.c:RelationCloseSmgr
Unexecuted instantiation: catalog.c:RelationCloseSmgr
Unexecuted instantiation: dependency.c:RelationCloseSmgr
Unexecuted instantiation: heap.c:RelationCloseSmgr
Unexecuted instantiation: index.c:RelationCloseSmgr
Unexecuted instantiation: indexing.c:RelationCloseSmgr
Unexecuted instantiation: namespace.c:RelationCloseSmgr
Unexecuted instantiation: objectaddress.c:RelationCloseSmgr
Unexecuted instantiation: partition.c:RelationCloseSmgr
Unexecuted instantiation: pg_aggregate.c:RelationCloseSmgr
Unexecuted instantiation: pg_attrdef.c:RelationCloseSmgr
Unexecuted instantiation: pg_cast.c:RelationCloseSmgr
Unexecuted instantiation: pg_collation.c:RelationCloseSmgr
Unexecuted instantiation: pg_constraint.c:RelationCloseSmgr
Unexecuted instantiation: pg_conversion.c:RelationCloseSmgr
Unexecuted instantiation: pg_db_role_setting.c:RelationCloseSmgr
Unexecuted instantiation: pg_depend.c:RelationCloseSmgr
Unexecuted instantiation: pg_enum.c:RelationCloseSmgr
Unexecuted instantiation: pg_inherits.c:RelationCloseSmgr
Unexecuted instantiation: pg_largeobject.c:RelationCloseSmgr
Unexecuted instantiation: pg_namespace.c:RelationCloseSmgr
Unexecuted instantiation: pg_operator.c:RelationCloseSmgr
Unexecuted instantiation: pg_parameter_acl.c:RelationCloseSmgr
Unexecuted instantiation: pg_proc.c:RelationCloseSmgr
Unexecuted instantiation: pg_publication.c:RelationCloseSmgr
Unexecuted instantiation: pg_range.c:RelationCloseSmgr
Unexecuted instantiation: pg_shdepend.c:RelationCloseSmgr
Unexecuted instantiation: pg_subscription.c:RelationCloseSmgr
Unexecuted instantiation: pg_type.c:RelationCloseSmgr
Unexecuted instantiation: storage.c:RelationCloseSmgr
Unexecuted instantiation: toasting.c:RelationCloseSmgr
Unexecuted instantiation: analyze.c:RelationCloseSmgr
Unexecuted instantiation: gram.c:RelationCloseSmgr
Unexecuted instantiation: parse_clause.c:RelationCloseSmgr
Unexecuted instantiation: parse_merge.c:RelationCloseSmgr
Unexecuted instantiation: parse_relation.c:RelationCloseSmgr
Unexecuted instantiation: parse_target.c:RelationCloseSmgr
Unexecuted instantiation: parse_utilcmd.c:RelationCloseSmgr
Unexecuted instantiation: alter.c:RelationCloseSmgr
Unexecuted instantiation: amcmds.c:RelationCloseSmgr
Unexecuted instantiation: async.c:RelationCloseSmgr
Unexecuted instantiation: cluster.c:RelationCloseSmgr
Unexecuted instantiation: collationcmds.c:RelationCloseSmgr
Unexecuted instantiation: comment.c:RelationCloseSmgr
Unexecuted instantiation: constraint.c:RelationCloseSmgr
Unexecuted instantiation: copy.c:RelationCloseSmgr
Unexecuted instantiation: copyfrom.c:RelationCloseSmgr
Unexecuted instantiation: copyfromparse.c:RelationCloseSmgr
Unexecuted instantiation: copyto.c:RelationCloseSmgr
Unexecuted instantiation: createas.c:RelationCloseSmgr
Unexecuted instantiation: dbcommands.c:RelationCloseSmgr
Unexecuted instantiation: event_trigger.c:RelationCloseSmgr
Unexecuted instantiation: explain.c:RelationCloseSmgr
Unexecuted instantiation: extension.c:RelationCloseSmgr
Unexecuted instantiation: foreigncmds.c:RelationCloseSmgr
Unexecuted instantiation: functioncmds.c:RelationCloseSmgr
Unexecuted instantiation: indexcmds.c:RelationCloseSmgr
Unexecuted instantiation: lockcmds.c:RelationCloseSmgr
Unexecuted instantiation: matview.c:RelationCloseSmgr
Unexecuted instantiation: opclasscmds.c:RelationCloseSmgr
Unexecuted instantiation: operatorcmds.c:RelationCloseSmgr
Unexecuted instantiation: policy.c:RelationCloseSmgr
Unexecuted instantiation: proclang.c:RelationCloseSmgr
Unexecuted instantiation: publicationcmds.c:RelationCloseSmgr
Unexecuted instantiation: schemacmds.c:RelationCloseSmgr
Unexecuted instantiation: seclabel.c:RelationCloseSmgr
Unexecuted instantiation: statscmds.c:RelationCloseSmgr
Unexecuted instantiation: subscriptioncmds.c:RelationCloseSmgr
Unexecuted instantiation: tablecmds.c:RelationCloseSmgr
Unexecuted instantiation: tablespace.c:RelationCloseSmgr
Unexecuted instantiation: trigger.c:RelationCloseSmgr
Unexecuted instantiation: tsearchcmds.c:RelationCloseSmgr
Unexecuted instantiation: typecmds.c:RelationCloseSmgr
Unexecuted instantiation: user.c:RelationCloseSmgr
Unexecuted instantiation: vacuum.c:RelationCloseSmgr
Unexecuted instantiation: vacuumparallel.c:RelationCloseSmgr
Unexecuted instantiation: view.c:RelationCloseSmgr
Unexecuted instantiation: execCurrent.c:RelationCloseSmgr
Unexecuted instantiation: execExpr.c:RelationCloseSmgr
Unexecuted instantiation: execIndexing.c:RelationCloseSmgr
Unexecuted instantiation: execMain.c:RelationCloseSmgr
Unexecuted instantiation: execPartition.c:RelationCloseSmgr
Unexecuted instantiation: execReplication.c:RelationCloseSmgr
Unexecuted instantiation: execUtils.c:RelationCloseSmgr
Unexecuted instantiation: nodeBitmapHeapscan.c:RelationCloseSmgr
Unexecuted instantiation: nodeCustom.c:RelationCloseSmgr
Unexecuted instantiation: nodeForeignscan.c:RelationCloseSmgr
Unexecuted instantiation: nodeIndexonlyscan.c:RelationCloseSmgr
Unexecuted instantiation: nodeIndexscan.c:RelationCloseSmgr
Unexecuted instantiation: nodeLockRows.c:RelationCloseSmgr
Unexecuted instantiation: nodeMergejoin.c:RelationCloseSmgr
Unexecuted instantiation: nodeModifyTable.c:RelationCloseSmgr
Unexecuted instantiation: nodeSamplescan.c:RelationCloseSmgr
Unexecuted instantiation: nodeSeqscan.c:RelationCloseSmgr
Unexecuted instantiation: nodeTidrangescan.c:RelationCloseSmgr
Unexecuted instantiation: nodeTidscan.c:RelationCloseSmgr
Unexecuted instantiation: spi.c:RelationCloseSmgr
Unexecuted instantiation: foreign.c:RelationCloseSmgr
Unexecuted instantiation: copyfuncs.c:RelationCloseSmgr
Unexecuted instantiation: equalfuncs.c:RelationCloseSmgr
Unexecuted instantiation: outfuncs.c:RelationCloseSmgr
Unexecuted instantiation: queryjumblefuncs.c:RelationCloseSmgr
Unexecuted instantiation: readfuncs.c:RelationCloseSmgr
Unexecuted instantiation: initsplan.c:RelationCloseSmgr
Unexecuted instantiation: planner.c:RelationCloseSmgr
Unexecuted instantiation: prepjointree.c:RelationCloseSmgr
Unexecuted instantiation: preptlist.c:RelationCloseSmgr
Unexecuted instantiation: appendinfo.c:RelationCloseSmgr
Unexecuted instantiation: inherit.c:RelationCloseSmgr
Unexecuted instantiation: plancat.c:RelationCloseSmgr
Unexecuted instantiation: partbounds.c:RelationCloseSmgr
Unexecuted instantiation: partdesc.c:RelationCloseSmgr
Unexecuted instantiation: partprune.c:RelationCloseSmgr
Unexecuted instantiation: autovacuum.c:RelationCloseSmgr
Unexecuted instantiation: launch_backend.c:RelationCloseSmgr
Unexecuted instantiation: postmaster.c:RelationCloseSmgr
Unexecuted instantiation: walsummarizer.c:RelationCloseSmgr
Unexecuted instantiation: applyparallelworker.c:RelationCloseSmgr
Unexecuted instantiation: conflict.c:RelationCloseSmgr
Unexecuted instantiation: decode.c:RelationCloseSmgr
Unexecuted instantiation: launcher.c:RelationCloseSmgr
Unexecuted instantiation: logical.c:RelationCloseSmgr
Unexecuted instantiation: logicalfuncs.c:RelationCloseSmgr
Unexecuted instantiation: origin.c:RelationCloseSmgr
Unexecuted instantiation: proto.c:RelationCloseSmgr
Unexecuted instantiation: reorderbuffer.c:RelationCloseSmgr
Unexecuted instantiation: slotsync.c:RelationCloseSmgr
Unexecuted instantiation: snapbuild.c:RelationCloseSmgr
Unexecuted instantiation: tablesync.c:RelationCloseSmgr
Unexecuted instantiation: worker.c:RelationCloseSmgr
Unexecuted instantiation: slot.c:RelationCloseSmgr
Unexecuted instantiation: slotfuncs.c:RelationCloseSmgr
Unexecuted instantiation: walreceiver.c:RelationCloseSmgr
Unexecuted instantiation: walreceiverfuncs.c:RelationCloseSmgr
Unexecuted instantiation: walsender.c:RelationCloseSmgr
Unexecuted instantiation: rewriteDefine.c:RelationCloseSmgr
Unexecuted instantiation: rewriteHandler.c:RelationCloseSmgr
Unexecuted instantiation: rewriteRemove.c:RelationCloseSmgr
Unexecuted instantiation: rowsecurity.c:RelationCloseSmgr
Unexecuted instantiation: basebackup.c:RelationCloseSmgr
Unexecuted instantiation: attribute_stats.c:RelationCloseSmgr
Unexecuted instantiation: extended_stats.c:RelationCloseSmgr
Unexecuted instantiation: relation_stats.c:RelationCloseSmgr
Unexecuted instantiation: stat_utils.c:RelationCloseSmgr
Unexecuted instantiation: read_stream.c:RelationCloseSmgr
Unexecuted instantiation: bufmgr.c:RelationCloseSmgr
Unexecuted instantiation: freespace.c:RelationCloseSmgr
Unexecuted instantiation: ipci.c:RelationCloseSmgr
Unexecuted instantiation: procarray.c:RelationCloseSmgr
Unexecuted instantiation: standby.c:RelationCloseSmgr
Unexecuted instantiation: inv_api.c:RelationCloseSmgr
Unexecuted instantiation: deadlock.c:RelationCloseSmgr
Unexecuted instantiation: lmgr.c:RelationCloseSmgr
Unexecuted instantiation: lock.c:RelationCloseSmgr
Unexecuted instantiation: predicate.c:RelationCloseSmgr
Unexecuted instantiation: proc.c:RelationCloseSmgr
Unexecuted instantiation: bulk_write.c:RelationCloseSmgr
Unexecuted instantiation: postgres.c:RelationCloseSmgr
Unexecuted instantiation: utility.c:RelationCloseSmgr
Unexecuted instantiation: pgstat_relation.c:RelationCloseSmgr
Unexecuted instantiation: pgstat_replslot.c:RelationCloseSmgr
Unexecuted instantiation: wait_event.c:RelationCloseSmgr
Unexecuted instantiation: dbsize.c:RelationCloseSmgr
Unexecuted instantiation: genfile.c:RelationCloseSmgr
Unexecuted instantiation: pg_upgrade_support.c:RelationCloseSmgr
Unexecuted instantiation: ri_triggers.c:RelationCloseSmgr
Unexecuted instantiation: ruleutils.c:RelationCloseSmgr
Unexecuted instantiation: selfuncs.c:RelationCloseSmgr
Unexecuted instantiation: skipsupport.c:RelationCloseSmgr
Unexecuted instantiation: tid.c:RelationCloseSmgr
Unexecuted instantiation: trigfuncs.c:RelationCloseSmgr
Unexecuted instantiation: tsquery_rewrite.c:RelationCloseSmgr
Unexecuted instantiation: tsvector_op.c:RelationCloseSmgr
Unexecuted instantiation: xml.c:RelationCloseSmgr
Unexecuted instantiation: catcache.c:RelationCloseSmgr
Unexecuted instantiation: evtcache.c:RelationCloseSmgr
Unexecuted instantiation: funccache.c:RelationCloseSmgr
Unexecuted instantiation: inval.c:RelationCloseSmgr
Unexecuted instantiation: partcache.c:RelationCloseSmgr
Unexecuted instantiation: plancache.c:RelationCloseSmgr
Unexecuted instantiation: relcache.c:RelationCloseSmgr
Unexecuted instantiation: syscache.c:RelationCloseSmgr
Unexecuted instantiation: typcache.c:RelationCloseSmgr
Unexecuted instantiation: funcapi.c:RelationCloseSmgr
Unexecuted instantiation: miscinit.c:RelationCloseSmgr
Unexecuted instantiation: postinit.c:RelationCloseSmgr
Unexecuted instantiation: guc_tables.c:RelationCloseSmgr
Unexecuted instantiation: queryenvironment.c:RelationCloseSmgr
Unexecuted instantiation: sortsupport.c:RelationCloseSmgr
Unexecuted instantiation: tuplesortvariants.c:RelationCloseSmgr
Unexecuted instantiation: simple_query_fuzzer.c:RelationCloseSmgr
602
#endif              /* !FRONTEND */
603
604
/*
605
 * RelationGetTargetBlock
606
 *    Fetch relation's current insertion target block.
607
 *
608
 * Returns InvalidBlockNumber if there is no current target block.  Note
609
 * that the target block status is discarded on any smgr-level invalidation,
610
 * so there's no need to re-open the smgr handle if it's not currently open.
611
 */
612
#define RelationGetTargetBlock(relation) \
613
0
  ( (relation)->rd_smgr != NULL ? (relation)->rd_smgr->smgr_targblock : InvalidBlockNumber )
614
615
/*
616
 * RelationSetTargetBlock
617
 *    Set relation's current insertion target block.
618
 */
619
#define RelationSetTargetBlock(relation, targblock) \
620
0
  do { \
621
0
    RelationGetSmgr(relation)->smgr_targblock = (targblock); \
622
0
  } while (0)
623
624
/*
625
 * RelationIsPermanent
626
 *    True if relation is permanent.
627
 */
628
#define RelationIsPermanent(relation) \
629
0
  ((relation)->rd_rel->relpersistence == RELPERSISTENCE_PERMANENT)
630
631
/*
632
 * RelationNeedsWAL
633
 *    True if relation needs WAL.
634
 *
635
 * Returns false if wal_level = minimal and this relation is created or
636
 * truncated in the current transaction.  See "Skipping WAL for New
637
 * RelFileLocator" in src/backend/access/transam/README.
638
 */
639
#define RelationNeedsWAL(relation)                    \
640
0
  (RelationIsPermanent(relation) && (XLogIsNeeded() ||       \
641
0
    (relation->rd_createSubid == InvalidSubTransactionId &&     \
642
0
     relation->rd_firstRelfilelocatorSubid == InvalidSubTransactionId)))
643
644
/*
645
 * RelationUsesLocalBuffers
646
 *    True if relation's pages are stored in local buffers.
647
 */
648
#define RelationUsesLocalBuffers(relation) \
649
0
  ((relation)->rd_rel->relpersistence == RELPERSISTENCE_TEMP)
650
651
/*
652
 * RELATION_IS_LOCAL
653
 *    If a rel is either temp or newly created in the current transaction,
654
 *    it can be assumed to be accessible only to the current backend.
655
 *    This is typically used to decide that we can skip acquiring locks.
656
 *
657
 * Beware of multiple eval of argument
658
 */
659
#define RELATION_IS_LOCAL(relation) \
660
0
  ((relation)->rd_islocaltemp || \
661
0
   (relation)->rd_createSubid != InvalidSubTransactionId)
662
663
/*
664
 * RELATION_IS_OTHER_TEMP
665
 *    Test for a temporary relation that belongs to some other session.
666
 *
667
 * Beware of multiple eval of argument
668
 */
669
#define RELATION_IS_OTHER_TEMP(relation) \
670
0
  ((relation)->rd_rel->relpersistence == RELPERSISTENCE_TEMP && \
671
0
   !(relation)->rd_islocaltemp)
672
673
674
/*
675
 * RelationIsScannable
676
 *    Currently can only be false for a materialized view which has not been
677
 *    populated by its query.  This is likely to get more complicated later,
678
 *    so use a macro which looks like a function.
679
 */
680
0
#define RelationIsScannable(relation) ((relation)->rd_rel->relispopulated)
681
682
/*
683
 * RelationIsPopulated
684
 *    Currently, we don't physically distinguish the "populated" and
685
 *    "scannable" properties of matviews, but that may change later.
686
 *    Hence, use the appropriate one of these macros in code tests.
687
 */
688
0
#define RelationIsPopulated(relation) ((relation)->rd_rel->relispopulated)
689
690
/*
691
 * RelationIsAccessibleInLogicalDecoding
692
 *    True if we need to log enough information to have access via
693
 *    decoding snapshot.
694
 */
695
#define RelationIsAccessibleInLogicalDecoding(relation) \
696
0
  (XLogLogicalInfoActive() && \
697
0
   RelationNeedsWAL(relation) && \
698
0
   (IsCatalogRelation(relation) || RelationIsUsedAsCatalogTable(relation)))
699
700
/*
701
 * RelationIsLogicallyLogged
702
 *    True if we need to log enough information to extract the data from the
703
 *    WAL stream.
704
 *
705
 * We don't log information for unlogged tables (since they don't WAL log
706
 * anyway), for foreign tables (since they don't WAL log, either),
707
 * and for system tables (their content is hard to make sense of, and
708
 * it would complicate decoding slightly for little gain). Note that we *do*
709
 * log information for user defined catalog tables since they presumably are
710
 * interesting to the user...
711
 */
712
#define RelationIsLogicallyLogged(relation) \
713
0
  (XLogLogicalInfoActive() && \
714
0
   RelationNeedsWAL(relation) && \
715
0
   (relation)->rd_rel->relkind != RELKIND_FOREIGN_TABLE && \
716
0
   !IsCatalogRelation(relation))
717
718
/* routines in utils/cache/relcache.c */
719
extern void RelationIncrementReferenceCount(Relation rel);
720
extern void RelationDecrementReferenceCount(Relation rel);
721
722
#endif              /* REL_H */