summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2008-10-06 14:13:17 +0000
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2008-10-06 14:13:17 +0000
commit5f853c655663bf829c02895de2b445a5f3caa24b (patch)
tree3dc2757ce91d5409d1def38bbbf666fbfd8aae6d /src
parente59ad5fbb6d71b43a6c4e50875fda56e88527532 (diff)
downloadpostgresql-5f853c655663bf829c02895de2b445a5f3caa24b.tar.gz
Use fork names instead of numbers in the file names for additional
relation forks. While the file names are not visible to users, for those that do peek into the data directory, it's nice to have more descriptive names. Per Greg Stark's suggestion.
Diffstat (limited to 'src')
-rw-r--r--src/backend/catalog/catalog.c53
-rw-r--r--src/backend/utils/adt/dbsize.c31
-rw-r--r--src/include/catalog/catalog.h5
-rw-r--r--src/include/catalog/catversion.h4
-rw-r--r--src/include/storage/relfilenode.h4
5 files changed, 51 insertions, 46 deletions
diff --git a/src/backend/catalog/catalog.c b/src/backend/catalog/catalog.c
index eb7b39c86b..733b9d9622 100644
--- a/src/backend/catalog/catalog.c
+++ b/src/backend/catalog/catalog.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/catalog/catalog.c,v 1.78 2008/08/11 11:05:10 heikki Exp $
+ * $PostgreSQL: pgsql/src/backend/catalog/catalog.c,v 1.79 2008/10/06 14:13:17 heikki Exp $
*
*-------------------------------------------------------------------------
*/
@@ -43,8 +43,38 @@
#define OIDCHARS 10 /* max chars printed by %u */
-#define FORKNUMCHARS 1 /* max chars for a fork number */
+#define FORKNAMECHARS 4 /* max chars for a fork name */
+/*
+ * Lookup table of fork name by fork number.
+ *
+ * If you add a new entry, remember to update the errhint below, and the
+ * documentation for pg_relation_size(). Also keep FORKNAMECHARS above
+ * up-to-date.
+ */
+const char *forkNames[] = {
+ "main", /* MAIN_FORKNUM */
+ "fsm" /* FSM_FORKNUM */
+};
+
+/*
+ * forkname_to_number - look up fork number by name
+ */
+ForkNumber
+forkname_to_number(char *forkName)
+{
+ ForkNumber forkNum;
+
+ for (forkNum = 0; forkNum <= MAX_FORKNUM; forkNum++)
+ if (strcmp(forkNames[forkNum], forkName) == 0)
+ return forkNum;
+
+ ereport(ERROR,
+ (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+ errmsg("invalid fork name"),
+ errhint("Valid fork names are 'main' and 'fsm'")));
+ return InvalidForkNumber; /* keep compiler quiet */
+}
/*
* relpath - construct path to a relation's file
@@ -61,22 +91,22 @@ relpath(RelFileNode rnode, ForkNumber forknum)
{
/* Shared system relations live in {datadir}/global */
Assert(rnode.dbNode == 0);
- pathlen = 7 + OIDCHARS + 1 + FORKNUMCHARS + 1;
+ pathlen = 7 + OIDCHARS + 1 + FORKNAMECHARS + 1;
path = (char *) palloc(pathlen);
if (forknum != MAIN_FORKNUM)
- snprintf(path, pathlen, "global/%u_%u",
- rnode.relNode, forknum);
+ snprintf(path, pathlen, "global/%u_%s",
+ rnode.relNode, forkNames[forknum]);
else
snprintf(path, pathlen, "global/%u", rnode.relNode);
}
else if (rnode.spcNode == DEFAULTTABLESPACE_OID)
{
/* The default tablespace is {datadir}/base */
- pathlen = 5 + OIDCHARS + 1 + OIDCHARS + 1 + FORKNUMCHARS + 1;
+ pathlen = 5 + OIDCHARS + 1 + OIDCHARS + 1 + FORKNAMECHARS + 1;
path = (char *) palloc(pathlen);
if (forknum != MAIN_FORKNUM)
- snprintf(path, pathlen, "base/%u/%u_%u",
- rnode.dbNode, rnode.relNode, forknum);
+ snprintf(path, pathlen, "base/%u/%u_%s",
+ rnode.dbNode, rnode.relNode, forkNames[forknum]);
else
snprintf(path, pathlen, "base/%u/%u",
rnode.dbNode, rnode.relNode);
@@ -85,11 +115,12 @@ relpath(RelFileNode rnode, ForkNumber forknum)
{
/* All other tablespaces are accessed via symlinks */
pathlen = 10 + OIDCHARS + 1 + OIDCHARS + 1 + OIDCHARS + 1
- + FORKNUMCHARS + 1;
+ + FORKNAMECHARS + 1;
path = (char *) palloc(pathlen);
if (forknum != MAIN_FORKNUM)
- snprintf(path, pathlen, "pg_tblspc/%u/%u/%u_%u",
- rnode.spcNode, rnode.dbNode, rnode.relNode, forknum);
+ snprintf(path, pathlen, "pg_tblspc/%u/%u/%u_%s",
+ rnode.spcNode, rnode.dbNode, rnode.relNode,
+ forkNames[forknum]);
else
snprintf(path, pathlen, "pg_tblspc/%u/%u/%u",
rnode.spcNode, rnode.dbNode, rnode.relNode);
diff --git a/src/backend/utils/adt/dbsize.c b/src/backend/utils/adt/dbsize.c
index d225b3e7c7..4d3f8c0b5c 100644
--- a/src/backend/utils/adt/dbsize.c
+++ b/src/backend/utils/adt/dbsize.c
@@ -5,7 +5,7 @@
* Copyright (c) 2002-2008, PostgreSQL Global Development Group
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/dbsize.c,v 1.21 2008/10/03 07:33:09 heikki Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/dbsize.c,v 1.22 2008/10/06 14:13:17 heikki Exp $
*
*/
@@ -283,35 +283,6 @@ calculate_relation_size(RelFileNode *rfn, ForkNumber forknum)
return totalsize;
}
-
-/*
- * XXX: Consider making this global and moving elsewhere. But currently
- * there's no other users for this.
- *
- * Remember to also update the errhint below if you add entries, and the
- * documentation for pg_relation_size().
- */
-static char *forkNames[] = {
- "main", /* MAIN_FORKNUM */
- "fsm" /* FSM_FORKNUM */
-};
-
-static ForkNumber
-forkname_to_number(char *forkName)
-{
- ForkNumber forkNum;
-
- for (forkNum = 0; forkNum <= MAX_FORKNUM; forkNum++)
- if (strcmp(forkNames[forkNum], forkName) == 0)
- return forkNum;
-
- ereport(ERROR,
- (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("invalid fork name"),
- errhint("Valid fork names are 'main' and 'fsm'")));
- return InvalidForkNumber; /* keep compiler quiet */
-}
-
Datum
pg_relation_size(PG_FUNCTION_ARGS)
{
diff --git a/src/include/catalog/catalog.h b/src/include/catalog/catalog.h
index 52a69e1341..fb555cbc6b 100644
--- a/src/include/catalog/catalog.h
+++ b/src/include/catalog/catalog.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/catalog/catalog.h,v 1.41 2008/08/11 11:05:11 heikki Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/catalog.h,v 1.42 2008/10/06 14:13:17 heikki Exp $
*
*-------------------------------------------------------------------------
*/
@@ -19,6 +19,9 @@
#include "utils/relcache.h"
+extern const char *forkNames[];
+extern ForkNumber forkname_to_number(char *forkName);
+
extern char *relpath(RelFileNode rnode, ForkNumber forknum);
extern char *GetDatabasePath(Oid dbNode, Oid spcNode);
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
index fd6895263b..cdd9fa272e 100644
--- a/src/include/catalog/catversion.h
+++ b/src/include/catalog/catversion.h
@@ -37,7 +37,7 @@
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.494 2008/10/06 13:05:37 mha Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.495 2008/10/06 14:13:17 heikki Exp $
*
*-------------------------------------------------------------------------
*/
@@ -53,6 +53,6 @@
*/
/* yyyymmddN */
-#define CATALOG_VERSION_NO 200810061
+#define CATALOG_VERSION_NO 200810062
#endif
diff --git a/src/include/storage/relfilenode.h b/src/include/storage/relfilenode.h
index 128cff99a9..383cc18a57 100644
--- a/src/include/storage/relfilenode.h
+++ b/src/include/storage/relfilenode.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/storage/relfilenode.h,v 1.18 2008/10/03 07:33:10 heikki Exp $
+ * $PostgreSQL: pgsql/src/include/storage/relfilenode.h,v 1.19 2008/10/06 14:13:17 heikki Exp $
*
*-------------------------------------------------------------------------
*/
@@ -27,7 +27,7 @@ typedef enum ForkNumber
FSM_FORKNUM
/*
* NOTE: if you add a new fork, change MAX_FORKNUM below and update the
- * name to number mapping in utils/adt/dbsize.c
+ * forkNames array in catalog.c
*/
} ForkNumber;