1. 08 Jun, 2016 1 commit
  2. 07 Jun, 2016 24 commits
  3. 06 Jun, 2016 6 commits
    • Tom Lane's avatar
      Don't reset changes_since_analyze after a selective-columns ANALYZE. · f64340e7
      Tom Lane authored
      If we ANALYZE only selected columns of a table, we should not postpone
      auto-analyze because of that; other columns may well still need stats
      updates.  As committed, the counter is left alone if a column list is
      given, whether or not it includes all analyzable columns of the table.
      Per complaint from Tomasz Ostrowski.
      
      It's been like this a long time, so back-patch to all supported branches.
      
      Report: <ef99c1bd-ff60-5f32-2733-c7b504eb960c@ato.waw.pl>
      f64340e7
    • Robert Haas's avatar
      Stop the executor if no more tuples can be sent from worker to leader. · c6dbf1fe
      Robert Haas authored
      If a Gather node has read as many tuples as it needs (for example, due
      to Limit) it may detach the queue connecting it to the worker before
      reading all of the worker's tuples.  Rather than let the worker
      continue to generate and send all of the results, have it stop after
      sending the next tuple.
      
      More could be done here to stop the worker even quicker, but this is
      about as well as we can hope to do for 9.6.
      
      This is in response to a problem report from Andreas Seltenreich.
      Commit 44339b89 should be actually be
      sufficient to fix that example even without this change, but it seems
      better to do this, too, since we might otherwise waste quite a large
      amount of effort in one or more workers.
      
      Discussion: CAA4eK1KOKGqmz9bGu+Z42qhRwMbm4R5rfnqsLCNqFs9j14jzEA@mail.gmail.com
      
      Amit Kapila
      c6dbf1fe
    • Robert Haas's avatar
      shm_mq: After a send fails with SHM_MQ_DETACHED, later ones should too. · 44339b89
      Robert Haas authored
      Prior to this patch, it was occasionally possible, after shm_mq_sendv
      had previously returned SHM_MQ_DETACHED, for a later shm_mq_sendv
      operation to fail an assertion instead of just again returning
      SHM_MQ_ATTACHED.  From the shm_mq code's point of view, it was
      expecting to be called again with the same arguments, since the
      previous operation had only partially completed.  However, a caller
      who isn't using non-blocking mode won't be prepared to repeat the call
      with the same arguments, and this code shouldn't expect that they
      will.  Repair in such a way that we'll be OK whether the next call
      uses the same arguments or not.
      
      Found by Andreas Seltenreich.  Analysis and sketch of fix by Amit
      Kapila.  Patch by me, reviewed by Amit Kapila.
      44339b89
    • Robert Haas's avatar
      pg_upgrade: Don't overwrite existing files. · e191a690
      Robert Haas authored
      For historical reasons, copyFile and rewriteVisibilityMap took a force
      argument which was always passed as true, meaning that any existing
      file should be overwritten.  However, it seems much safer to instead
      fail if a file we need to write already exists.
      
      While we're at it, remove the "force" argument altogether, since it was
      never passed as anything other than true (and now we would never pass
      it as anything other than false, if we kept it).
      
      Noted by Andres Freund during post-commit review of the patch that added
      rewriteVisibilityMap, commit 7087166a,
      but this also changes the behavior when copying files without rewriting
      them.
      
      Patch by Masahiko Sawada.
      e191a690
    • Robert Haas's avatar
      Fix typo. · 932b97a0
      Robert Haas authored
      Jim Nasby
      932b97a0
    • Robert Haas's avatar
      pg_upgrade: Improve error checking in rewriteVisibilityMap. · aba89430
      Robert Haas authored
      In the old logic, if read() were to return an error, we'd silently stop
      rewriting the visibility map at that point in the file.  That's safe,
      but reporting the error is better, so do that instead.
      
      Report by Andres Freund.  Patch by Masahiko Sawada, with one correction
      by me.
      aba89430
  4. 05 Jun, 2016 2 commits
    • Peter Eisentraut's avatar
      Fix whitespace · 6201a8ef
      Peter Eisentraut authored
      6201a8ef
    • Tom Lane's avatar
      Properly initialize SortSupport for ORDER BY rechecks in nodeIndexscan.c. · 8a859691
      Tom Lane authored
      Fix still another bug in commit 35fcb1b3: it failed to fully initialize
      the SortSupport states it introduced to allow the executor to re-check
      ORDER BY expressions containing distance operators.  That led to a null
      pointer dereference if the sortsupport code tried to use ssup_cxt.  The
      problem only manifests in narrow cases, explaining the lack of previous
      field reports.  It requires a GiST-indexable distance operator that lacks
      SortSupport and is on a pass-by-ref data type, which among core+contrib
      seems to be only btree_gist's interval opclass; and it requires the scan
      to be done as an IndexScan not an IndexOnlyScan, which explains how
      btree_gist's regression test didn't catch it.  Per bug #14134 from
      Jihyun Yu.
      
      Peter Geoghegan
      
      Report: <20160511154904.2603.43889@wrigleys.postgresql.org>
      8a859691
  5. 04 Jun, 2016 1 commit
  6. 03 Jun, 2016 6 commits
    • Tom Lane's avatar
      Fix grammar's AND/OR flattening to work with operator_precedence_warning. · 05104f69
      Tom Lane authored
      It'd be good for "(x AND y) AND z" to produce a three-child AND node
      whether or not operator_precedence_warning is on, but that failed to
      happen when it's on because makeAndExpr() didn't look through the added
      AEXPR_PAREN node.  This has no effect on generated plans because prepqual.c
      would flatten the AND nest anyway; but it does affect the number of parens
      printed in ruleutils.c, for example.  I'd already fixed some similar
      hazards in parse_expr.c in commit abb16465, but didn't think to search
      gram.y for problems of this ilk.  Per gripe from Jean-Pierre Pelletier.
      
      Report: <fa0535ec6d6428cfec40c7e8a6d11156@mail.gmail.com>
      05104f69
    • Tom Lane's avatar
      Inline the easy cases in MakeExpandedObjectReadOnly(). · d50183c5
      Tom Lane authored
      This attempts to buy back some of whatever performance we lost from fixing
      bug #14174 by inlining the initial checks in MakeExpandedObjectReadOnly()
      into the callers.  We can do that in a macro without creating multiple-
      evaluation hazards, so it's pretty much free notationally; and the amount
      of code added to callers should be minimal as well.  (Testing a value can't
      take many more instructions than passing it to a subroutine.)
      
      Might as well inline DatumIsReadWriteExpandedObject() while we're at it.
      
      This is an ABI break for callers, so it doesn't seem safe to put into 9.5,
      but I see no reason not to do it in HEAD.
      d50183c5
    • Tom Lane's avatar
      Mark read/write expanded values as read-only in ValuesNext(), too. · 9eaf5be5
      Tom Lane authored
      Further thought about bug #14174 motivated me to try the case of a
      R/W datum being returned from a VALUES list, and sure enough it was
      broken.  Fix that.
      
      Also add a regression test case exercising the same scenario for
      FunctionScan.  That's not broken right now, because the function's
      result will get shoved into a tuplestore between generation and use;
      but it could easily become broken whenever we get around to optimizing
      FunctionScan better.
      
      There don't seem to be any other places where we put the result of
      expression evaluation into a virtual tuple slot that could then be
      the source for Vars of further expression evaluation, so I think
      this is the end of this bug.
      9eaf5be5
    • Tom Lane's avatar
      Mark read/write expanded values as read-only in ExecProject(). · 69f526aa
      Tom Lane authored
      If a plan node output expression returns an "expanded" datum, and that
      output column is referenced in more than one place in upper-level plan
      nodes, we need to ensure that what is returned is a read-only reference
      not a read/write reference.  Otherwise one of the referencing sites could
      scribble on or even delete the expanded datum before we have evaluated the
      others.  Commit 1dc5ebc9, which introduced this feature, supposed
      that it'd be sufficient to make SubqueryScan nodes force their output
      columns to read-only state.  The folly of that was revealed by bug #14174
      from Andrew Gierth, and really should have been immediately obvious
      considering that the planner will happily optimize SubqueryScan nodes
      out of the plan without any regard for this issue.
      
      The safest fix seems to be to make ExecProject() force its results into
      read-only state; that will cover every case where a plan node returns
      expression results.  Actually we can delegate this to ExecTargetList()
      since we can recursively assume that plain Vars will not reference
      read-write datums.  That should keep the extra overhead down to something
      minimal.  We no longer need ExecMakeSlotContentsReadOnly(), which was
      introduced only in support of the idea that just a few plan node types
      would need to do this.
      
      In the future it would be nice to have the planner account for this problem
      and inject force-to-read-only expression evaluation nodes into only the
      places where there's a risk of multiple evaluation.  That's not a suitable
      solution for 9.5 or even 9.6 at this point, though.
      
      Report: <20160603124628.9932.41279@wrigleys.postgresql.org>
      69f526aa
    • Robert Haas's avatar
      Remove bogus code to apply PathTargets to partial paths. · 04ae11f6
      Robert Haas authored
      The partial paths that get modified may already have been used as
      part of a GatherPath which appears in the path list, so modifying
      them is not a good idea at this stage - especially because this
      code has no check that the PathTarget is in fact parallel-safe.
      
      When partial aggregation is being performed, this is actually
      harmless because we'll end up replacing the pathtargets here with
      the correct ones within create_grouping_paths().  But if we've got
      a query tree containing only scan/join operations then this can
      result in incorrectly pushing down parallel-restricted target
      list entries.  If those are, for example, references to subqueries,
      that can crash the server; but it's wrong in any event.
      
      Amit Kapila
      04ae11f6
    • Robert Haas's avatar
      Mark PostmasterPid as PGDLLIMPORT. · cac83219
      Robert Haas authored
      This is so that extensions can use it.
      
      Michael Paquier
      cac83219