1. 19 Jun, 2020 1 commit
  2. 18 Jun, 2020 7 commits
    • Andres Freund's avatar
      Fix deadlock danger when atomic ops are done under spinlock. · cf1234a1
      Andres Freund authored
      This was a danger only for --disable-spinlocks in combination with
      atomic operations unsupported by the current platform.
      
      While atomics.c was careful to signal that a separate semaphore ought
      to be used when spinlock emulation is active, spin.c didn't actually
      implement that mechanism. That's my (Andres') fault, it seems to have
      gotten lost during the development of the atomic operations support.
      
      Fix that issue and add test for nesting atomic operations inside a
      spinlock.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20200605023302.g6v3ydozy5txifji@alap3.anarazel.de
      Backpatch: 9.5-
      cf1234a1
    • Andres Freund's avatar
      Add basic spinlock tests to regression tests. · 3b37a6de
      Andres Freund authored
      As s_lock_test, the already existing test for spinlocks, isn't run in
      an automated fashion (and doesn't test a normal backend environment),
      adding tests that are run as part of a normal regression run is a good
      idea. Particularly in light of several recent and upcoming spinlock
      related fixes.
      
      Currently the new tests are run as part of the pre-existing
      test_atomic_ops() test. That perhaps can be quibbled about, but for
      now seems ok.
      
      The only operations that s_lock_test tests but the new tests don't are
      the detection of a stuck spinlock and S_LOCK_FREE (which is otherwise
      unused, not implemented on all platforms, and will be removed).
      
      This currently contains a test for more than INT_MAX spinlocks (only
      run with --disable-spinlocks), to ensure the recent commit fixing a
      bug with more than INT_MAX spinlock initializations is correct. That
      test is somewhat slow, so we might want to disable it after a few
      days.
      
      It might be worth retiring s_lock_test after this. The added coverage
      of a stuck spinlock probably isn't worth the added complexity?
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20200606023103.avzrctgv7476xj7i@alap3.anarazel.de
      3b37a6de
    • Tom Lane's avatar
      Doc: document POSIX-style time zone specifications in full. · a3235a53
      Tom Lane authored
      We'd glossed over most of this complexity for years, but it's hard
      to avoid writing it all down now, so that we can explain what happens
      when there's no "posixrules" file in the IANA time zone database.
      That was at best a tiny minority situation till now, but it's likely
      to become quite common in the future, so we'd better explain it.
      
      Nonetheless, we don't really encourage people to use POSIX zone specs;
      picking a named zone is almost always what you really want, unless
      perhaps you're stuck with an out-of-date zone database.  Therefore,
      let's shove all this detail into an appendix.
      
      Patch by me; thanks to Robert Haas for help with some awkward wording.
      
      Discussion: https://postgr.es/m/1390.1562258309@sss.pgh.pa.us
      a3235a53
    • Michael Paquier's avatar
      Fix oldest xmin and LSN computation across repslots after advancing · b48df818
      Michael Paquier authored
      Advancing a replication slot did not recompute the oldest xmin and LSN
      values across replication slots, preventing resource removal like
      segments not recycled at checkpoint time.  The original commit that
      introduced the slot advancing in 9c7d06d6 never did the update of those
      oldest values, and b0afdcad removed this code.
      
      This commit adds a TAP test to check segment recycling with advancing
      for physical slots, enforcing an extra segment switch before advancing
      to check if the segment gets correctly recycled after a checkpoint.
      
      Reported-by: Andres Freund
      Reviewed-by: Alexey Kondratov, Kyptaro Horiguchi
      Discussion: https://postgr.es/m/20200609171904.kpltxxvjzislidks@alap3.anarazel.de
      Backpatch-through: 11
      b48df818
    • Peter Eisentraut's avatar
      Disallow factorial of negative numbers · 0a40563e
      Peter Eisentraut authored
      The previous implementation returned 1 for all negative numbers, which
      is not sensible under any definition.
      
      Discussion: https://www.postgresql.org/message-id/flat/6ce1df0e-86a3-e544-743a-f357ff663f68%402ndquadrant.com
      0a40563e
    • Peter Eisentraut's avatar
      Expand tests for factorial · 9d402c73
      Peter Eisentraut authored
      Move from int4 to numeric test.  (They were originally int4 functions,
      but were reimplemented for numeric in
      04a4821a.)  Add some tests for edge
      cases.
      
      Discussion: https://www.postgresql.org/message-id/flat/6ce1df0e-86a3-e544-743a-f357ff663f68%402ndquadrant.com
      9d402c73
    • Michael Paquier's avatar
      Remove reset of testtablespace from pg_regress on Windows · 2b2a070d
      Michael Paquier authored
      testtablespace is an extra path used as tablespace location in the main
      regression test suite, computed from --outputdir as defined by the
      caller of pg_regress (current directory if undefined).
      
      This special handling was introduced as of f10589e5 to be specific to
      MSVC, as we let pg_regress' Makefile handle this cleanup in other
      environments.  This moves the cleanup to the MSVC script running
      regression tests instead where needed: check, installcheck and
      upgradecheck.  I have also checked this patch on MSVC with repeated runs
      of each target.
      
      Author: Kyotaro Horiguchi, Michael Paquier
      Discussion: https://postgr.es/m/20200219.142519.437573253063431435.horikyota.ntt@gmail.com
      2b2a070d
  3. 17 Jun, 2020 8 commits
  4. 16 Jun, 2020 9 commits
  5. 15 Jun, 2020 8 commits
  6. 14 Jun, 2020 3 commits
    • Tom Lane's avatar
      Fix behavior of exp() and power() for infinity inputs. · decbe2bf
      Tom Lane authored
      Previously, these functions tended to throw underflow errors for
      negative-infinity exponents.  The correct thing per POSIX is to
      return 0, so let's do that instead.  (Note that the SQL standard
      is silent on such issues, as it lacks the concepts of either Inf
      or NaN; so our practice is to follow POSIX whenever a corresponding
      C-library function exists.)
      
      Also, add a bunch of test cases verifying that exp() and power()
      actually do follow POSIX for Inf and NaN inputs.  While this patch
      should guarantee that exp() passes the tests, power() will not unless
      the platform's pow(3) is fully POSIX-compliant.  I already know that
      gaur fails some of the tests, and I am suspicious that the Windows
      animals will too; the extent of compliance of other old platforms
      remains to be seen.  We might choose to drop failing test cases, or
      to work harder at overriding pow(3) for these cases, but first let's
      see just how good or bad the situation is.
      
      Discussion: https://postgr.es/m/582552.1591917752@sss.pgh.pa.us
      decbe2bf
    • Peter Eisentraut's avatar
      Add test coverage for EXTRACT() · 378badc8
      Peter Eisentraut authored
      The variants for time and timetz had zero test coverage, the variant
      for interval only very little.  This adds practically full coverage
      for those functions.
      Reviewed-by: default avatarVik Fearing <vik@postgresfriends.org>
      Reviewed-by: default avatarTom Lane <tgl@sss.pgh.pa.us>
      Discussion: https://www.postgresql.org/message-id/flat/c3306ac7-fcae-a1b8-1e30-6a379d605bcb%402ndquadrant.com
      378badc8
    • Michael Paquier's avatar
      Replace superuser check by ACLs for replication origin functions · cc072641
      Michael Paquier authored
      This patch removes the hardcoded check for superuser privileges when
      executing replication origin functions.  Instead, execution is revoked
      from public, meaning that those functions can be executed by a superuser
      and that access to them can be granted.
      
      Author: Martín Marqués
      Reviewed-by: Kyotaro Horiguchi, Michael Paquier, Masahiko Sawada
      Discussion: https:/postgr.es/m/CAPdiE1xJMZOKQL3dgHMUrPqysZkgwzSMXETfKkHYnBAB7-0VRQ@mail.gmail.com
      cc072641
  7. 13 Jun, 2020 4 commits
    • Tom Lane's avatar
      Sync behavior of var_samp and stddev_samp for single NaN inputs. · 23cbeda5
      Tom Lane authored
      var_samp(numeric) and stddev_samp(numeric) disagreed with their float
      cousins about what to do for a single non-null input value that is NaN.
      The float versions return NULL on the grounds that the calculation is
      only defined for more than one non-null input, which seems like the
      right answer.  But the numeric versions returned NaN, as a result of
      dealing with edge cases in the wrong order.  Fix that.  The patch
      also gets rid of an insignificant memory leak in such cases.
      
      This inconsistency is of long standing, but on the whole it seems best
      not to back-patch the change into stable branches; nobody's complained
      and it's such an obscure point that nobody's likely to complain.
      (Note that v13 and v12 now contain test cases that will notice if we
      accidentally back-patch this behavior change in future.)
      
      Report and patch by me; thanks to Dean Rasheed for review.
      
      Discussion: https://postgr.es/m/353062.1591898766@sss.pgh.pa.us
      23cbeda5
    • Tom Lane's avatar
      Fix behavior of float aggregates for single Inf or NaN inputs. · 03109a53
      Tom Lane authored
      When there is just one non-null input value, and it is infinity or NaN,
      aggregates such as stddev_pop and covar_pop should produce a NaN
      result, because the calculation is not well-defined.  They used to do
      so, but since we adopted Youngs-Cramer aggregation in commit e954a727,
      they produced zero instead.  That's an oversight, so fix it.  Add tests
      exercising these edge cases.
      
      Affected aggregates are
      
       var_pop(double precision)
       stddev_pop(double precision)
       var_pop(real)
       stddev_pop(real)
       regr_sxx(double precision,double precision)
       regr_syy(double precision,double precision)
       regr_sxy(double precision,double precision)
       regr_r2(double precision,double precision)
       regr_slope(double precision,double precision)
       regr_intercept(double precision,double precision)
       covar_pop(double precision,double precision)
       corr(double precision,double precision)
      
      Back-patch to v12 where the behavior change was accidentally introduced.
      
      Report and patch by me; thanks to Dean Rasheed for review.
      
      Discussion: https://postgr.es/m/353062.1591898766@sss.pgh.pa.us
      03109a53
    • Peter Geoghegan's avatar
      Silence _bt_check_unique compiler warning. · d64f1cdf
      Peter Geoghegan authored
      Reported-By: Tom Lane
      Discussion: https://postgr.es/m/841649.1592065060@sss.pgh.pa.us
      d64f1cdf
    • Peter Eisentraut's avatar
      Refactor AlterExtensionContentsStmt grammar · 8f5b5967
      Peter Eisentraut authored
      Make use of the general object support already used by COMMENT, DROP,
      and SECURITY LABEL.
      
      Discussion: https://www.postgresql.org/message-id/flat/163c00a5-f634-ca52-fc7c-0e53deda8735%402ndquadrant.com
      8f5b5967