PostgreSQL Source Code git master
Data Structures | Macros | Typedefs | Enumerations | Functions
rel.h File Reference
#include "access/tupdesc.h"
#include "access/xlog.h"
#include "catalog/catalog.h"
#include "catalog/pg_class.h"
#include "catalog/pg_index.h"
#include "catalog/pg_publication.h"
#include "nodes/bitmapset.h"
#include "partitioning/partdefs.h"
#include "rewrite/prs2lock.h"
#include "storage/block.h"
#include "storage/relfilelocator.h"
#include "storage/smgr.h"
#include "utils/relcache.h"
#include "utils/reltrigger.h"
Include dependency graph for rel.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct   LockRelId
 
struct   LockInfoData
 
struct   RelationData
 
 
struct   AutoVacOpts
 
struct   StdRdOptions
 
struct   ViewOptions
 

Macros

#define  HEAP_MIN_FILLFACTOR   10
 
#define  HEAP_DEFAULT_FILLFACTOR   100
 
#define  RelationGetToastTupleTarget(relation, defaulttarg)
 
#define  RelationGetFillFactor(relation, defaultff)
 
#define  RelationGetTargetPageUsage(relation, defaultff)    (BLCKSZ * RelationGetFillFactor(relation, defaultff) / 100)
 
#define  RelationGetTargetPageFreeSpace(relation, defaultff)    (BLCKSZ * (100 - RelationGetFillFactor(relation, defaultff)) / 100)
 
#define  RelationIsUsedAsCatalogTable(relation)
 
#define  RelationGetParallelWorkers(relation, defaultpw)
 
#define  RelationIsSecurityView(relation)
 
#define  RelationHasSecurityInvoker(relation)
 
#define  RelationHasCheckOption(relation)
 
#define  RelationHasLocalCheckOption(relation)
 
#define  RelationHasCascadedCheckOption(relation)
 
#define  RelationIsValid(relation)   ((relation) != NULL)
 
#define  RelationHasReferenceCountZero(relation)    ((bool)((relation)->rd_refcnt == 0))
 
#define  RelationGetForm(relation)   ((relation)->rd_rel)
 
#define  RelationGetRelid(relation)   ((relation)->rd_id)
 
#define  RelationGetNumberOfAttributes(relation)   ((relation)->rd_rel->relnatts)
 
#define  IndexRelationGetNumberOfAttributes(relation)    ((relation)->rd_index->indnatts)
 
#define  IndexRelationGetNumberOfKeyAttributes(relation)    ((relation)->rd_index->indnkeyatts)
 
#define  RelationGetDescr(relation)   ((relation)->rd_att)
 
#define  RelationGetRelationName(relation)    (NameStr((relation)->rd_rel->relname))
 
#define  RelationGetNamespace(relation)    ((relation)->rd_rel->relnamespace)
 
#define  RelationIsMapped(relation)
 
#define  RelationGetTargetBlock(relation)    ( (relation)->rd_smgr != NULL ? (relation)->rd_smgr->smgr_targblock : InvalidBlockNumber )
 
#define  RelationSetTargetBlock(relation, targblock)
 
#define  RelationIsPermanent(relation)    ((relation)->rd_rel->relpersistence == RELPERSISTENCE_PERMANENT)
 
#define  RelationNeedsWAL(relation)
 
#define  RelationUsesLocalBuffers(relation)    ((relation)->rd_rel->relpersistence == RELPERSISTENCE_TEMP)
 
#define  RELATION_IS_LOCAL(relation)
 
#define  RELATION_IS_OTHER_TEMP(relation)
 
#define  RelationIsScannable(relation)   ((relation)->rd_rel->relispopulated)
 
#define  RelationIsPopulated(relation)   ((relation)->rd_rel->relispopulated)
 
 
#define  RelationIsLogicallyLogged(relation)
 

Typedefs

typedef struct LockRelId  LockRelId
 
typedef struct LockInfoData  LockInfoData
 
typedef LockInfoDataLockInfo
 
typedef struct RelationData  RelationData
 
 
typedef struct AutoVacOpts  AutoVacOpts
 
 
typedef struct StdRdOptions  StdRdOptions
 
 
typedef struct ViewOptions  ViewOptions
 

Enumerations

 
 

Functions

 
static void  RelationCloseSmgr (Relation relation)
 
 
 

Macro Definition Documentation

HEAP_DEFAULT_FILLFACTOR

#define HEAP_DEFAULT_FILLFACTOR   100

Definition at line 360 of file rel.h.

HEAP_MIN_FILLFACTOR

#define HEAP_MIN_FILLFACTOR   10

Definition at line 359 of file rel.h.

IndexRelationGetNumberOfAttributes

#define IndexRelationGetNumberOfAttributes (   relation )     ((relation)->rd_index->indnatts)

Definition at line 526 of file rel.h.

IndexRelationGetNumberOfKeyAttributes

#define IndexRelationGetNumberOfKeyAttributes (   relation )     ((relation)->rd_index->indnkeyatts)

Definition at line 533 of file rel.h.

RELATION_IS_LOCAL

#define RELATION_IS_LOCAL (   relation )
Value:
((relation)->rd_islocaltemp || \
(relation)->rd_createSubid != InvalidSubTransactionId)
#define InvalidSubTransactionId
Definition: c.h:663

Definition at line 657 of file rel.h.

RELATION_IS_OTHER_TEMP

#define RELATION_IS_OTHER_TEMP (   relation )
Value:
((relation)->rd_rel->relpersistence == RELPERSISTENCE_TEMP && \
!(relation)->rd_islocaltemp)

Definition at line 667 of file rel.h.

RelationGetDescr

#define RelationGetDescr (   relation )    ((relation)->rd_att)

Definition at line 540 of file rel.h.

RelationGetFillFactor

#define RelationGetFillFactor (   relation,
  defaultff 
)
Value:
((relation)->rd_options ? \
((StdRdOptions *) (relation)->rd_options)->fillfactor : (defaultff))
Definition: rel.h:341

Definition at line 374 of file rel.h.

RelationGetForm

#define RelationGetForm (   relation )    ((relation)->rd_rel)

Definition at line 508 of file rel.h.

RelationGetNamespace

#define RelationGetNamespace (   relation )     ((relation)->rd_rel->relnamespace)

Definition at line 555 of file rel.h.

RelationGetNumberOfAttributes

#define RelationGetNumberOfAttributes (   relation )    ((relation)->rd_rel->relnatts)

Definition at line 520 of file rel.h.

RelationGetParallelWorkers

#define RelationGetParallelWorkers (   relation,
  defaultpw 
)
Value:
((relation)->rd_options ? \
((StdRdOptions *) (relation)->rd_options)->parallel_workers : (defaultpw))

Definition at line 408 of file rel.h.

RelationGetRelationName

#define RelationGetRelationName (   relation )     (NameStr((relation)->rd_rel->relname))

Definition at line 548 of file rel.h.

RelationGetRelid

#define RelationGetRelid (   relation )    ((relation)->rd_id)

Definition at line 514 of file rel.h.

RelationGetTargetBlock

#define RelationGetTargetBlock (   relation )     ( (relation)->rd_smgr != NULL ? (relation)->rd_smgr->smgr_targblock : InvalidBlockNumber )

Definition at line 610 of file rel.h.

RelationGetTargetPageFreeSpace

#define RelationGetTargetPageFreeSpace (   relation,
  defaultff 
)     (BLCKSZ * (100 - RelationGetFillFactor(relation, defaultff)) / 100)

Definition at line 389 of file rel.h.

RelationGetTargetPageUsage

#define RelationGetTargetPageUsage (   relation,
  defaultff 
)     (BLCKSZ * RelationGetFillFactor(relation, defaultff) / 100)

Definition at line 382 of file rel.h.

RelationGetToastTupleTarget

#define RelationGetToastTupleTarget (   relation,
  defaulttarg 
)
Value:
((relation)->rd_options ? \
((StdRdOptions *) (relation)->rd_options)->toast_tuple_target : (defaulttarg))

Definition at line 366 of file rel.h.

RelationHasCascadedCheckOption

#define RelationHasCascadedCheckOption (   relation )
Value:
(AssertMacro(relation->rd_rel->relkind == RELKIND_VIEW), \
(relation)->rd_options && \
((ViewOptions *) (relation)->rd_options)->check_option == \
VIEW_OPTION_CHECK_OPTION_CASCADED)
#define AssertMacro(condition)
Definition: c.h:858
Definition: rel.h:425

Definition at line 479 of file rel.h.

RelationHasCheckOption

#define RelationHasCheckOption (   relation )
Value:
(AssertMacro(relation->rd_rel->relkind == RELKIND_VIEW), \
(relation)->rd_options && \
((ViewOptions *) (relation)->rd_options)->check_option != \
VIEW_OPTION_CHECK_OPTION_NOT_SET)

Definition at line 457 of file rel.h.

RelationHasLocalCheckOption

#define RelationHasLocalCheckOption (   relation )
Value:
(AssertMacro(relation->rd_rel->relkind == RELKIND_VIEW), \
(relation)->rd_options && \
((ViewOptions *) (relation)->rd_options)->check_option == \
VIEW_OPTION_CHECK_OPTION_LOCAL)

Definition at line 468 of file rel.h.

RelationHasReferenceCountZero

#define RelationHasReferenceCountZero (   relation )     ((bool)((relation)->rd_refcnt == 0))

Definition at line 498 of file rel.h.

RelationHasSecurityInvoker

#define RelationHasSecurityInvoker (   relation )
Value:
(AssertMacro(relation->rd_rel->relkind == RELKIND_VIEW), \
(relation)->rd_options ? \
((ViewOptions *) (relation)->rd_options)->security_invoker : false)

Definition at line 447 of file rel.h.

RelationIsAccessibleInLogicalDecoding

#define RelationIsAccessibleInLogicalDecoding (   relation )
Value:
RelationNeedsWAL(relation) && \
bool IsCatalogRelation(Relation relation)
Definition: catalog.c:104
#define RelationIsUsedAsCatalogTable(relation)
Definition: rel.h:397
#define XLogLogicalInfoActive()
Definition: xlog.h:126

Definition at line 693 of file rel.h.

RelationIsLogicallyLogged

#define RelationIsLogicallyLogged (   relation )
Value:
RelationNeedsWAL(relation) && \
(relation)->rd_rel->relkind != RELKIND_FOREIGN_TABLE && \
!IsCatalogRelation(relation))

Definition at line 710 of file rel.h.

RelationIsMapped

#define RelationIsMapped (   relation )
Value:
(RELKIND_HAS_STORAGE((relation)->rd_rel->relkind) && \
((relation)->rd_rel->relfilenode == InvalidRelFileNumber))
#define InvalidRelFileNumber
Definition: relpath.h:26

Definition at line 563 of file rel.h.

RelationIsPermanent

#define RelationIsPermanent (   relation )     ((relation)->rd_rel->relpersistence == RELPERSISTENCE_PERMANENT)

Definition at line 626 of file rel.h.

RelationIsPopulated

#define RelationIsPopulated (   relation )    ((relation)->rd_rel->relispopulated)

Definition at line 686 of file rel.h.

RelationIsScannable

#define RelationIsScannable (   relation )    ((relation)->rd_rel->relispopulated)

Definition at line 678 of file rel.h.

RelationIsSecurityView

#define RelationIsSecurityView (   relation )
Value:
(AssertMacro(relation->rd_rel->relkind == RELKIND_VIEW), \
(relation)->rd_options ? \
((ViewOptions *) (relation)->rd_options)->security_barrier : false)

Definition at line 437 of file rel.h.

RelationIsUsedAsCatalogTable

#define RelationIsUsedAsCatalogTable (   relation )
Value:
((relation)->rd_options && \
((relation)->rd_rel->relkind == RELKIND_RELATION || \
(relation)->rd_rel->relkind == RELKIND_MATVIEW) ? \
((StdRdOptions *) (relation)->rd_options)->user_catalog_table : false)

Definition at line 397 of file rel.h.

RelationIsValid

#define RelationIsValid (   relation )    ((relation) != NULL)

Definition at line 489 of file rel.h.

RelationNeedsWAL

#define RelationNeedsWAL (   relation )
Value:
(RelationIsPermanent(relation) && (XLogIsNeeded() || \
(relation->rd_createSubid == InvalidSubTransactionId && \
relation->rd_firstRelfilelocatorSubid == InvalidSubTransactionId)))
#define RelationIsPermanent(relation)
Definition: rel.h:626
#define XLogIsNeeded()
Definition: xlog.h:109

Definition at line 637 of file rel.h.

RelationSetTargetBlock

#define RelationSetTargetBlock (   relation,
  targblock 
)
Value:
do { \
RelationGetSmgr(relation)->smgr_targblock = (targblock); \
} while (0)

Definition at line 617 of file rel.h.

RelationUsesLocalBuffers

#define RelationUsesLocalBuffers (   relation )     ((relation)->rd_rel->relpersistence == RELPERSISTENCE_TEMP)

Definition at line 646 of file rel.h.

Typedef Documentation

AutoVacOpts

typedef struct AutoVacOpts AutoVacOpts

ForeignKeyCacheInfo

LockInfo

Definition at line 49 of file rel.h.

LockInfoData

typedef struct LockInfoData LockInfoData

LockRelId

typedef struct LockRelId LockRelId

RelationData

typedef struct RelationData RelationData

StdRdOptIndexCleanup

StdRdOptions

typedef struct StdRdOptions StdRdOptions

ViewOptCheckOption

ViewOptions

typedef struct ViewOptions ViewOptions

Enumeration Type Documentation

StdRdOptIndexCleanup

Enumerator
STDRD_OPTION_VACUUM_INDEX_CLEANUP_AUTO 
STDRD_OPTION_VACUUM_INDEX_CLEANUP_OFF 
STDRD_OPTION_VACUUM_INDEX_CLEANUP_ON 

Definition at line 333 of file rel.h.

334{
StdRdOptIndexCleanup
Definition: rel.h:334
@ STDRD_OPTION_VACUUM_INDEX_CLEANUP_AUTO
Definition: rel.h:335
@ STDRD_OPTION_VACUUM_INDEX_CLEANUP_OFF
Definition: rel.h:336
@ STDRD_OPTION_VACUUM_INDEX_CLEANUP_ON
Definition: rel.h:337

ViewOptCheckOption

Enumerator
VIEW_OPTION_CHECK_OPTION_NOT_SET 
VIEW_OPTION_CHECK_OPTION_LOCAL 
VIEW_OPTION_CHECK_OPTION_CASCADED 

Definition at line 413 of file rel.h.

414{
ViewOptCheckOption
Definition: rel.h:414
@ VIEW_OPTION_CHECK_OPTION_NOT_SET
Definition: rel.h:415
@ VIEW_OPTION_CHECK_OPTION_LOCAL
Definition: rel.h:416
@ VIEW_OPTION_CHECK_OPTION_CASCADED
Definition: rel.h:417

Function Documentation

RelationCloseSmgr()

static void RelationCloseSmgr ( Relation  relation )
inlinestatic

Definition at line 591 of file rel.h.

592{
593 if (relation->rd_smgr != NULL)
594 {
595 smgrunpin(relation->rd_smgr);
596 smgrclose(relation->rd_smgr);
597 relation->rd_smgr = NULL;
598 }
599}
void smgrunpin(SMgrRelation reln)
Definition: smgr.c:311
void smgrclose(SMgrRelation reln)
Definition: smgr.c:374
SMgrRelation rd_smgr
Definition: rel.h:58

References RelationData::rd_smgr, smgrclose(), and smgrunpin().

Referenced by RelationCacheInvalidate(), RelationDestroyRelation(), RelationDropStorage(), and RelationInvalidateRelation().

RelationDecrementReferenceCount()

void RelationDecrementReferenceCount ( Relation  rel )

Definition at line 2200 of file relcache.c.

2201{
2202 Assert(rel->rd_refcnt > 0);
2203 rel->rd_refcnt -= 1;
2206}
Assert(PointerIsAligned(start, uint64))
#define IsBootstrapProcessingMode()
Definition: miscadmin.h:476
static void ResourceOwnerForgetRelationRef(ResourceOwner owner, Relation rel)
Definition: relcache.c:2173
ResourceOwner CurrentResourceOwner
Definition: resowner.c:173
int rd_refcnt
Definition: rel.h:59

References Assert(), CurrentResourceOwner, IsBootstrapProcessingMode, RelationData::rd_refcnt, and ResourceOwnerForgetRelationRef().

Referenced by DestroyPartitionDirectory(), heap_endscan(), index_endscan(), RelationCacheInitializePhase3(), RelationClose(), and RelationFlushRelation().

RelationGetSmgr()

static SMgrRelation RelationGetSmgr ( Relation  rel )
inlinestatic

Definition at line 576 of file rel.h.

577{
578 if (unlikely(rel->rd_smgr == NULL))
579 {
580 rel->rd_smgr = smgropen(rel->rd_locator, rel->rd_backend);
581 smgrpin(rel->rd_smgr);
582 }
583 return rel->rd_smgr;
584}
#define unlikely(x)
Definition: c.h:402
SMgrRelation smgropen(RelFileLocator rlocator, ProcNumber backend)
Definition: smgr.c:240
void smgrpin(SMgrRelation reln)
Definition: smgr.c:296
ProcNumber rd_backend
Definition: rel.h:60
RelFileLocator rd_locator
Definition: rel.h:57

References RelationData::rd_backend, RelationData::rd_locator, RelationData::rd_smgr, smgropen(), smgrpin(), and unlikely.

Referenced by _hash_alloc_buckets(), autoprewarm_database_main(), bt_index_check_callback(), ExtendBufferedRelBy(), ExtendBufferedRelTo(), FlushRelationBuffers(), FreeSpaceMapPrepareTruncateRel(), fsm_does_block_exist(), fsm_readbuf(), gistBuildCallback(), heapam_relation_copy_data(), index_build(), index_copy_data(), modify_rel_block(), pg_prewarm(), pg_truncate_visibility_map(), PrefetchBuffer(), read_rel_block_ll(), read_stream_begin_relation(), ReadBufferExtended(), RelationGetNumberOfBlocksInFork(), RelationPreTruncate(), RelationTruncate(), smgr_bulk_start_rel(), table_block_relation_size(), visibilitymap_prepare_truncate(), vm_extend(), and vm_readbuf().

RelationIncrementReferenceCount()

void RelationIncrementReferenceCount ( Relation  rel )

Definition at line 2187 of file relcache.c.

2188{
2190 rel->rd_refcnt += 1;
2193}
static void ResourceOwnerRememberRelationRef(ResourceOwner owner, Relation rel)
Definition: relcache.c:2168
void ResourceOwnerEnlarge(ResourceOwner owner)
Definition: resowner.c:449

References CurrentResourceOwner, IsBootstrapProcessingMode, RelationData::rd_refcnt, ResourceOwnerEnlarge(), and ResourceOwnerRememberRelationRef().

Referenced by heap_beginscan(), index_beginscan_internal(), PartitionDirectoryLookup(), RelationBuildLocalRelation(), RelationCacheInitializePhase3(), RelationFlushRelation(), and RelationIdGetRelation().

AltStyle によって変換されたページ (->オリジナル) /