None of the code that uses GUC values is really prepared for them to
 hold NaN, but parse_real() didn't have any defense against accepting
 such a value.  Treat it the same as a syntax error. 
 I haven't attempted to analyze the exact consequences of setting any
 of the float GUCs to NaN, but since they're quite unlikely to be good,
 this seems like a back-patchable bug fix. 
 Note: we don't need an explicit test for +-Infinity because those will
 be rejected by existing range checks.  I added a regression test for
 that in HEAD, but not older branches because the spelling of the value
 in the error message will be platform-dependent in branches where we
 don't always use port/snprintf.c. 
 Discussion: https://postgr.es/m/1798.
1552165479@sss.pgh.pa.us  
   
              if (endptr == value || errno == ERANGE)
         return false;
  
 +   /* reject NaN (infinities will fail range checks later) */
 +   if (isnan(val))
 +       return false;
 +
     /* allow whitespace after number */
     while (isspace((unsigned char) *endptr))
         endptr++;
           Sun Aug 13 12:34:56 2006 PDT
  (1 row)
  
 +-- Test some simple error cases
 +SET seq_page_cost TO 'NaN';
 +ERROR:  parameter "seq_page_cost" requires a numeric value
 +SET vacuum_cost_delay TO '10s';
 +ERROR:  10000 is outside the valid range for parameter "vacuum_cost_delay" (0 .. 100)
 +SET geqo_selection_bias TO '-infinity';
 +ERROR:  -Infinity is outside the valid range for parameter "geqo_selection_bias" (1.5 .. 2)
  --
  -- Test DISCARD TEMP
  --
          SHOW datestyle;
  SELECT '2006-08-13 12:34:56'::timestamptz;
  
 +-- Test some simple error cases
 +SET seq_page_cost TO 'NaN';
 +SET vacuum_cost_delay TO '10s';
 +SET geqo_selection_bias TO '-infinity';
 +
  --
  -- Test DISCARD TEMP
  --