diff options
| author | Fujii Masao <fujii@postgresql.org> | 2013-06-20 08:17:14 +0900 |
|---|---|---|
| committer | Fujii Masao <fujii@postgresql.org> | 2013-06-20 08:17:14 +0900 |
| commit | bab54e383dd102001753366d3c124f706c7967dd (patch) | |
| tree | 809d19cea7bd7151e6c5398129a78465dc3ad4e2 /src/backend/utils/misc/guc.c | |
| parent | f979599b2068f036405f1b51a9c4260619b06941 (diff) | |
Support TB (terabyte) memory unit in GUC variables.
Patch by Simon Riggs, reviewed by Jeff Janes and me.
Diffstat (limited to 'src/backend/utils/misc/guc.c')
| -rw-r--r-- | src/backend/utils/misc/guc.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index ea16c64619f..3a7653698d3 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -105,6 +105,7 @@ #define KB_PER_MB (1024) #define KB_PER_GB (1024*1024) +#define KB_PER_TB (1024*1024*1024) #define MS_PER_S 1000 #define S_PER_MIN 60 @@ -4837,7 +4838,7 @@ parse_int(const char *value, int *result, int flags, const char **hintmsg) { /* Set hint for use if no match or trailing garbage */ if (hintmsg) - *hintmsg = gettext_noop("Valid units for this parameter are \"kB\", \"MB\", and \"GB\"."); + *hintmsg = gettext_noop("Valid units for this parameter are \"kB\", \"MB\", \"GB\", and \"TB\"."); #if BLCKSZ < 1024 || BLCKSZ > (1024*1024) #error BLCKSZ must be between 1KB and 1MB @@ -4891,6 +4892,22 @@ parse_int(const char *value, int *result, int flags, const char **hintmsg) break; } } + else if (strncmp(endptr, "TB", 2) == 0) + { + endptr += 2; + switch (flags & GUC_UNIT_MEMORY) + { + case GUC_UNIT_KB: + val *= KB_PER_TB; + break; + case GUC_UNIT_BLOCKS: + val *= KB_PER_TB / (BLCKSZ / 1024); + break; + case GUC_UNIT_XBLOCKS: + val *= KB_PER_TB / (XLOG_BLCKSZ / 1024); + break; + } + } } else if (flags & GUC_UNIT_TIME) { @@ -7384,7 +7401,12 @@ _ShowOption(struct config_generic * record, bool use_units) break; } - if (result % KB_PER_GB == 0) + if (result % KB_PER_TB == 0) + { + result /= KB_PER_TB; + unit = "TB"; + } + else if (result % KB_PER_GB == 0) { result /= KB_PER_GB; unit = "GB"; |
