PostgreSQL Source Code
git master
relfilenode.h
Go to the documentation of this file.
1
/*-------------------------------------------------------------------------
2
*
3
* relfilenode.h
4
* Physical access information for relations.
5
*
6
*
7
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
* Portions Copyright (c) 1994, Regents of the University of California
9
*
10
* src/include/storage/relfilenode.h
11
*
12
*-------------------------------------------------------------------------
13
*/
14
#ifndef RELFILENODE_H
15
#define RELFILENODE_H
16
17
#include "
common/relpath.h
"
18
#include "
storage/backendid.h
"
19
20
/*
21
* RelFileNode must provide all that we need to know to physically access
22
* a relation, with the exception of the backend ID, which can be provided
23
* separately. Note, however, that a "physical" relation is comprised of
24
* multiple files on the filesystem, as each fork is stored as a separate
25
* file, and each fork can be divided into multiple segments. See md.c.
26
*
27
* spcNode identifies the tablespace of the relation. It corresponds to
28
* pg_tablespace.oid.
29
*
30
* dbNode identifies the database of the relation. It is zero for
31
* "shared" relations (those common to all databases of a cluster).
32
* Nonzero dbNode values correspond to pg_database.oid.
33
*
34
* relNode identifies the specific relation. relNode corresponds to
35
* pg_class.relfilenode (NOT pg_class.oid, because we need to be able
36
* to assign new physical files to relations in some situations).
37
* Notice that relNode is only unique within a database in a particular
38
* tablespace.
39
*
40
* Note: spcNode must be GLOBALTABLESPACE_OID if and only if dbNode is
41
* zero. We support shared relations only in the "global" tablespace.
42
*
43
* Note: in pg_class we allow reltablespace == 0 to denote that the
44
* relation is stored in its database's "default" tablespace (as
45
* identified by pg_database.dattablespace). However this shorthand
46
* is NOT allowed in RelFileNode structs --- the real tablespace ID
47
* must be supplied when setting spcNode.
48
*
49
* Note: in pg_class, relfilenode can be zero to denote that the relation
50
* is a "mapped" relation, whose current true filenode number is available
51
* from relmapper.c. Again, this case is NOT allowed in RelFileNodes.
52
*
53
* Note: various places use RelFileNode in hashtable keys. Therefore,
54
* there *must not* be any unused padding bytes in this struct. That
55
* should be safe as long as all the fields are of type Oid.
56
*/
57
typedef
struct
RelFileNode
58
{
59
Oid
spcNode
;
/* tablespace */
60
Oid
dbNode
;
/* database */
61
Oid
relNode
;
/* relation */
62
}
RelFileNode
;
63
64
/*
65
* Augmenting a relfilenode with the backend ID provides all the information
66
* we need to locate the physical storage. The backend ID is InvalidBackendId
67
* for regular relations (those accessible to more than one backend), or the
68
* owning backend's ID for backend-local relations. Backend-local relations
69
* are always transient and removed in case of a database crash; they are
70
* never WAL-logged or fsync'd.
71
*/
72
typedef
struct
RelFileNodeBackend
73
{
74
RelFileNode
node
;
75
BackendId
backend
;
76
}
RelFileNodeBackend
;
77
78
#define RelFileNodeBackendIsTemp(rnode) \
79
((rnode).backend != InvalidBackendId)
80
81
/*
82
* Note: RelFileNodeEquals and RelFileNodeBackendEquals compare relNode first
83
* since that is most likely to be different in two unequal RelFileNodes. It
84
* is probably redundant to compare spcNode if the other fields are found equal,
85
* but do it anyway to be sure. Likewise for checking the backend ID in
86
* RelFileNodeBackendEquals.
87
*/
88
#define RelFileNodeEquals(node1, node2) \
89
((node1).relNode == (node2).relNode && \
90
(node1).dbNode == (node2).dbNode && \
91
(node1).spcNode == (node2).spcNode)
92
93
#define RelFileNodeBackendEquals(node1, node2) \
94
((node1).node.relNode == (node2).node.relNode && \
95
(node1).node.dbNode == (node2).node.dbNode && \
96
(node1).backend == (node2).backend && \
97
(node1).node.spcNode == (node2).node.spcNode)
98
99
#endif
/* RELFILENODE_H */
backendid.h
BackendId
int BackendId
Definition:
backendid.h:21
Oid
unsigned int Oid
Definition:
postgres_ext.h:31
RelFileNodeBackend
struct RelFileNodeBackend RelFileNodeBackend
RelFileNode
struct RelFileNode RelFileNode
relpath.h
RelFileNodeBackend
Definition:
relfilenode.h:73
RelFileNodeBackend::backend
BackendId backend
Definition:
relfilenode.h:75
RelFileNodeBackend::node
RelFileNode node
Definition:
relfilenode.h:74
RelFileNode
Definition:
relfilenode.h:58
RelFileNode::dbNode
Oid dbNode
Definition:
relfilenode.h:60
RelFileNode::spcNode
Oid spcNode
Definition:
relfilenode.h:59
RelFileNode::relNode
Oid relNode
Definition:
relfilenode.h:61
src
include
storage
relfilenode.h
Generated on Sat Jul 2 2022 06:13:24 for PostgreSQL Source Code by
1.9.1