]> granicus.if.org Git - postgresql/commitdiff
Support TB (terabyte) memory unit in GUC variables.
authorFujii Masao <fujii@postgresql.org>
Wed, 19 Jun 2013 23:17:14 +0000 (08:17 +0900)
committerFujii Masao <fujii@postgresql.org>
Wed, 19 Jun 2013 23:17:14 +0000 (08:17 +0900)
Patch by Simon Riggs, reviewed by Jeff Janes and me.

doc/src/sgml/config.sgml
src/backend/utils/misc/guc.c
src/backend/utils/misc/postgresql.conf.sample

index c7d84b59ce2b6213f453a8b0118f21ca11ee3c87..940ed6ef58b8fd8794ae00674e3f2fc7a2d5b9f5 100644 (file)
@@ -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
index ea16c64619f76636ba8e2de5c2def6bb02079872..3a7653698d35864d2f4851e55acdb84ba3d271d3 100644 (file)
 
 #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";
index 0303ac78c5fdb173232ebe2c85ca3039547c20b8..0d7249f4dbd7421d1184cbfaffb9d384071da5fe 100644 (file)
@@ -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