1. 05 Jan, 2017 5 commits
    • Robert Haas's avatar
      Fix possible leak of semaphore count. · e5b7451e
      Robert Haas authored
      Commit 4aec4989 reorganized the order
      of operations here so that we no longer increment the number of "extra
      waits" before locking the semaphore, but it did not change the
      starting value of extraWaits from 0 to -1 to compensate.  In the worst
      case, this could leak a semaphore count, but that seems to be unlikely
      in practice.
      
      Discussion: http://postgr.es/m/CAA4eK1JyVqXiMba+-a589Rk0pyHsyKkGxeumVKjU6Y74hdrVLQ@mail.gmail.com
      
      Amit Kapila, per an off-list report by Dilip Kumar.  Reviewed by me.
      e5b7451e
    • Peter Eisentraut's avatar
      Use 'use strict' in all Perl programs · 933b4664
      Peter Eisentraut authored
      933b4664
    • Robert Haas's avatar
      Fix possible crash reading pg_stat_activity. · 175ff659
      Robert Haas authored
      With the old code, a backend that read pg_stat_activity without ever
      having executed a parallel query might see a backend in the midst of
      executing one waiting on a DSA LWLock, resulting in a crash.  The
      solution is for backends to register the tranche at startup time, not
      the first time a parallel query is executed.
      
      Report by Andreas Seltenreich.  Patch by me, reviewed by Thomas Munro.
      175ff659
    • Tom Lane's avatar
      Fix handling of empty arrays in array_fill(). · 82f8107b
      Tom Lane authored
      array_fill(..., array[0]) produced an empty array, which is probably
      what users expect, but it was a one-dimensional zero-length array
      which is not our standard representation of empty arrays.  Also, for
      no very good reason, it rejected empty input arrays; that case should
      be allowed and produce an empty output array.
      
      In passing, remove the restriction that the input array(s) have lower
      bound 1.  That seems rather pointless, and it would have needed extra
      complexity to make the check deal with empty input arrays.
      
      Per bug #14487 from Andrew Gierth.  It's been broken all along, so
      back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/20170105152156.10135.64195@wrigleys.postgresql.org
      82f8107b
    • Simon Riggs's avatar
      Fix format for TAP test docs · 2e44f379
      Simon Riggs authored
      Small number of fixes to perl docs for TAP tests.
      Plus two comments that use "xlog" rather than WAL
      
      Michael Paquier
      2e44f379
  2. 04 Jan, 2017 16 commits
    • Tom Lane's avatar
      Handle OID column inheritance correctly in ALTER TABLE ... INHERIT. · d86f4000
      Tom Lane authored
      Inheritance operations must treat the OID column, if any, much like
      regular user columns.  But MergeAttributesIntoExisting() neglected to
      do that, leading to weird results after a table with OIDs is associated
      to a parent with OIDs via ALTER TABLE ... INHERIT.
      
      Report and patch by Amit Langote, reviewed by Ashutosh Bapat, some
      adjustments by me.  It's been broken all along, so back-patch to
      all supported branches.
      
      Discussion: https://postgr.es/m/cb13cfe7-a48c-5720-c383-bb843ab28298@lab.ntt.co.jp
      d86f4000
    • Robert Haas's avatar
      Improve documentation of timestamp internal representation. · 44f7afba
      Robert Haas authored
      Be more clear that we represent timestamps in microseconds when
      integer timestamps are used, and in fractional seconds when
      floating-point timestamps are used.
      
      Discussion: http://postgr.es/m/20161212135045.GB15488@e733.localdomain
      
      Report by Alexander Alekseev.  Wording by me with a suggestion
      from Tom Lane.
      44f7afba
    • Robert Haas's avatar
      Assorted code improvements for table partitioning. · 3633b3f6
      Robert Haas authored
      Michael Paquier, per Coverity.
      3633b3f6
    • Robert Haas's avatar
      Remove unnecessary arguments from partitioning functions. · 18fc5192
      Robert Haas authored
      RelationGetPartitionQual() and generate_partition_qual() are always
      called with recurse = true, so we don't need an argument for that.
      
      Extracted by me from a larger patch by Amit Langote.
      18fc5192
    • Robert Haas's avatar
      Fix reporting of constraint violations for table partitioning. · f1b4c771
      Robert Haas authored
      After a tuple is routed to a partition, it has been converted from the
      root table's row type to the partition's row type.  ExecConstraints
      needs to report the failure using the original tuple and the parent's
      tuple descriptor rather than the ones for the selected partition.
      
      Amit Langote
      f1b4c771
    • Simon Riggs's avatar
      Add new TAP tests for pg_recvlogical · 3e353a7b
      Simon Riggs authored
      Craig Ringer, reviewed by Euler Taveira and Naoki Okano
      3e353a7b
    • Simon Riggs's avatar
      Add pg_recvlogical —-endpos=LSN · 7c030783
      Simon Riggs authored
      Allow pg_recvlogical to specify an ending LSN, complementing
      the existing -—startpos=LSN option.
      
      Craig Ringer, reviewed by Euler Taveira and Naoki Okano
      7c030783
    • Tom Lane's avatar
      Prefer int-wide pg_atomic_flag over char-wide when using gcc intrinsics. · 698127a4
      Tom Lane authored
      configure can only probe the existence of gcc intrinsics, not how well
      they're implemented, and unfortunately the answer is sometimes "badly".
      In particular we've found that multiple compilers fail to implement
      char-width __sync_lock_test_and_set() correctly on PPC; and even a correct
      implementation would necessarily be pretty inefficient, since that hardware
      has only a word-wide primitive to work with.
      
      Given the knowledge we've accumulated in s_lock.h, it appears that it's
      best to rely on int-width TAS operations on most non-Intel architectures.
      Hence, pick int not char when both are nominally available to us in
      generic-gcc.h (note that that code is not used for x86[_64]).
      
      Back-patch to fix regression test failures on FreeBSD/PPC.  Ordinarily
      back-patching a change like this would be verboten because of ABI breakage.
      But since pg_atomic_flag is not yet used in any Postgres data structure,
      there's no ABI to break.  It seems safer to back-patch to avoid possible
      gotchas, if someday we do back-patch something that uses pg_atomic_flag.
      
      Discussion: https://postgr.es/m/25414.1483076673@sss.pgh.pa.us
      698127a4
    • Robert Haas's avatar
      Move partition_tuple_slot out of EState. · 345b2dcf
      Robert Haas authored
      Commit 2ac3ef7a added a TupleTapleSlot
      for partition tuple slot to EState (es_partition_tuple_slot) but it's
      more logical to have it as part of ModifyTableState
      (mt_partition_tuple_slot) and CopyState (partition_tuple_slot).
      
      Discussion: http://postgr.es/m/1bd459d9-4c0c-197a-346e-e5e59e217d97@lab.ntt.co.jp
      
      Amit Langote, per a gripe from me
      345b2dcf
    • Tom Lane's avatar
      Re-allow SSL passphrase prompt at server start, but not thereafter. · 6667d9a6
      Tom Lane authored
      Leave OpenSSL's default passphrase collection callback in place during
      the first call of secure_initialize() in server startup.  Although that
      doesn't work terribly well in daemon contexts, some people feel we should
      not break it for anyone who was successfully using it before.  We still
      block passphrase demands during SIGHUP, meaning that you can't adjust SSL
      configuration on-the-fly if you used a passphrase, but this is no worse
      than what it was before commit de41869b.  And we block passphrase demands
      during EXEC_BACKEND reloads; that behavior wasn't useful either, but at
      least now it's documented.
      
      Tweak some related log messages for more readability, and avoid issuing
      essentially duplicate messages about reload failure caused by a passphrase.
      
      Discussion: https://postgr.es/m/29982.1483412575@sss.pgh.pa.us
      6667d9a6
    • Robert Haas's avatar
      Update obsolete comments in lwlock.h. · 0fad355b
      Robert Haas authored
      The typical size of an LWLock is now 16 bytes even on 64-bit platforms,
      and the size of slock_t is now irrelevant.  But pg_atomic_uint32 can
      (perhaps surprisingly) still be larger than 4 bytes, so there's still
      some marginal point to allowing LWLOCK_MINIMAL_SIZE == 64.
      
      Commit 008608b9 made the changes
      that led to the need for these updates.
      0fad355b
    • Simon Riggs's avatar
      Add 18 new recovery TAP tests · 0813216c
      Simon Riggs authored
      Add new tests for physical repl slots and hot standby feedback.
      
      Craig Ringer, reviewed by Aleksander Alekseev and Simon Riggs
      0813216c
    • Simon Riggs's avatar
      Allow PostgresNode.pm tests to wait for catchup · fb093e4c
      Simon Riggs authored
      Add methods to the core test framework PostgresNode.pm to allow us to
      test that standby nodes have caught up with the master, as well as
      basic LSN handling.  Used in tests recovery/t/001_stream_rep.pl and
      recovery/t/004_timeline_switch.pl
      
      Craig Ringer, reviewed by Aleksander Alekseev and Simon Riggs
      fb093e4c
    • Peter Eisentraut's avatar
      Better fix for sequence access in hot standby test · 579f7009
      Peter Eisentraut authored
      The purpose of the test was to check access to the sequence relation on
      a hot standby, so change the test to read a different column from the
      sequence, instead of just reading the catalog.
      
      From: Andreas Karlsson <andreas@proxel.se>
      579f7009
    • Magnus Hagander's avatar
      Attempt to handle pending-delete files on Windows · 9951741b
      Magnus Hagander authored
      These files are deleted but not yet gone from the filesystem. Operations
      on them will return ERROR_DELETE_PENDING.
      
      With this we start treating that as ENOENT, meaning files does not
      exist (which is the state it will soon reach). This should be safe in
      every case except when we try to recreate a file with exactly the same
      name. This is an operation that PostgreSQL does very seldom, so
      hopefully that won't happen much -- and even if it does, this treatment
      should be no worse than treating it as an unhandled error.
      
      We've been un able to reproduce the bug reliably, so pushing this to
      master to get buildfarm coverage and other testing. Once it's proven to
      be stable, it should be considered for backpatching.
      
      Discussion: https://postgr.es/m/20160712083220.1426.58667%40wrigleys.postgresql.org
      
      Patch by me and Michael Paquier
      9951741b
    • Magnus Hagander's avatar
      Make wal streaming the default mode for pg_basebackup · 9a4d5107
      Magnus Hagander authored
      Since streaming is now supported for all output formats, make this the
      default as this is what most people want.
      
      To get the old behavior, the parameter -X none can be specified to turn
      it off.
      
      This also removes the parameter -x for fetch, now requiring -X fetch to
      be specified to use that.
      
      Reviewed by Vladimir Rusinov, Michael Paquier and Simon Riggs
      9a4d5107
  3. 03 Jan, 2017 7 commits
    • Bruce Momjian's avatar
      Update copyright via script for 2017 · 1d257792
      Bruce Momjian authored
      1d257792
    • Bruce Momjian's avatar
      60f1e514
    • Bruce Momjian's avatar
      Update copyright for 2017 · 7090eed3
      Bruce Momjian authored
      Backpatch-through: certain files through 9.2
      7090eed3
    • Tom Lane's avatar
      Disable prompting for passphrase while (re)loading SSL config files. · 1e942c74
      Tom Lane authored
      OpenSSL's default behavior when loading a passphrase-protected key file
      is to open /dev/tty and demand the password from there.  It was kinda
      sorta okay to allow that to happen at server start, but really that was
      never workable in standard daemon environments.  And it was a complete
      fail on Windows, where the same thing would happen at every backend launch.
      Yesterday's commit de41869b put the final nail in the coffin by causing
      that to happen at every SIGHUP; even if you've still got a terminal acting
      as the server's TTY, having the postmaster freeze until you enter the
      passphrase again isn't acceptable.
      
      Hence, override the default behavior with a callback that returns an empty
      string, ensuring failure.  Change the documentation to say that you can't
      have a passphrase-protected server key, period.
      
      If we can think of a production-grade way of collecting a passphrase from
      somewhere, we might do that once at server startup and use this callback
      to feed it to OpenSSL, but it's far from clear that anyone cares enough
      to invest that much work in the feature.  The lack of complaints about
      the existing fractionally-baked behavior suggests nobody's using it anyway.
      
      Discussion: https://postgr.es/m/29982.1483412575@sss.pgh.pa.us
      1e942c74
    • Peter Eisentraut's avatar
      Fix hot standby tests for sequence catalog change · 3d54c16c
      Peter Eisentraut authored
      From: Kuntal Ghosh <kuntalghosh.2007@gmail.com>
      3d54c16c
    • Heikki Linnakangas's avatar
      Remove bogus notice that older clients might not work with MD5 passwords. · 31c54096
      Heikki Linnakangas authored
      That was written when we still had "crypt" authentication, and it was
      referring to the fact that an older client might support "crypt"
      authentication but not "md5". But we haven't supported "crypt" for years.
      (As soon as we add a new authentication mechanism that doesn't work with
      MD5 hashes, we'll need a similar notice again. But this text as it's worded
      now is just wrong.)
      
      Backpatch to all supported versions.
      
      Discussion: https://www.postgresql.org/message-id/9a7263eb-0980-2072-4424-440bb2513dc7@iki.fi
      31c54096
    • Tom Lane's avatar
      Allow SSL configuration to be updated at SIGHUP. · de41869b
      Tom Lane authored
      It is no longer necessary to restart the server to enable, disable,
      or reconfigure SSL.  Instead, we just create a new SSL_CTX struct
      (by re-reading all relevant files) whenever we get SIGHUP.  Testing
      shows that this is fast enough that it shouldn't be a problem.
      
      In conjunction with that, downgrade the logic that complains about
      pg_hba.conf "hostssl" lines when SSL isn't active: now that's just
      a warning condition not an error.
      
      An issue that still needs to be addressed is what shall we do with
      passphrase-protected server keys?  As this stands, the server would
      demand the passphrase again on every SIGHUP, which is certainly
      impractical.  But the case was only barely supported before, so that
      does not seem a sufficient reason to hold up committing this patch.
      
      Andreas Karlsson, reviewed by Michael Banck and Michael Paquier
      
      Discussion: https://postgr.es/m/556A6E8A.9030400@proxel.se
      de41869b
  4. 02 Jan, 2017 2 commits
    • Tom Lane's avatar
      Use clock_gettime(), if available, in instr_time measurements. · 1d63f7d2
      Tom Lane authored
      The advantage of clock_gettime() is that the API allows the result to
      be precise to nanoseconds, not just microseconds as in gettimeofday().
      Now that it's routinely possible to do tens of plan node executions
      in 1us, we really need more precision than gettimeofday() can offer
      for EXPLAIN ANALYZE to accumulate statistics with.
      
      Some research shows that clock_gettime() is available on pretty nearly
      every modern Unix-ish platform, and as far as I have been able to test,
      it has about the same execution time as gettimeofday(), so there's no
      loss in switching over.  (By the same token, this doesn't do anything
      to fix the fact that we really wish clock readings were faster.  But
      there's enough win here to justify changing anyway.)
      
      A small side benefit is that on most platforms, we can use CLOCK_MONOTONIC
      instead of CLOCK_REALTIME and thereby render EXPLAIN impervious to
      concurrent resets of the system clock.  (This means that code must not
      assume that the contents of struct instr_time have any well-defined
      interpretation as timestamps, but really that was true before.)
      
      Some platforms offer nonstandard clock IDs that might be of interest.
      This patch knows we should use CLOCK_MONOTONIC_RAW on macOS, because it
      provides more precision and is faster to read than their CLOCK_MONOTONIC.
      If there turn out to be many more cases where we need special rules, it
      might be appropriate to handle the selection of clock ID in configure,
      but for the moment that doesn't seem worth the trouble.
      
      Discussion: https://postgr.es/m/31856.1400021891@sss.pgh.pa.us
      1d63f7d2
    • Tom Lane's avatar
      In pgbench logging, avoid assuming that instr_times match Unix timestamps. · 67a87535
      Tom Lane authored
      For aggregated logging, pg_bench supposed that printing the integer part of
      INSTR_TIME_GET_DOUBLE() would produce a Unix timestamp.  That was already
      broken on Windows, and it's about to get broken on most other platforms as
      well.  As in commit 74baa1e3, we can remove the entanglement at the price
      of one extra syscall per transaction; though here it seems more convenient
      to use time(NULL) instead of gettimeofday(), since we only need
      integral-second precision.
      
      I took the time to do some wordsmithing on the documentation about
      pgbench's logging features, too.
      
      Discussion: https://postgr.es/m/8837.1483216839@sss.pgh.pa.us
      67a87535
  5. 01 Jan, 2017 1 commit
    • Tom Lane's avatar
      Avoid assuming that instr_time == struct timeval in pgbench logging. · 74baa1e3
      Tom Lane authored
      This code was presuming undue familiarity with the contents of the
      instr_time struct.  That was already broken on Windows, and it's about
      to get broken on most other platforms as well.  The simplest solution
      that preserves the current output definition is to just do our own
      gettimeofday() call here.  Realistically, the extra cost is probably
      negligible in comparison to everything else that's going on in a
      pgbench transaction, so it's not worth sweating over.
      
      On Windows, the precision delivered by gettimeofday() is lower than
      one could wish, but this is still a big improvement over printing
      zeroes, as the code did before.
      
      Discussion: https://postgr.es/m/8837.1483216839@sss.pgh.pa.us
      74baa1e3
  6. 31 Dec, 2016 1 commit
    • Tom Lane's avatar
      Fix unstable regression test results. · 257d8157
      Tom Lane authored
      Commit 2ac3ef7a added a query with an underdetermined output row order;
      it has failed multiple times in the buildfarm since then.  Add an ORDER BY
      to fix.  Also, don't rely on a DROP CASCADE to drop in a well-determined
      order; that hasn't failed yet but I don't trust it much, and we're not
      saving any typing by using CASCADE anyway.
      257d8157
  7. 29 Dec, 2016 4 commits
  8. 27 Dec, 2016 4 commits
    • Tom Lane's avatar
      Fix interval_transform so it doesn't throw away non-no-op casts. · f0774abd
      Tom Lane authored
      interval_transform() contained two separate bugs that caused it to
      sometimes mistakenly decide that a cast from interval to restricted
      interval is a no-op and throw it away.
      
      First, it was wrong to rely on dt.h's field type macros to have an
      ordering consistent with the field's significance; in one case they do
      not.  This led to mistakenly treating YEAR as less significant than MONTH,
      so that a cast from INTERVAL MONTH to INTERVAL YEAR was incorrectly
      discarded.
      
      Second, fls(1<<k) produces k+1 not k, so comparing its output directly
      to SECOND was wrong.  This led to supposing that a cast to INTERVAL
      MINUTE was really a cast to INTERVAL SECOND and so could be discarded.
      
      To fix, get rid of the use of fls(), and make a function based on
      intervaltypmodout to produce a field ID code adapted to the need here.
      
      Per bug #14479 from Piotr Stefaniak.  Back-patch to 9.2 where transform
      functions were introduced, because this code was born broken.
      
      Discussion: https://postgr.es/m/20161227172307.10135.7747@wrigleys.postgresql.org
      f0774abd
    • Andrew Dunstan's avatar
      Explain unaccounted for space in pgstattuple. · 71f996d2
      Andrew Dunstan authored
      In addition to space accounted for by tuple_len, dead_tuple_len and
      free_space, the table_len includes page overhead, the item pointers
      table and padding bytes.
      
      Backpatch to live branches.
      71f996d2
    • Magnus Hagander's avatar
      Don't rename .partial files in pg_receivexlog if an error occured · 3ea56fff
      Magnus Hagander authored
      In 56c7d8d4 the behavior to keep .partial segments around
      (considered corrupt) in case an connection failure occurs was
      accidentally removed. This would lead to an incomplete segment
      being considered complete.
      
      Author: Michael Paquier
      3ea56fff
    • Magnus Hagander's avatar
      Fix typo comments · 6cfa54e3
      Magnus Hagander authored
      Erik Rijkers
      6cfa54e3