PostgreSQL Source Code  git master
relpath.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * relpath.h
4  * Declarations for GetRelationPath() and friends
5  *
6  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
7  * Portions Copyright (c) 1994, Regents of the University of California
8  *
9  * src/include/common/relpath.h
10  *
11  *-------------------------------------------------------------------------
12  */
13 #ifndef RELPATH_H
14 #define RELPATH_H
15 
16 /*
17  * 'pgrminclude ignore' needed here because CppAsString2() does not throw
18  * an error if the symbol is not defined.
19  */
20 #include "catalog/catversion.h" /* pgrminclude ignore */
21 
22 
23 /*
24  * Name of major-version-specific tablespace subdirectories
25  */
26 #define TABLESPACE_VERSION_DIRECTORY "PG_" PG_MAJORVERSION "_" \
27  CppAsString2(CATALOG_VERSION_NO)
28 
29 /* Characters to allow for an OID in a relation path */
30 #define OIDCHARS 10 /* max chars printed by %u */
31 
32 /*
33  * Stuff for fork names.
34  *
35  * The physical storage of a relation consists of one or more forks.
36  * The main fork is always created, but in addition to that there can be
37  * additional forks for storing various metadata. ForkNumber is used when
38  * we need to refer to a specific fork in a relation.
39  */
40 typedef enum ForkNumber
41 {
47 
48  /*
49  * NOTE: if you add a new fork, change MAX_FORKNUM and possibly
50  * FORKNAMECHARS below, and update the forkNames array in
51  * src/common/relpath.c
52  */
53 } ForkNumber;
54 
55 #define MAX_FORKNUM INIT_FORKNUM
56 
57 #define FORKNAMECHARS 4 /* max chars for a fork name */
58 
59 extern const char *const forkNames[];
60 
61 extern ForkNumber forkname_to_number(const char *forkName);
62 extern int forkname_chars(const char *str, ForkNumber *fork);
63 
64 /*
65  * Stuff for computing filesystem pathnames for relations.
66  */
67 extern char *GetDatabasePath(Oid dbNode, Oid spcNode);
68 
69 extern char *GetRelationPath(Oid dbNode, Oid spcNode, Oid relNode,
70  int backendId, ForkNumber forkNumber);
71 
72 /*
73  * Wrapper macros for GetRelationPath. Beware of multiple
74  * evaluation of the RelFileNode or RelFileNodeBackend argument!
75  */
76 
77 /* First argument is a RelFileNode */
78 #define relpathbackend(rnode, backend, forknum) \
79  GetRelationPath((rnode).dbNode, (rnode).spcNode, (rnode).relNode, \
80  backend, forknum)
81 
82 /* First argument is a RelFileNode */
83 #define relpathperm(rnode, forknum) \
84  relpathbackend(rnode, InvalidBackendId, forknum)
85 
86 /* First argument is a RelFileNodeBackend */
87 #define relpath(rnode, forknum) \
88  relpathbackend((rnode).node, (rnode).backend, forknum)
89 
90 #endif /* RELPATH_H */
ForkNumber forkname_to_number(const char *forkName)
Definition: relpath.c:47
char * GetDatabasePath(Oid dbNode, Oid spcNode)
Definition: relpath.c:107
unsigned int Oid
Definition: postgres_ext.h:31
char * GetRelationPath(Oid dbNode, Oid spcNode, Oid relNode, int backendId, ForkNumber forkNumber)
Definition: relpath.c:138
const char *const forkNames[]
Definition: relpath.c:33
ForkNumber
Definition: relpath.h:40
int forkname_chars(const char *str, ForkNumber *fork)
Definition: relpath.c:78