1. 13 Oct, 2018 3 commits
  2. 12 Oct, 2018 6 commits
    • Tom Lane's avatar
      Another round of portability hacking on ECPG regression tests. · 240cd6bc
      Tom Lane authored
      Removing the separate Windows expected-files in commit f1885386
      turns out to have been too optimistic: on most (but not all!) of our
      Windows buildfarm members, the tests still print floats with three
      exponent digits, because they're invoking the native printf()
      not snprintf.c.
      
      But rather than put back the extra expected-files, let's hack
      the three tests in question so that they adjust float formatting
      the same way snprintf.c does.
      
      Discussion: https://postgr.es/m/18890.1539374107@sss.pgh.pa.us
      240cd6bc
    • Tom Lane's avatar
      Simplify use of AllocSetContextCreate() wrapper macro. · 13cd7209
      Tom Lane authored
      We can allow this macro to accept either abbreviated or non-abbreviated
      allocation parameters by making use of __VA_ARGS__.  As noted by Andres
      Freund, it's unlikely that any compiler would have __builtin_constant_p
      but not __VA_ARGS__, so this gives up little or no error checking, and
      it avoids a minor but annoying API break for extensions.
      
      With this change, there is no reason for anybody to call
      AllocSetContextCreateExtended directly, so in HEAD I renamed it to
      AllocSetContextCreateInternal.  It's probably too late for an ABI
      break like that in 11, though.
      
      Discussion: https://postgr.es/m/20181012170355.bhxi273skjt6sag4@alap3.anarazel.de
      13cd7209
    • Tom Lane's avatar
      Remove dead reference to ecpg resultmap file. · 24a2c436
      Tom Lane authored
      I missed this in my prior commit because it doesn't matter in non-VPATH
      builds.
      
      Per buildfarm.
      24a2c436
    • Alvaro Herrera's avatar
      Correct attach/detach logic for FKs in partitions · c7d43c4d
      Alvaro Herrera authored
      There was no code to handle foreign key constraints on partitioned
      tables in the case of ALTER TABLE DETACH; and if you happened to ATTACH
      a partition that already had an equivalent constraint, that one was
      ignored and a new constraint was created.  Adding this to the fact that
      foreign key cloning reuses the constraint name on the partition instead
      of generating a new name (as it probably should, to cater to SQL
      standard rules about constraint naming within schemas), the result was a
      pretty poor user experience -- the most visible failure was that just
      detaching a partition and re-attaching it failed with an error such as
      
        ERROR:  duplicate key value violates unique constraint "pg_constraint_conrelid_contypid_conname_index"
        DETAIL:  Key (conrelid, contypid, conname)=(26702, 0, test_result_asset_id_fkey) already exists.
      
      because it would try to create an identically-named constraint in the
      partition.  To make matters worse, if you tried to drop the constraint
      in the now-independent partition, that would fail because the constraint
      was still seen as dependent on the constraint in its former parent
      partitioned table:
        ERROR:  cannot drop inherited constraint "test_result_asset_id_fkey" of relation "test_result_cbsystem_0001_0050_monthly_2018_09"
      
      This fix attacks the problem from two angles: first, when the partition
      is detached, the constraint is also marked as independent, so the drop
      now works.  Second, when the partition is re-attached, we scan existing
      constraints searching for one matching the FK in the parent, and if one
      exists, we link that one to the parent constraint.  So we don't end up
      with a duplicate -- and better yet, we don't need to scan the referenced
      table to verify that the constraint holds.
      
      To implement this I made a small change to previously planner-only
      struct ForeignKeyCacheInfo to contain the constraint OID; also relcache
      now maintains the list of FKs for partitioned tables too.
      
      Backpatch to 11.
      
      Reported-by: Michael Vitale (bug #15425)
      Discussion: https://postgr.es/m/15425-2dbc9d2aa999f816@postgresql.org
      c7d43c4d
    • Tom Lane's avatar
      Make float exponent output on Windows look the same as elsewhere. · f1885386
      Tom Lane authored
      Windows, alone among our supported platforms, likes to emit three-digit
      exponent fields even when two digits would do.  Adjust such results to
      look like the way everyone else does it.  Eliminate a bunch of variant
      expected-output files that were needed only because of this quirk.
      
      Discussion: https://postgr.es/m/2934.1539122454@sss.pgh.pa.us
      f1885386
    • Michael Paquier's avatar
      Add TAP tests for pg_verify_checksums · b34e84f1
      Michael Paquier authored
      All options available in the utility get coverage:
      - Tests with disabled page checksums.
      - Tests with enabled test checksums.
      - Emulation of corruption and broken checksums with a full scan and
      single relfilenode scan.
      
      This patch has been contributed mainly by Michael Banck and Magnus
      Hagander with things presented on various threads, and I have gathered
      all the contents into a single patch.
      
      Author: Michael Banck, Magnus Hagander, Michael Paquier
      Reviewed-by: Peter Eisentraut
      Discussion: https://postgr.es/m/20181005012645.GE1629@paquier.xyz
      b34e84f1
  3. 11 Oct, 2018 3 commits
  4. 10 Oct, 2018 4 commits
    • Andres Freund's avatar
      Fix logical decoding error when system table w/ toast is repeatedly rewritten. · e9edc1ba
      Andres Freund authored
      Repeatedly rewriting a mapped catalog table with VACUUM FULL or
      CLUSTER could cause logical decoding to fail with:
      ERROR, "could not map filenode \"%s\" to relation OID"
      
      To trigger the problem the rewritten catalog had to have live tuples
      with toasted columns.
      
      The problem was triggered as during catalog table rewrites the
      heap_insert() check that prevents logical decoding information to be
      emitted for system catalogs, failed to treat the new heap's toast table
      as a system catalog (because the new heap is not recognized as a
      catalog table via RelationIsLogicallyLogged()). The relmapper, in
      contrast to the normal catalog contents, does not contain historical
      information. After a single rewrite of a mapped table the new relation
      is known to the relmapper, but if the table is rewritten twice before
      logical decoding occurs, the relfilenode cannot be mapped to a
      relation anymore.  Which then leads us to error out.   This only
      happens for toast tables, because the main table contents aren't
      re-inserted with heap_insert().
      
      The fix is simple, add a new heap_insert() flag that prevents logical
      decoding information from being emitted, and accept during decoding
      that there might not be tuple data for toast tables.
      
      Unfortunately that does not fix pre-existing logical decoding
      errors. Doing so would require not throwing an error when a filenode
      cannot be mapped to a relation during decoding, and that seems too
      likely to hide bugs.  If it's crucial to fix decoding for an existing
      slot, temporarily changing the ERROR in ReorderBufferCommit() to a
      WARNING appears to be the best fix.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20180914021046.oi7dm4ra3ot2g2kt@alap3.anarazel.de
      Backpatch: 9.4-, where logical decoding was introduced
      e9edc1ba
    • Andres Freund's avatar
      Force synchronous commit to be enabled for all test_decoding tests. · ef493055
      Andres Freund authored
      Without that the tests fail when forced to be run against a cluster
      with synchronous_commit = off (as the WAL might not yet be flushed to
      disk by the point logical decoding gets called, and thus the expected
      output breaks). Most tests already do that, add it to a few newer tests.
      
      Author: Andres Freund
      ef493055
    • Peter Eisentraut's avatar
      Slightly correct context check for event triggers · f82d4d66
      Peter Eisentraut authored
      The previous check for a "complete query" omitted the new
      PROCESS_UTILITY_QUERY_NONATOMIC value.  This didn't actually make a
      difference in practice, because only CALL and SET from PL/pgSQL run in
      this state, but it's more correct to include it anyway.
      
      Discussion: https://www.postgresql.org/message-id/4566041d-2567-74d2-d135-19ff6a20fe51%402ndquadrant.com
      f82d4d66
    • Peter Eisentraut's avatar
      Test that event triggers work in functions and procedures · ae307861
      Peter Eisentraut authored
      This ensures that we have coverage of all the ProcessUtilityContext
      variants.
      ae307861
  5. 09 Oct, 2018 7 commits
    • Peter Eisentraut's avatar
      Turn transaction_isolation into GUC enum · f8c10f61
      Peter Eisentraut authored
      It was previously a string setting that was converted into an enum by
      custom code, but using the GUC enum facility seems much simpler and
      doesn't change any functionality, except that
      
          set transaction_isolation='default';
      
      no longer works, but that was never documented and doesn't work with
      any other transaction characteristics.  (Note that this is not the
      same as RESET or SET TO DEFAULT, which still work.)
      Reviewed-by: default avatarHeikki Linnakangas <hlinnaka@iki.fi>
      Discussion: https://www.postgresql.org/message-id/457db615-e84c-4838-310e-43841eb806e5@iki.fi
      f8c10f61
    • Tom Lane's avatar
      Make src/common/exec.c's error logging less ugly. · b6b297d2
      Tom Lane authored
      This code used elog where it really ought to use ereport, mainly so that
      it can report a SQLSTATE different from ERRCODE_INTERNAL_ERROR.  There
      were some other random deviations from typical error report practice too.
      
      In addition, we can make some cleanups that were impractical six months
      ago:
      
      * Use one variadic macro, instead of several with different numbers
      of arguments, reducing the temptation to force-fit messages into
      particular numbers of arguments;
      
      * Use %m, even in the frontend case, simplifying the code.
      
      Discussion: https://postgr.es/m/6025.1527351693@sss.pgh.pa.us
      b6b297d2
    • Greg Stark's avatar
      Add "B" suffix for bytes to docs · 36e9d413
      Greg Stark authored
      6e7baa32 and b06d8e58 added "B" as a valid suffix for
      GUC_UNIT_BYTES but neglected to add it to the docs.
      36e9d413
    • Tom Lane's avatar
      Remove no-longer-needed variant expected regression result files. · 6eb4378d
      Tom Lane authored
      numerology_1.out and float8-small-is-zero_1.out differ from their
      base files only in showing plain zero rather than minus zero for
      some results.  I believe that in the wake of commit 6eb3eb57,
      we will print minus zero as such on all IEEE-float platforms
      (and non-IEEE floats are going to cause many more regression diffs
      than this, anyway).  Hence we should be able to remove these and
      eliminate a bit of maintenance pain.  Let's see if the buildfarm
      agrees.
      
      Discussion: https://postgr.es/m/29037.1539021687@sss.pgh.pa.us
      6eb4378d
    • Tom Lane's avatar
      Select appropriate PG_PRINTF_ATTRIBUTE for recent NetBSD. · aed9fa0b
      Tom Lane authored
      NetBSD-current generates a large number of warnings about "%m" not
      being appropriate to use with *printf functions.  While that's true
      for their native printf, it's surely not true for snprintf.c, so I
      think they have misunderstood gcc's definition of the "gnu_printf"
      archetype.  Nonetheless, choosing "__syslog__" instead silences the
      warnings; so teach configure about that.
      
      Since this is only a cosmetic warning issue (and anyway it depends
      on previous hacking to be self-consistent), no back-patch.
      
      Discussion: https://postgr.es/m/16785.1539046036@sss.pgh.pa.us
      aed9fa0b
    • Michael Paquier's avatar
      Add pg_ls_archive_statusdir function · c4810162
      Michael Paquier authored
      This function lists the contents of the WAL archive status directory,
      and is intended to be used by monitoring tools.  Unlike pg_ls_dir(),
      access to it can be granted to non-superusers so that those monitoring
      tools can observe the principle of least privilege.  Access is also
      given by default to members of pg_monitor.
      
      Author:  Christoph Moench-Tegeder
      Reviewed-by: Aya Iwata
      Discussion: https://postgr.es/m/20180930205920.GA64534@elch.exwg.net
      c4810162
    • Tom Lane's avatar
      Convert some long lists in configure.in to one-line-per-entry style. · bfa6c5a0
      Tom Lane authored
      The idea here is that patches that add items to these lists will often
      be easier to rebase over other additions to the same lists, because
      they won't be trying to touch the very same line of configure.in.
      
      There will still be merge conflicts in the configure script, but that
      can be fixed just by re-running autoconf (or by leaving configure out
      of the submitted patch to begin with ...)
      
      Implementation note: use of m4_normalize() is necessary to get rid of
      the newlines, else incorrect shell syntax will be emitted.  But with
      that hack, the generated configure script is identical to what it
      was before.
      
      Discussion: https://postgr.es/m/19344.1539050134@sss.pgh.pa.us
      bfa6c5a0
  6. 08 Oct, 2018 9 commits
    • Thomas Munro's avatar
      Relax transactional restrictions on ALTER TYPE ... ADD VALUE (redux). · 212fab99
      Thomas Munro authored
      Originally committed as 15bc038f (plus some follow-ups), this was
      reverted in 28e07270 due to a problem discovered in parallel
      workers.  This new version corrects that problem by sending the
      list of uncommitted enum values to parallel workers.
      
      Here follows the original commit message describing the change:
      
      To prevent possibly breaking indexes on enum columns, we must keep
      uncommitted enum values from getting stored in tables, unless we
      can be sure that any such column is new in the current transaction.
      
      Formerly, we enforced this by disallowing ALTER TYPE ... ADD VALUE
      from being executed at all in a transaction block, unless the target
      enum type had been created in the current transaction.  This patch
      removes that restriction, and instead insists that an uncommitted enum
      value can't be referenced unless it belongs to an enum type created
      in the same transaction as the value.  Per discussion, this should be
      a bit less onerous.  It does require each function that could possibly
      return a new enum value to SQL operations to check this restriction,
      but there aren't so many of those that this seems unmaintainable.
      
      Author: Andrew Dunstan and Tom Lane, with parallel query fix by Thomas Munro
      Reviewed-by: Tom Lane
      Discussion: https://postgr.es/m/CAEepm%3D0Ei7g6PaNTbcmAh9tCRahQrk%3Dr5ZWLD-jr7hXweYX3yg%40mail.gmail.com
      Discussion: https://postgr.es/m/4075.1459088427%40sss.pgh.pa.us
      212fab99
    • Tom Lane's avatar
      Fix omissions in snprintf.c's coverage of standard *printf functions. · 7767aadd
      Tom Lane authored
      A warning on a NetBSD box revealed to me that pg_waldump/compat.c
      is using vprintf(), which snprintf.c did not provide coverage for.
      This is not good if we want to have uniform *printf behavior, and
      it's pretty silly to omit when it's a one-line function.
      
      I also noted that snprintf.c has pg_vsprintf() but for some reason
      it was not exposed to the outside world, creating another way in
      which code might accidentally invoke the platform *printf family.
      
      Let's just make sure that we replace all eight of the POSIX-standard
      printf family.
      
      Also, upgrade plperl.h and plpython.h to make sure that they do
      their undefine/redefine rain dance for all eight, not some random
      maybe-sufficient subset thereof.
      7767aadd
    • Tom Lane's avatar
      Advance transaction timestamp for intra-procedure transactions. · 82ff0cc9
      Tom Lane authored
      Per discussion, this behavior seems less astonishing than not doing so.
      
      Peter Eisentraut and Tom Lane
      
      Discussion: https://postgr.es/m/20180920234040.GC29981@momjian.us
      82ff0cc9
    • Tom Lane's avatar
      Improve snprintf.c's handling of NaN, Infinity, and minus zero. · 6eb3eb57
      Tom Lane authored
      Up to now, float4out/float8out handled NaN and Infinity cases explicitly,
      and invoked psprintf only for ordinary float values.  This was done because
      platform implementations of snprintf produce varying representations of
      these special cases.  But now that we use snprintf.c always, it's better
      to give it the responsibility to produce a uniform representation of
      these cases, so that we have uniformity across the board not only in
      float4out/float8out.  Hence, move that work into fmtfloat().
      
      Also, teach fmtfloat() to recognize IEEE minus zero and handle it
      correctly.  The previous coding worked only accidentally, and would
      fail for e.g. "%+f" format (it'd print "+-0.00000").  Now that we're
      using snprintf.c everywhere, it's not acceptable for it to do weird
      things in corner cases.  (This incidentally avoids a portability
      problem we've seen on some really ancient platforms, that native
      sprintf does the wrong thing with minus zero.)
      
      Also, introduce a new entry point in snprintf.c to allow float[48]out
      to bypass the work of interpreting a well-known format spec, as well
      as bypassing the overhead of the psprintf layer.  I modeled this API
      loosely on strfromd().  In my testing, this brings float[48]out back
      to approximately the same speed they had when using native snprintf,
      fixing one of the main performance issues caused by using snprintf.c.
      
      (There is some talk of more aggressive work to improve the speed of
      floating-point output conversion, but these changes seem to provide
      a better starting point for such work anyway.)
      
      Getting rid of the previous ad-hoc hack for Infinity/NaN in fmtfloat()
      allows removing <ctype.h> from snprintf.c's #includes.  I also removed
      a few other #includes that I think are historical, though the buildfarm
      may expose that as wrong.
      
      Discussion: https://postgr.es/m/13178.1538794717@sss.pgh.pa.us
      6eb3eb57
    • Tom Lane's avatar
      Avoid O(N^2) cost in ExecFindRowMark(). · f9eb7c14
      Tom Lane authored
      If there are many ExecRowMark structs, we spent O(N^2) time in
      ExecFindRowMark during executor startup.  Once upon a time this was
      not of great concern, but the addition of native partitioning has
      squeezed out enough other costs that this can become the dominant
      overhead in some use-cases for tables with many partitions.
      
      To fix, simply replace that List data structure with an array.
      
      This adds a little bit of cost to execCurrentOf(), but not much,
      and anyway that code path is neither of large importance nor very
      efficient now.  If we ever decide it is a bottleneck, constructing a
      hash table for lookup-by-tableoid would likely be the thing to do.
      
      Per complaint from Amit Langote, though this is different from
      his fix proposal.
      
      Discussion: https://postgr.es/m/468c85d9-540e-66a2-1dde-fec2b741e688@lab.ntt.co.jp
      f9eb7c14
    • Alvaro Herrera's avatar
      Silence compiler warning in Assert() · eee01d60
      Alvaro Herrera authored
      gcc 6.3 does not whine about this mistake I made in 39808e88 but
      evidently lots of other compilers do, according to Michael Paquier,
      Peter Eisentraut, Arthur Zakirov, Tomas Vondra.
      
      Discussion: too many to list
      eee01d60
    • Peter Eisentraut's avatar
      Track procedure calls in pg_stat_user_functions · 634b4b79
      Peter Eisentraut authored
      This was forgotten when procedures were implemented.
      Reported-by: default avatarLukas Fittl <lukas@fittl.com>
      634b4b79
    • Michael Paquier's avatar
      Improve two error messages related to foreign keys on partitioned tables · 9c2a970d
      Michael Paquier authored
      Error messages for creating a foreign key on a partitioned table using
      ONLY or NOT VALID were wrong in mentioning the objects they worked on.
      This commit adds on the way some regression tests missing for those
      cases.
      
      Author: Laurenz Albe
      Reviewed-by: Michael Paquier
      Discussion: https://postgr.es/m/c11c05810a9ed65e9b2c817a9ef442275a32fe80.camel@cybertec.at
      9c2a970d
    • Magnus Hagander's avatar
      Fix speling error · a9da329b
      Magnus Hagander authored
      Reported by Alexander Lakhin in bug #15423
      a9da329b
  7. 07 Oct, 2018 2 commits
    • Tom Lane's avatar
      Remove some unnecessary fields from Plan trees. · 52ed730d
      Tom Lane authored
      In the wake of commit f2343653, we no longer need some fields that
      were used before to control executor lock acquisitions:
      
      * PlannedStmt.nonleafResultRelations can go away entirely.
      
      * partitioned_rels can go away from Append, MergeAppend, and ModifyTable.
      However, ModifyTable still needs to know the RT index of the partition
      root table if any, which was formerly kept in the first entry of that
      list.  Add a new field "rootRelation" to remember that.  rootRelation is
      partly redundant with nominalRelation, in that if it's set it will have
      the same value as nominalRelation.  However, the latter field has a
      different purpose so it seems best to keep them distinct.
      
      Amit Langote, reviewed by David Rowley and Jesper Pedersen,
      and whacked around a bit more by me
      
      Discussion: https://postgr.es/m/468c85d9-540e-66a2-1dde-fec2b741e688@lab.ntt.co.jp
      52ed730d
    • Alvaro Herrera's avatar
      Fix catalog insertion order for ATTACH PARTITION · 39808e88
      Alvaro Herrera authored
      Commit 2fbdf1b3 changed the order in which we inserted catalog rows
      when creating partitions, so that we could remove an unsightly hack
      required for untimely relcache invalidations.  However, that commit only
      changed the ordering for CREATE TABLE PARTITION OF, and left ALTER TABLE
      ATTACH PARTITION unchanged, so the latter can be affected when catalog
      invalidations occur, for instance when the partition key involves an SQL
      function.
      
      Reported-by: Rajkumar Raghuwanshi
      Author: Amit Langote
      Reviewed-by: Michaël Paquier
      Discussion: https://postgr.es/m/CAKcux6=nTz9KSfTr_6Z2mpzLJ_09JN-rK6=dWic6gGyTSWueyQ@mail.gmail.com
      39808e88
  8. 06 Oct, 2018 6 commits
    • Alvaro Herrera's avatar
      Fix event triggers for partitioned tables · ad08006b
      Alvaro Herrera authored
      Index DDL cascading on partitioned tables introduced a way for ALTER
      TABLE to be called reentrantly.  This caused an an important deficiency
      in event trigger support to be exposed: on exiting the reentrant call,
      the alter table state object was clobbered, causing a crash when the
      outer alter table tries to finalize its processing.  Fix the crash by
      creating a stack of event trigger state objects.  There are still ways
      to cause things to misbehave (and probably other crashers) with more
      elaborate tricks, but at least it now doesn't crash in the obvious
      scenario.
      
      Backpatch to 9.5, where DDL deparsing of event triggers was introduced.
      
      Reported-by: Marco Slot
      Authors: Michaël Paquier, Álvaro Herrera
      Discussion: https://postgr.es/m/CANNhMLCpi+HQ7M36uPfGbJZEQLyTy7XvX=5EFkpR-b1bo0uJew@mail.gmail.com
      ad08006b
    • Tom Lane's avatar
      Restore sane locking behavior during parallel query. · 29ef2b31
      Tom Lane authored
      Commit 9a3cebea changed things so that parallel workers didn't obtain
      any lock of their own on tables they access.  That was clearly a bad
      idea, but I'd mistakenly supposed that it was the intended end result
      of the series of patches for simplifying the executor's lock management.
      Undo that change in relation_open(), and adjust ExecOpenScanRelation()
      so that it gets the correct lock if inside a parallel worker.
      
      In passing, clean up some more obsolete comments about when locks
      are acquired.
      
      Discussion: https://postgr.es/m/468c85d9-540e-66a2-1dde-fec2b741e688@lab.ntt.co.jp
      29ef2b31
    • Tom Lane's avatar
      Remove more redundant relation locking during executor startup. · f2343653
      Tom Lane authored
      We already have appropriate locks on every relation listed in the
      query's rangetable before we reach the executor.  Take the next step
      in exploiting that knowledge by removing code that worries about
      taking locks on non-leaf result relations in a partitioned table.
      
      In particular, get rid of ExecLockNonLeafAppendTables and a stanza in
      InitPlan that asserts we already have locks on certain such tables.
      
      In passing, clean up some now-obsolete comments in InitPlan.
      
      Amit Langote, reviewed by David Rowley and Jesper Pedersen,
      and whacked around a bit more by me
      
      Discussion: https://postgr.es/m/468c85d9-540e-66a2-1dde-fec2b741e688@lab.ntt.co.jp
      f2343653
    • Tom Lane's avatar
      Don't use is_infinite() where isinf() will do. · 0209f028
      Tom Lane authored
      Places that aren't testing for sign should not use the more expensive
      function; it's just wasteful, not to mention being a cognitive load
      for readers who may know what isinf() is but not is_infinite().
      
      As things stand, we actually don't need is_infinite() anyplace except
      float4out/float8out, which means it could potentially go away altogether
      after the changes I proposed in <13178.1538794717@sss.pgh.pa.us>.
      0209f028
    • Tom Lane's avatar
      Propagate xactStartTimestamp and stmtStartTimestamp to parallel workers. · 07ee62ce
      Tom Lane authored
      Previously, a worker process would establish values for these based on
      its own start time.  In v10 and up, this can trivially be shown to cause
      misbehavior of transaction_timestamp(), timestamp_in(), and related
      functions which are (perhaps unwisely?) marked parallel-safe.  It seems
      likely that other behaviors might diverge from what happens in the parent
      as well.
      
      It's not as trivial to demonstrate problems in 9.6 or 9.5, but I'm sure
      it's still possible, so back-patch to all branches containing parallel
      worker infrastructure.
      
      In HEAD only, mark now() and statement_timestamp() as parallel-safe
      (other affected functions already were).  While in theory we could
      still squeeze that change into v11, it doesn't seem important enough
      to force a last-minute catversion bump.
      
      Konstantin Knizhnik, whacked around a bit by me
      
      Discussion: https://postgr.es/m/6406dbd2-5d37-4cb6-6eb2-9c44172c7e7c@postgrespro.ru
      07ee62ce
    • Dean Rasheed's avatar
      Improve the accuracy of floating point statistical aggregates. · e954a727
      Dean Rasheed authored
      When computing statistical aggregates like variance, the common
      schoolbook algorithm which computes the sum of the squares of the
      values and subtracts the square of the mean can lead to a large loss
      of precision when using floating point arithmetic, because the
      difference between the two terms is often very small relative to the
      terms themselves.
      
      To avoid this, re-work these aggregates to use the Youngs-Cramer
      algorithm, which is a proven, numerically stable algorithm that
      directly aggregates the sum of the squares of the differences of the
      values from the mean in a single pass over the data.
      
      While at it, improve the test coverage to test the aggregate combine
      functions used during parallel aggregation.
      
      Per report and suggested algorithm from Erich Schubert.
      
      Patch by me, reviewed by Madeleine Thompson.
      
      Discussion: https://postgr.es/m/153313051300.1397.9594490737341194671@wrigleys.postgresql.org
      e954a727