diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index c7d84b59ce2b6213f453a8b0118f21ca11ee3c87..940ed6ef58b8fd8794ae00674e3f2fc7a2d5b9f5 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -39,7 +39,7 @@ For convenience, a different unit can also be specified explicitly. Valid memory units are <literal>kB</literal> (kilobytes), <literal>MB</literal> - (megabytes), and <literal>GB</literal> (gigabytes); valid time units + (megabytes), <literal>GB</literal> (gigabytes), and <literal>TB</literal> (terabytes); valid time units are <literal>ms</literal> (milliseconds), <literal>s</literal> (seconds), <literal>min</literal> (minutes), <literal>h</literal> (hours), and <literal>d</literal> (days). Note that the multiplier diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index ea16c64619f76636ba8e2de5c2def6bb02079872..3a7653698d35864d2f4851e55acdb84ba3d271d3 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"; diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 0303ac78c5fdb173232ebe2c85ca3039547c20b8..0d7249f4dbd7421d1184cbfaffb9d384071da5fe 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -27,7 +27,7 @@ # Memory units: kB = kilobytes Time units: ms = milliseconds # MB = megabytes s = seconds # GB = gigabytes min = minutes -# h = hours +# TB = terabytes h = hours # d = days