1. 02 May, 2016 8 commits
    • Alvaro Herrera's avatar
      Fix thinko in comment · 6b609168
      Alvaro Herrera authored
      Pointed out by Andres Freund
      6b609168
    • Alvaro Herrera's avatar
      Fix code comments regarding logical decoding · 234a2660
      Alvaro Herrera authored
      Back in 3b02ea4f I added some comments in various places to explain
      how logical decoding and other things worked.  Not all of the changes
      were welcome, because they were misleading or wrong.  This changes them
      a little bit to make them more accurate.
      
      Some other comments are also changed to be more accurate.  Also, fix a
      bunch of typos.
      
      Author: Álvaro Herrera, Craig Ringer
      
      Andres Freund reviewed some parts of this.
      234a2660
    • Tom Lane's avatar
      Docs: improve index entries for new tsvector functions. · 21c2b1c6
      Tom Lane authored
      Fix typos, reword some overly general index entries.
      21c2b1c6
    • Tom Lane's avatar
      Fix configure's incorrect version tests for flex and perl. · 7d7b1292
      Tom Lane authored
      awk's equality-comparison operator is "==" not "=".  We got this right
      in many places, but not in configure's checks for supported version
      numbers of flex and perl.  It hadn't been noticed because unsupported
      versions are so old as to be basically extinct in the wild, and because
      the only consequence is whether or not a WARNING flies by during
      configure.
      
      Daniel Gustafsson noted the problem with respect to the test for flex,
      I found the other by reviewing other awk calls.
      7d7b1292
    • Robert Haas's avatar
      Fix parallel safety markings for pg_start_backup. · 37d0c2cb
      Robert Haas authored
      Commit 71176854 made pg_start_backup
      parallel-restricted rather than parallel-safe, because it now relies
      on backend-private state that won't be synchronized with the parallel
      worker.  However, it didn't update pg_proc.h.  Separately, Andreas
      Karlsson observed that system_views.sql neglected to reiterate the
      parallel-safety markings whe redefining various functions, including
      this one; so add a PARALLEL RESTRICTED declaration there to match
      the new value in pg_proc.h.
      37d0c2cb
    • Robert Haas's avatar
      Again update typedefs.list file in preparation for pgindent run · f2f5e7e7
      Robert Haas authored
      This time, use the buildfarm-supplied contents for this file, instead
      of trying to update it by eyeballing the pgindent output.
      
      Per discussion with Tom and Bruce.
      f2f5e7e7
    • Heikki Linnakangas's avatar
      Remove unused macros. · d22b85fb
      Heikki Linnakangas authored
      CHECK_PAGE_OFFSET_RANGE() has been unused forever.
      CHECK_RELATION_BLOCK_RANGE() has been unused in pgstatindex.c ever since
      bt_page_stats() and bt_page_items() functions were moved from pgstattuple
      to pageinspect module. It still exists in pageinspect/btreefuncs.c.
      
      Daniel Gustafsson
      d22b85fb
    • Peter Eisentraut's avatar
      doc: Fix typo · a956bf43
      Peter Eisentraut authored
      From: Guillaume Lelarge <guillaume@lelarge.info>
      a956bf43
  2. 01 May, 2016 1 commit
    • Tom Lane's avatar
      Add a --non-master-only option to git_changelog. · 8473b7f9
      Tom Lane authored
      This has the inverse effect of --master-only.  It's needed to help find
      cases where a commit should not be described in major release notes
      because it was back-patched into older branches, though not at the same
      time as the HEAD commit.
      8473b7f9
  3. 30 Apr, 2016 5 commits
    • Tom Lane's avatar
      Update contrib/unaccent documentation about its unaccent.rules file. · 6376a16b
      Tom Lane authored
      Commit 1bbd52cb didn't bother with such niceties.
      6376a16b
    • Tom Lane's avatar
      Small improvements to OPTIMIZER_DEBUG code. · 2a2435e6
      Tom Lane authored
      Now that Paths have their own rows field, print that rather than
      the parent relation's rowcount.
      
      Show the relid sets associated with Paths using table names rather
      than numbers; since this code is able to print simple Var references
      using table names, it seems a bit silly that print_relids can't.
      
      Print the cheapest_parameterized_paths list for a RelOptInfo, and
      include information about a parameterized path's required_outer rels.
      
      Noted while trying to use this feature to debug Alexander Kirkouski's
      recent bug report.
      2a2435e6
    • Tom Lane's avatar
      Fix planner crash from pfree'ing a partial path that a GatherPath uses. · c45bf575
      Tom Lane authored
      We mustn't run generate_gather_paths() during add_paths_to_joinrel(),
      because that function can be invoked multiple times for the same target
      joinrel.  Not only is it wasteful to build GatherPaths repeatedly, but
      a later add_partial_path() could delete the partial path that a previously
      created GatherPath depends on.  Instead establish the convention that we
      do generate_gather_paths() for a rel only just before set_cheapest().
      
      The code was accidentally not broken for baserels, because as of today there
      never is more than one partial path for a baserel.  But that assumption
      obviously has a pretty short half-life, so move the generate_gather_paths()
      calls for those cases as well.
      
      Also add some generic comments explaining how and why this all works.
      
      Per fuzz testing by Andreas Seltenreich.
      
      Report: <871t5pgwdt.fsf@credativ.de>
      c45bf575
    • Tom Lane's avatar
      Remove warning about num_sync being too large in synchronous_standby_names. · 17d5db35
      Tom Lane authored
      If we're not going to reject such setups entirely, throwing a WARNING in
      check_synchronous_standby_names() is unhelpful, because it will cause the
      warning to be logged again every time the postmaster receives SIGHUP.
      Per discussion, just remove the warning.
      
      In passing, improve the documentation for synchronous_commit, which had not
      gotten the word that now there can be more than one synchronous standby.
      17d5db35
    • Tom Lane's avatar
      Fix mishandling of equivalence-class tests in parameterized plans. · 207d5a65
      Tom Lane authored
      Given a three-or-more-way equivalence class, such as X.Y = Y.Y = Z.Z,
      it was possible for the planner to omit one of the quals needed to
      enforce that all members of the equivalence class are actually equal.
      This only happened in the case of a parameterized join node for two
      of the relations, that is a plan tree like
      
      	Nested Loop
      	  ->  Scan X
      	  ->  Nested Loop
      	    ->  Scan Y
      	    ->  Scan Z
      	          Filter: Z.Z = X.X
      
      The eclass machinery normally expects to apply X.X = Y.Y when those
      two relations are joined, but in this shape of plan tree they aren't
      joined until the top node --- and, if the lower nested loop is marked
      as parameterized by X, the top node will assume that the relevant eclass
      condition(s) got pushed down into the lower node.  On the other hand,
      the scan of Z assumes that it's only responsible for constraining Z.Z
      to match any one of the other eclass members.  So one or another of
      the required quals sometimes fell between the cracks, depending on
      whether consideration of the eclass in get_joinrel_parampathinfo()
      for the lower nested loop chanced to generate X.X = Y.Y or X.X = Z.Z
      as the appropriate constraint there.  If it generated the latter,
      it'd erroneously suppose that the Z scan would take care of matters.
      To fix, force X.X = Y.Y to be generated and applied at that join node
      when this case occurs.
      
      This is *extremely* hard to hit in practice, because various planner
      behaviors conspire to mask the problem; starting with the fact that the
      planner doesn't really like to generate a parameterized plan of the
      above shape.  (It might have been impossible to hit it before we
      tweaked things to allow this plan shape for star-schema cases.)  Many
      thanks to Alexander Kirkouski for submitting a reproducible test case.
      
      The bug can be demonstrated in all branches back to 9.2 where parameterized
      paths were introduced, so back-patch that far.
      207d5a65
  4. 29 Apr, 2016 7 commits
    • Kevin Grittner's avatar
      Add a few entries to the tail of time mapping, to see old values. · 7c3e8039
      Kevin Grittner authored
      Without a few entries beyond old_snapshot_threshold, the lookup
      would often fail, resulting in the more aggressive pruning or
      vacuum being skipped often enough to matter.  This was very clearly
      shown by a python test script posted by Ants Aasma, and was likely
      a factor in an earlier but somewhat less clear-cut test case posted
      by Jeff Janes.
      
      This patch makes no change to the logic, per se -- it just makes
      the array of mapping entries big enough to make lookup misses based
      on timing much less likely.  An occasional miss is still possible
      if a thread stalls for more than 10 minutes, but that does not
      create any problem with correctness of behavior.  Besides, if
      things are so busy that a thread is stalling for more than 10
      minutes, it is probably OK to skip the more aggressive cleanup at
      that particular point in time.
      7c3e8039
    • Andrew Dunstan's avatar
      Fix comment whitespace in VS2105 patch · d34e7b28
      Andrew Dunstan authored
      per gripe from Michael Paquier.
      d34e7b28
    • Peter Eisentraut's avatar
      doc: Minor wording changes · 82881b2b
      Peter Eisentraut authored
      From: Dmitry Igrishin <dmitigr@gmail.com>
      82881b2b
    • Magnus Hagander's avatar
      Fix typo · a03bda32
      Magnus Hagander authored
      Author: Thomas Munro
      a03bda32
    • Andrew Dunstan's avatar
      Fix typo in VS2015 patch · 7dc54923
      Andrew Dunstan authored
      reported by Christian Ullrich
      7dc54923
    • Andrew Dunstan's avatar
      Support building with Visual Studio 2015 · 0fb54de9
      Andrew Dunstan authored
      Adjust the way we detect the locale. As a result the minumum Windows
      version supported by VS2015 and later is Windows Vista. Add some tweaks
      to remove new compiler warnings. Remove documentation references to the
      now obsolete msysGit.
      
      Michael Paquier, somewhat edited by me, reviewed by Christian Ullrich.
      
      Backpatch to 9.5
      0fb54de9
    • Andres Freund's avatar
      Remember asking for feedback during walsender shutdown. · 59455018
      Andres Freund authored
      Since 5a991ef8 we're explicitly asking for feedback from the receiving
      side when shutting down walsender, if there's not yet replicated
      data.
      
      Unfortunately we didn't remember (i.e. set waiting_for_ping_response to
      true) having asked for feedback, leading to scenarios in which replies
      were requested at a high frequency.
      
      I can't reproduce this problem on my laptop, I think that's because the
      problem requires a significant TCP window to manifest due to the
      !pq_is_send_pending() condition. But since this clearly is a bug, let's
      fix it.  There's quite possibly more wrong than just this though.
      
      While fiddling with WalSndDone(), I rewrote a hard to understand comment
      about looking at the flush vs. the write position.
      
      Reported-By: Nick Cleaton, Magnus Hagander
      Author: Nick Cleaton
      Discussion: CAFgz3kus=rC_avEgBV=+hRK5HYJ8vXskJRh8yEAbahJGTzF2VQ@mail.gmail.com
          CABUevExsjROqDcD0A2rnJ6HK6FuKGyewJr3PL12pw85BHFGS2Q@mail.gmail.com
      Backpatch: 9.4, were 5a991ef8 introduced the use of feedback messages
          during shutdown.
      59455018
  5. 28 Apr, 2016 4 commits
    • Tom Lane's avatar
      Adjust DatumGetBool macro, this time for sure. · 23b09e15
      Tom Lane authored
      Commit 23a41573 attempted to fix the DatumGetBool macro to ignore bits
      in a Datum that are to the left of the actual bool value.  But it did that
      by casting the Datum to bool; and on compilers that use C99 semantics for
      bool, that ends up being a whole-word test, not a 1-byte test.  This seems
      to be the true explanation for contrib/seg failing in VS2015.  To fix, use
      GET_1_BYTE() explicitly.  I think in the previous patch, I'd had some idea
      of not having to commit to bool being exactly 1 byte wide, but regardless
      of what the compiler's bool is, boolean columns and Datums are certainly
      1 byte wide.
      
      The previous fix was (eventually) back-patched into all active versions,
      so do likewise with this one.
      23b09e15
    • Tom Lane's avatar
      Revert "Convert contrib/seg's bool-returning SQL functions to V1 call convention." · f0504230
      Tom Lane authored
      This reverts commit c8e81afc.
      That turns out to have been based on a faulty diagnosis of why the
      VS2015 build was misbehaving.  Instead, we need to fix DatumGetBool().
      f0504230
    • Teodor Sigaev's avatar
      Prevent to use magic constants · f8467f7d
      Teodor Sigaev authored
      Use macroses for definition amstrategies/amsupport fields instead of
      hardcoded values.
      
      Author: Nikolay Shaplov with addition for contrib/bloom
      f8467f7d
    • Teodor Sigaev's avatar
      Prevent multiple cleanup process for pending list in GIN. · e2c79e14
      Teodor Sigaev authored
      Previously, ginInsertCleanup could exit early if it detects that someone else
      is cleaning up the pending list, without waiting for that someone else to
      finish the job. But in this case vacuum could miss tuples to be deleted.
      
      Cleanup process now locks metapage with a help of heavyweight
      LockPage(ExclusiveLock), and it guarantees that there is no another cleanup
      process at the same time. Lock is taken differently depending on caller of
      cleanup process: any vacuums and gin_clean_pending_list() will be blocked
      until lock becomes available, ordinary insert uses conditional lock to
      prevent indefinite waiting on lock.
      
      Insert into pending list doesn't use this lock, so insertion isn't blocked.
      
      Also, patch adds stopping of cleanup process when at-start-cleanup-tail is
      reached in order to prevent infinite cleanup in case of massive insertion. But
      it will stop only for automatic maintenance tasks like autovacuum.
      
      Patch introduces choice of limit of memory to use: autovacuum_work_mem,
      maintenance_work_mem or work_mem depending on call path.
      
      Patch for previous releases should be reworked due to changes between 9.6 and
      previous ones in this area.
      
      Discover and diagnostics by Jeff Janes and Tomas Vondra
      
      Patch by me with some ideas of Jeff Janes
      e2c79e14
  6. 27 Apr, 2016 15 commits
    • Tom Lane's avatar
      Use memmove() not memcpy() to slide some pointers down. · ad520ec4
      Tom Lane authored
      The previous coding here was formally undefined, though it seems to
      accidentally work on most platforms in the buildfarm.  Caught by some
      OpenBSD platforms in which libc contains an assertion check for
      overlapping areas passed to memcpy().
      
      Thomas Munro
      ad520ec4
    • Tom Lane's avatar
      Clean up parsing of synchronous_standby_names GUC variable. · 4c804fbd
      Tom Lane authored
      Commit 989be081 added a flex/bison lexer/parser to interpret
      synchronous_standby_names.  It was done in a pretty crufty way, though,
      making assorted end-use sites responsible for calling the parser at the
      right times.  That was not only vulnerable to errors of omission, but made
      it possible that lexer/parser errors occur at very undesirable times,
      and created memory leakages even if there was no error.
      
      Instead, perform the parsing once during check_synchronous_standby_names
      and let guc.c manage the resulting data.  To do that, we have to flatten
      the parsed representation into a single hunk of malloc'd memory, but that
      is not very hard.
      
      While at it, work a little harder on making useful error reports for
      parsing problems; the previous code felt that "synchronous_standby_names
      parser returned 1" was an appropriate user-facing error message.  (To
      be fair, it did also log a syntax error message, but separately from the
      GUC problem report, which is at best confusing.)  It had some outright
      bugs in the face of invalid input, too.
      
      I (tgl) also concluded that we need to restrict unquoted names in
      synchronous_standby_names to be just SQL identifiers.  The previous coding
      would accept darn near anything, which (1) makes the quoting convention
      both nearly-unnecessary and formally ambiguous, (2) makes it very hard to
      understand what is a syntax error and what is a creative interpretation of
      the input as a standby name, and (3) makes it impossible to further extend
      the syntax in future without a compatibility break.  I presume that we're
      intending future extensions of the syntax, else this parsing infrastructure
      is massive overkill, so (3) is an important objection.  Since we've taken
      a compatibility hit for non-identifier names with this change anyway, we
      might as well lock things down now and insist that users use double quotes
      for standby names that aren't identifiers.
      
      Kyotaro Horiguchi and Tom Lane
      4c804fbd
    • Robert Haas's avatar
      Fix wrong word. · 372ff7ca
      Robert Haas authored
      Commit a31212b4 was a little too hasty.
      
      Per report from Tom Lane.
      372ff7ca
    • Robert Haas's avatar
      Change postgresql.conf.sample to say that fsync=off will corrupt data. · a31212b4
      Robert Haas authored
      Discussion: 24748.1461764666@sss.pgh.pa.us
      
      Per a suggestion from Craig Ringer.  This wording from Tom Lane,
      following discussion.
      a31212b4
    • Robert Haas's avatar
      Tighten up sanity checks for parallel aggregate in execQual.c. · cf402ba7
      Robert Haas authored
      David Rowley
      cf402ba7
    • Robert Haas's avatar
      Remove inadvertently commited vim swapfile. · b33dc776
      Robert Haas authored
      If you were wondering what editor I use, now you know.
      b33dc776
    • Robert Haas's avatar
      Update typedefs.list file in preparation for pgindent run · acb51bd7
      Robert Haas authored
      In addition to adding new typedefs, I also re-sorted the file so that
      various entries add piecemeal, mostly or entirely by me, were alphabetized
      the same way as other entries in the file.
      acb51bd7
    • Robert Haas's avatar
      Clean up a few parallelism-related things that pgindent wants to mangle. · 8126eaee
      Robert Haas authored
      In nodeFuncs.c, pgindent wants to introduce spurious indentation into
      the definitions of planstate_tree_walker and planstate_walk_subplans.
      Fix that by spreading the definition out across several lines, similar
      to what is already done for other walker functions in that file.
      
      In execParallel.c, in the definition of SharedExecutorInstrumentation,
      pgindent wants to insert more whitespace between the type name and the
      member name.  That causes it to mangle comments later on the line.  Fix
      by moving the comments out of line.  Now that we have a bit more room,
      add some more details that may be useful to the next person reading
      this code.
      8126eaee
    • Robert Haas's avatar
      Remove mergeHyperLogLog. · 360ca27a
      Robert Haas authored
      It's buggy.  If somebody needs this later, they'll need to put back
      a non-buggy vesion of it.
      
      Discussion: CAM3SWZT-i6R9JU5YXa8MJUou2_r3LfGJZpQ9tYa1BYxfkj0=cQ@mail.gmail.com
      Discussion: CAM3SWZRUOLsYoTT83QgdUy9D8ehYWm_nvbrrfcOOzikiRfFY7g@mail.gmail.com
      
      Peter Geoghegan
      360ca27a
    • Robert Haas's avatar
      Fix EXPLAIN VERBOSE output for parallel aggregate. · 59eb5512
      Robert Haas authored
      The way that PartialAggregate and FinalizeAggregate plan nodes were
      displaying output columns before was bogus.  Now, FinalizeAggregate
      produces the same outputs as an Aggregate would have produced, while
      PartialAggregate produces each of those outputs prefixed by the word
      PARTIAL.
      
      Discussion: 12585.1460737650@sss.pgh.pa.us
      
      Patch by me, reviewed by David Rowley.
      59eb5512
    • Andres Freund's avatar
      Don't open formally non-existent segments in _mdfd_getseg(). · 72a98a63
      Andres Freund authored
      Before this commit _mdfd_getseg(), in contrast to mdnblocks(), did not
      verify whether all segments leading up to the to-be-opened one, were
      RELSEG_SIZE sized. That is e.g. not the case after truncating a
      relation, because later segments just get truncated to zero length, not
      removed.
      
      Once a "non-existent" segment has been opened in a session, mdnblocks()
      will return wrong results, causing errors like "could not read block %u
      in file" when accessing blocks. Closing the session, or the later
      arrival of relevant invalidation messages, would "fix" the problem.
      
      That, so far, was mostly harmless, because most segment accesses are
      only done after an mdnblocks() call. But since 428b1d6b we try to
      open segments that might have been deleted, to trigger kernel writeback
      from a backend's queue of recent writes.
      
      To fix check segment sizes in _mdfd_getseg() when opening previously
      unopened segments. In practice this shouldn't imply a lot of additional
      lseek() calls, because mdnblocks() will most of the time already have
      opened all relevant segments.
      
      This commit also fixes a second problem, namely that _mdfd_getseg(
      EXTENSION_RETURN_NULL) extends files during recovery, which is not
      desirable for the mdwriteback() case.  Add EXTENSION_REALLY_RETURN_NULL,
      which does not behave that way, and use it.
      
      Reported-By: Thom Brown
      Author: Andres Freund, Abhijit Menon-Sen
      Reviewd-By: Robert Haas, Fabien Coehlo
      Discussion: CAA-aLv6Dp_ZsV-44QA-2zgkqWKQq=GedBX2dRSrWpxqovXK=Pg@mail.gmail.com
      Fixes: 428b1d6b
      72a98a63
    • Andres Freund's avatar
      Emit invalidations to standby for transactions without xid. · c6ff84b0
      Andres Freund authored
      So far, when a transaction with pending invalidations, but without an
      assigned xid, committed, we simply ignored those invalidation
      messages. That's problematic, because those are actually sent for a
      reason.
      
      Known symptoms of this include that existing sessions on a hot-standby
      replica sometimes fail to notice new concurrently built indexes and
      visibility map updates.
      
      The solution is to WAL log such invalidations in transactions without an
      xid. We considered to alternatively force-assign an xid, but that'd be
      problematic for vacuum, which might be run in systems with few xids.
      
      Important: This adds a new WAL record, but as the patch has to be
      back-patched, we can't bump the WAL page magic. This means that standbys
      have to be updated before primaries; otherwise
      "PANIC: standby_redo: unknown op code 32" errors can be encountered.
      
      XXX:
      
      Reported-By: Васильев Дмитрий, Masahiko Sawada
      Discussion:
          CAB-SwXY6oH=9twBkXJtgR4UC1NqT-vpYAtxCseME62ADwyK5OA@mail.gmail.com
          CAD21AoDpZ6Xjg=gFrGPnSn4oTRRcwK1EBrWCq9OqOHuAcMMC=w@mail.gmail.com
      c6ff84b0
    • Robert Haas's avatar
      Fix pg_get_functiondef to dump parallel-safety markings. · 2ac3be2e
      Robert Haas authored
      Ashutosh Sharma
      2ac3be2e
    • Noah Misch's avatar
      Impose a full barrier in generic-xlc.h atomics functions. · 213c7df0
      Noah Misch authored
      pg_atomic_compare_exchange_*_impl() were providing only the semantics of
      an acquire barrier.  Buildfarm members hornet and mandrill revealed this
      deficit beginning with commit 008608b9.
      While we have no report of symptoms in 9.5, we can't rule out the
      possibility of certain compilers, hardware, or extension code relying on
      these functions' specified barrier semantics.  Back-patch to 9.5, where
      commit b64d92f1 introduced atomics.
      
      Reviewed by Andres Freund.
      213c7df0
    • Peter Eisentraut's avatar
      pg_dump: Message style improvements · 3019f432
      Peter Eisentraut authored
      forgotten in b6dacc17
      3019f432