1. 09 Mar, 2016 9 commits
    • Tom Lane's avatar
      Fix copy-and-pasteo in comment. · d31f20e2
      Tom Lane authored
      Wensheng Zhang
      d31f20e2
    • Tom Lane's avatar
      Improve handling of pathtargets in planner.c. · 51c0f63e
      Tom Lane authored
      Refactor so that the internal APIs in planner.c deal in PathTargets not
      targetlists, and establish a more regular structure for deriving the
      targets needed for successive steps.
      
      There is more that could be done here; calculating the eval costs of each
      successive target independently is both inefficient and wrong in detail,
      since we won't actually recompute values available from the input node's
      tlist.  But it's no worse than what happened before the pathification
      rewrite.  In any case this seems like a good starting point for considering
      how to handle Konstantin Knizhnik's function-evaluation-postponement patch.
      51c0f63e
    • Andres Freund's avatar
      Add valgrind suppressions for python code. · 2f1f4439
      Andres Freund authored
      Python's allocator does some low-level tricks for efficiency;
      unfortunately they trigger valgrind errors. Those tricks can be disabled
      making instrumentation easier; but few people testing postgres will have
      such a build of python. So add broad suppressions of the resulting
      errors.
      
      See also https://svn.python.org/projects/python/trunk/Misc/README.valgrind
      
      This possibly will suppress valid errors, but without it it's basically
      impossible to use valgrind with plpython code.
      
      Author: Andres Freund
      Backpatch: 9.4, where we started to maintain valgrind suppressions
      2f1f4439
    • Andres Freund's avatar
      Add valgrind suppressions for bootstrap related code. · 5e43bee8
      Andres Freund authored
      Author: Andres Freund
      Backpatch: 9.4, where we started to maintain valgrind suppressions
      5e43bee8
    • Tom Lane's avatar
      Improve handling of group-column indexes in GroupingSetsPath. · 9e8b9942
      Tom Lane authored
      Instead of having planner.c compute a groupColIdx array and store it in
      GroupingSetsPaths, make create_groupingsets_plan() find the grouping
      columns by searching in the child plan node's tlist.  Although that's
      probably a bit slower for create_groupingsets_plan(), it's more like
      the way every other plan node type does this, and it provides positive
      confirmation that we know which child output columns we're supposed to be
      grouping on.  (Indeed, looking at this now, I'm not at all sure that it
      wasn't broken before, because create_groupingsets_plan() isn't demanding
      an exact tlist match from its child node.)  Also, this allows substantial
      simplification in planner.c, because it no longer needs to compute the
      groupColIdx array at all; no other cases were using it.
      
      I'd intended to put off this refactoring until later (like 9.7), but
      in view of the likely bug fix and the need to rationalize planner.c's
      tlist handling so we can do something sane with Konstantin Knizhnik's
      function-evaluation-postponement patch, I think it can't wait.
      9e8b9942
    • Peter Eisentraut's avatar
      Handle invalid libpq sockets in more places · a40814d7
      Peter Eisentraut authored
      Also, make error messages consistent.
      
      From: Michael Paquier <michael.paquier@gmail.com>
      a40814d7
    • Peter Eisentraut's avatar
    • Peter Eisentraut's avatar
      psql: Fix some strange code in SQL help creation · 92d4294d
      Peter Eisentraut authored
      Struct QL_HELP used to be defined as static in the sql_help.h header
      file, which is included in sql_help.c and help.c, thus creating two
      separate instances of the struct.  This causes a warning from GCC 6,
      because the struct is not used in sql_help.c.
      
      Instead, declare the struct as extern in the header file and define it
      in sql_help.c.  This also allows making a bunch of functions static
      because they are no longer needed outside of sql_help.c.
      Reviewed-by: default avatarThomas Munro <thomas.munro@enterprisedb.com>
      92d4294d
    • Peter Eisentraut's avatar
      ecpg: Fix typo · 0d0644dc
      Peter Eisentraut authored
      GCC 6 points out the redundant conditions, which were apparently typos.
      Reviewed-by: default avatarThomas Munro <thomas.munro@enterprisedb.com>
      0d0644dc
  2. 08 Mar, 2016 17 commits
    • Andres Freund's avatar
      ltree: Zero padding bytes when allocating memory for externally visible data. · 7a1d4a24
      Andres Freund authored
      ltree/ltree_gist/ltxtquery's headers stores data at MAXALIGN alignment,
      requiring some padding bytes. So far we left these uninitialized. Zero
      those by using palloc0.
      
      Author: Andres Freund
      Reported-By: Andres Freund / valgrind / buildarm animal skink
      Backpatch: 9.1-
      7a1d4a24
    • Tom Lane's avatar
      Fix minor thinko in pathification code. · 61fd2189
      Tom Lane authored
      I passed the wrong "root" struct to create_pathtarget in build_minmax_path.
      Since the subroot is a clone of the outer root, this would not cause any
      serious problems, but it would waste some cycles because
      set_pathtarget_cost_width would not have access to Var width estimates
      set up while running query_planner on the subroot.
      61fd2189
    • Andres Freund's avatar
      plperl: Correctly handle empty arrays in plperl_ref_from_pg_array. · e66197fa
      Andres Freund authored
      plperl_ref_from_pg_array() didn't consider the case that postgrs arrays
      can have 0 dimensions (when they're empty) and accessed the first
      dimension without a check. Fix that by special casing the empty array
      case.
      
      Author: Alex Hunsaker
      Reported-By: Andres Freund / valgrind / buildfarm animal skink
      Discussion: 20160308063240.usnzg6bsbjrne667@alap3.anarazel.de
      Backpatch: 9.1-
      e66197fa
    • Tom Lane's avatar
      Finish refactoring make_foo() functions in createplan.c. · 8c314b98
      Tom Lane authored
      This patch removes some redundant cost calculations that I left for later
      cleanup in commit 3fc6e2d7.  There's now a uniform policy that the
      make_foo() convenience functions don't do any cost calculations.  Most of
      their callers copy costs from the source Path node, and for those that
      don't, the calculation in the make_foo() function wasn't necessarily right
      anyhow.  (make_result() was particularly a mess, as it was serving multiple
      callers using cost calcs designed for only the first one or two that had
      ever existed.)  Aside from saving a few cycles, this ensures that what
      EXPLAIN prints matches the costs we used for planning purposes.  It does
      not change any planner decisions, since the decisions are already made.
      8c314b98
    • Robert Haas's avatar
      Comment update for fdw_recheck_quals. · 7400559a
      Robert Haas authored
      Commit 5fc4c26d could've done a better
      job updating these comments.
      
      Etsuro Fujita
      7400559a
    • Robert Haas's avatar
      Update GetForeignPlan documentation. · dff7ad3c
      Robert Haas authored
      Commit 385f337c added a new argument
      to the FDW GetForeignPlan method, but failed to update the documentation
      to match.
      
      Etsuro Fujita
      dff7ad3c
    • Robert Haas's avatar
      Fix reversed argument to bms_is_subset. · d29b153f
      Robert Haas authored
      Ashutosh Bapat
      d29b153f
    • Robert Haas's avatar
      Add new flags argument for xl_heap_visible to heap2_desc. · 734f86d5
      Robert Haas authored
      Masahiko Sawada
      734f86d5
    • Robert Haas's avatar
      Fix typo. · 272baaa5
      Robert Haas authored
      Masahiko Sawada
      272baaa5
    • Robert Haas's avatar
      Fix parallel query on standby servers. · dcfecaae
      Robert Haas authored
      Without this fix, it inevitably bombs out with "ERROR:  failed to
      initialize transaction_read_only to 0".  Repair.
      
      Ashutosh Sharma; comments adjusted by me.
      dcfecaae
    • Robert Haas's avatar
      Add some functions to fd.c for the convenience of extensions. · 070140ee
      Robert Haas authored
      For example, if you want to perform an ioctl() on a file descriptor
      opened through the fd.c routines, there's no way to do that without
      being able to get at the underlying fd.
      
      KaiGai Kohei
      070140ee
    • Robert Haas's avatar
      Department of second thoughts: remove PD_ALL_FROZEN. · 77a1d1e7
      Robert Haas authored
      Commit a892234f added a second bit per
      page to the visibility map, which still seems like a good idea, but it
      also added a second page-level bit alongside PD_ALL_VISIBLE to track
      whether the visibility map bit was set.  That no longer seems like a
      clever plan, because we don't really need that bit for anything.  We
      always clear both bits when the page is modified anyway.
      
      Patch by me, reviewed by Kyotaro Horiguchi and Masahiko Sawada.
      77a1d1e7
    • Robert Haas's avatar
      Add pg_visibility contrib module. · ba0a198f
      Robert Haas authored
      This lets you examine the visibility map as well as page-level
      visibility information.  I initially wrote it as a debugging aid,
      but was encouraged to polish it for commit.
      
      Patch by me, reviewed by Masahiko Sawada.
      
      Discussion: 56D77803.6080503@BlueTreble.com
      ba0a198f
    • Robert Haas's avatar
      pg_upgrade: Remove converter plugin facility. · 6f56b41a
      Robert Haas authored
      We've not found a use for this so far, and the current need, which
      is to convert the visibility map to a new format, does not suit the
      existing design anyway.  So just rip it out.
      
      Author: Masahiko Sawada, slightly revised by me.
      Discussion: 20160215211313.GB31273@momjian.us
      6f56b41a
    • Tom Lane's avatar
      Fix minor typo in logical-decoding docs. · a93aec4e
      Tom Lane authored
      David Rowley
      a93aec4e
    • Tom Lane's avatar
      Spell "parallel" correctly. · cf8e7b16
      Tom Lane authored
      Per David Rowley.
      cf8e7b16
    • Peter Eisentraut's avatar
      Fix uninstall target in tsearch Makefile · 1c2db8c3
      Peter Eisentraut authored
      Artur Zakirov
      1c2db8c3
  3. 07 Mar, 2016 8 commits
    • Joe Conway's avatar
      Make get_controlfile() error logging consistent with src/common · 7b077af5
      Joe Conway authored
      As originally committed, get_controlfile() used a non-standard approach
      to error logging. Make it consistent with the majority of error logging
      done in src/common.
      
      Applies to master only.
      7b077af5
    • Andres Freund's avatar
      Further improvements to c8f621c4. · b63bea5f
      Andres Freund authored
      Coverity and inspection for the issue addressed in fd45d16f found some
      questionable code.
      
      Specifically coverity noticed that the wrong length was added in
      ReorderBufferSerializeChange() - without immediate negative consequences
      as the variable isn't used afterwards.  During code-review and testing I
      noticed that a bit of space was wasted when allocating tuple bufs in
      several places.  Thirdly, the debug memset()s in
      ReorderBufferGetTupleBuf() reduce the error checking valgrind can do.
      
      Backpatch: 9.4, like c8f621c4.
      b63bea5f
    • Tom Lane's avatar
      Make the upper part of the planner work by generating and comparing Paths. · 3fc6e2d7
      Tom Lane authored
      I've been saying we needed to do this for more than five years, and here it
      finally is.  This patch removes the ever-growing tangle of spaghetti logic
      that grouping_planner() used to use to try to identify the best plan for
      post-scan/join query steps.  Now, there is (nearly) independent
      consideration of each execution step, and entirely separate construction of
      Paths to represent each of the possible ways to do that step.  We choose
      the best Path or set of Paths using the same add_path() logic that's been
      used inside query_planner() for years.
      
      In addition, this patch removes the old restriction that subquery_planner()
      could return only a single Plan.  It now returns a RelOptInfo containing a
      set of Paths, just as query_planner() does, and the parent query level can
      use each of those Paths as the basis of a SubqueryScanPath at its level.
      This allows finding some optimizations that we missed before, wherein a
      subquery was capable of returning presorted data and thereby avoiding a
      sort in the parent level, making the overall cost cheaper even though
      delivering sorted output was not the cheapest plan for the subquery in
      isolation.  (A couple of regression test outputs change in consequence of
      that.  However, there is very little change in visible planner behavior
      overall, because the point of this patch is not to get immediate planning
      benefits but to create the infrastructure for future improvements.)
      
      There is a great deal left to do here.  This patch unblocks a lot of
      planner work that was basically impractical in the old code structure,
      such as allowing FDWs to implement remote aggregation, or rewriting
      plan_set_operations() to allow consideration of multiple implementation
      orders for set operations.  (The latter will likely require a full
      rewrite of plan_set_operations(); what I've done here is only to fix it
      to return Paths not Plans.)  I have also left unfinished some localized
      refactoring in createplan.c and planner.c, because it was not necessary
      to get this patch to a working state.
      
      Thanks to Robert Haas, David Rowley, and Amit Kapila for review.
      3fc6e2d7
    • Tom Lane's avatar
      Fix backwards test for Windows service-ness in pg_ctl. · b642e50a
      Tom Lane authored
      A thinko in a9676139 caused pg_ctl to get it exactly backwards when
      deciding whether to report problems to the Windows eventlog or to stderr.
      Per bug #14001 from Manuel Mathar, who also identified the fix.
      Like the previous patch, back-patch to all supported branches.
      b642e50a
    • Tom Lane's avatar
      Re-fix broken definition for function name in pgbench's exprscan.l. · 94f1adcc
      Tom Lane authored
      Wups, my first try wasn't quite right either.  Too focused on fixing
      the existing bug, not enough on not introducing new ones.
      94f1adcc
    • Tom Lane's avatar
      Fix broken definition for function name in pgbench's exprscan.l. · 3899caf7
      Tom Lane authored
      As written, this would accept e.g. 123e9 as a function name.  Aside
      from being mildly astonishing, that would come back to haunt us if
      we ever try to add float constants to the expression syntax.  Insist
      that function names start with letters (or at least non-digits).
      
      In passing reset yyline as well as yycol when starting a new expression.
      This variable is useless since it's used nowhere, but if we're going
      to have it we should have it act sanely.
      3899caf7
    • Andres Freund's avatar
      Fix wrong allocation size in c8f621c4. · fd45d16f
      Andres Freund authored
      In c8f621c4 I forgot to account for MAXALIGN when allocating a new
      tuplebuf in ReorderBufferGetTupleBuf(). That happens to currently not
      cause active problems on a number of platforms because the affected
      pointer is already aligned, but others, like ppc and hppa, trigger this
      in the regression test, due to a debug memset clearing memory.
      
      Fix that.
      
      Backpatch: 9.4, like the previous commit.
      fd45d16f
    • Tom Lane's avatar
      Fix not-terribly-safe coding in NIImportOOAffixes() and NIImportAffixes(). · b3e05097
      Tom Lane authored
      There were two places in spell.c that supposed that they could search
      for a location in a string produced by lowerstr() and then transpose
      the offset into the original string.  But this fails completely if
      lowerstr() transforms any characters into characters of different byte
      length, as can happen in Turkish UTF8 for instance.
      
      We'd added some comments about this coding in commit 51e78ab4,
      but failed to realize that it was not merely confusing but wrong.
      
      Coverity complained about this code years ago, but in such an opaque
      fashion that nobody understood what it was on about.  I'm not entirely
      sure that this issue *is* what it's on about, actually, but perhaps
      this patch will shut it up -- and in any case the problem is clear.
      
      Back-patch to all supported branches.
      b3e05097
  4. 06 Mar, 2016 5 commits
    • Tom Lane's avatar
      Fix unportable usage of <ctype.h> functions. · cb0ca0c9
      Tom Lane authored
      isdigit(), isspace(), etc are likely to give surprising results if passed a
      signed char.  We should always cast the argument to unsigned char to avoid
      that.  Error in commit d78a7d9c, found by buildfarm member gaur.
      cb0ca0c9
    • Magnus Hagander's avatar
      Fix typos · 2b46259b
      Magnus Hagander authored
      Author: Guillaume Lelarge
      2b46259b
    • Andres Freund's avatar
      logical decoding: Fix handling of large old tuples with replica identity full. · c8f621c4
      Andres Freund authored
      When decoding the old version of an UPDATE or DELETE change, and if that
      tuple was bigger than MaxHeapTupleSize, we either Assert'ed out, or
      failed in more subtle ways in non-assert builds.  Normally individual
      tuples aren't bigger than MaxHeapTupleSize, with big datums toasted.
      But that's not the case for the old version of a tuple for logical
      decoding; the replica identity is logged as one piece. With the default
      replica identity btree limits that to small tuples, but that's not the
      case for FULL.
      
      Change the tuple buffer infrastructure to separate allocate over-large
      tuples, instead of always going through the slab cache.
      
      This unfortunately requires changing the ReorderBufferTupleBuf
      definition, we need to store the allocated size someplace. To avoid
      requiring output plugins to recompile, don't store HeapTupleHeaderData
      directly after HeapTupleData, but point to it via t_data; that leaves
      rooms for the allocated size.  As there's no reason for an output plugin
      to look at ReorderBufferTupleBuf->t_data.header, remove the field. It
      was just a minor convenience having it directly accessible.
      
      Reported-By: Adam Dratwiński
      Discussion: CAKg6ypLd7773AOX4DiOGRwQk1TVOQKhNwjYiVjJnpq8Wo+i62Q@mail.gmail.com
      c8f621c4
    • Andres Freund's avatar
      logical decoding: old/newtuple in spooled UPDATE changes was switched around. · 0bda14d5
      Andres Freund authored
      Somehow I managed to flip the order of restoring old & new tuples when
      de-spooling a change in a large transaction from disk. This happens to
      only take effect when a change is spooled to disk which has old/new
      versions of the tuple. That only is the case for UPDATEs where he
      primary key changed or where replica identity is changed to FULL.
      
      The tests didn't catch this because either spooled updates, or updates
      that changed primary keys, were tested; not both at the same time.
      
      Found while adding tests for the following commit.
      
      Backpatch: 9.4, where logical decoding was added
      0bda14d5
    • Andres Freund's avatar
      logical decoding: Tell reorderbuffer about all xids. · d9e903f3
      Andres Freund authored
      Logical decoding's reorderbuffer keeps transactions in an LSN ordered
      list for efficiency. To make that's efficiently possible upper-level
      xids are forced to be logged before nested subtransaction xids.  That
      only works though if these records are all looked at: Unfortunately we
      didn't do so for e.g. row level locks, which are otherwise uninteresting
      for logical decoding.
      
      This could lead to errors like:
      "ERROR: subxact logged without previous toplevel record".
      
      It's not sufficient to just look at row locking records, the xid could
      appear first due to a lot of other types of records (which will trigger
      the transaction to be marked logged with MarkCurrentTransactionIdLoggedIfAny).
      So invent infrastructure to tell reorderbuffer about xids seen, when
      they'd otherwise not pass through reorderbuffer.c.
      
      Reported-By: Jarred Ward
      Bug: #13844
      Discussion: 20160105033249.1087.66040@wrigleys.postgresql.org
      Backpatch: 9.4, where logical decoding was added
      d9e903f3
  5. 05 Mar, 2016 1 commit
    • Joe Conway's avatar
      Expose control file data via SQL accessible functions. · dc7d70ea
      Joe Conway authored
      Add four new SQL accessible functions: pg_control_system(),
      pg_control_checkpoint(), pg_control_recovery(), and pg_control_init()
      which expose a subset of the control file data.
      
      Along the way move the code to read and validate the control file to
      src/common, where it can be shared by the new backend functions
      and the original pg_controldata frontend program.
      
      Patch by me, significant input, testing, and review by Michael Paquier.
      dc7d70ea