diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index c7d84b59ce2..940ed6ef58b 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 kB (kilobytes), MB
- (megabytes), and GB (gigabytes); valid time units
+ (megabytes), GB (gigabytes), and TB (terabytes); valid time units
are ms (milliseconds), s
(seconds), min (minutes), h
(hours), and d (days). Note that the multiplier
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";
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index 0303ac78c5f..0d7249f4dbd 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