1. 05 Nov, 2016 4 commits
  2. 04 Nov, 2016 15 commits
    • Tom Lane's avatar
      Provide DLLEXPORT markers for C functions via PG_FUNCTION_INFO_V1 macro. · c8ead2a3
      Tom Lane authored
      Second try at the change originally made in commit 8518583c;
      this time with contrib updates so that manual extern declarations
      are also marked with PGDLLEXPORT.  The release notes should point
      this out as a significant source-code change for extension authors,
      since they'll have to make similar additions to avoid trouble on Windows.
      
      Laurenz Albe, doc change by me
      
      Patch: <A737B7A37273E048B164557ADEF4A58B53962ED8@ntex2010a.host.magwien.gv.at>
      c8ead2a3
    • Tom Lane's avatar
      Delete contrib/xml2's legacy implementation of xml_is_well_formed(). · 20540710
      Tom Lane authored
      This function is unreferenced in modern usage; it was superseded in 9.1
      by a core function of the same name.  It has been left in place in the C
      code only so that pre-9.1 SQL definitions of the contrib/xml2 functions
      would continue to work.  Six years seems like enough time for people to
      have updated to the extension-style version of the xml2 module, so let's
      drop this.
      
      The key reason for not keeping it any longer is that we want to stick
      an explicit PGDLLEXPORT into PG_FUNCTION_INFO_V1(), and the similarity
      of name to the core function creates a conflict that compilers will
      complain about.
      
      Extracted from a larger patch for that purpose.  I'm committing this
      change separately to give it more visibility in the commit logs.
      
      While at it, remove the documentation entry that claimed that
      xml_is_well_formed() is a function provided by contrib/xml2, and
      instead mention the even more ancient alias xml_valid().
      
      Laurenz Albe, doc change by me
      
      Patch: <A737B7A37273E048B164557ADEF4A58B53962ED8@ntex2010a.host.magwien.gv.at>
      20540710
    • Tom Lane's avatar
      Be more consistent about masking xl_info with ~XLR_INFO_MASK. · d5f6f13f
      Tom Lane authored
      Generally, WAL resource managers are only supposed to examine the
      top 4 bits of a WAL record's xl_info; the rest are reserved for
      the WAL mechanism itself.  A few places were not consistent about
      doing this with respect to XLOG_CHECKPOINT and XLOG_SWITCH records.
      There's no bug currently, since no additional bits ever get set in
      these specific record types, but that might not be true forever.
      Let's follow the generic coding rule here too.
      
      Michael Paquier
      d5f6f13f
    • Tom Lane's avatar
      Fix gin_leafpage_items(). · 367b99bb
      Tom Lane authored
      On closer inspection, commit 84ad68d6 broke gin_leafpage_items(),
      because the aligned copy of the page got palloc'd in a short-lived
      context whereas it needs to be in the SRF's multi_call_memory_ctx.
      This was not exposed by the regression test, because the regression
      test doesn't actually exercise the function in a meaningful way.
      Fix the code bug, and extend the test in what I hope is a portable
      fashion.
      367b99bb
    • Kevin Grittner's avatar
      Improve tab completion for CREATE TRIGGER. · 927d7bb6
      Kevin Grittner authored
      This includes support for the new REFERENCING clause.
      927d7bb6
    • Kevin Grittner's avatar
      Implement syntax for transition tables in AFTER triggers. · 8c48375e
      Kevin Grittner authored
      This is infrastructure for the complete SQL standard feature.  No
      support is included at this point for execution nodes or PLs.  The
      intent is to add that soon.
      
      As this patch leaves things, standard syntax can create tuplestores
      to contain old and/or new versions of rows affected by a statement.
      References to these tuplestores are in the TriggerData structure.
      C triggers can access the tuplestores directly, so they are usable,
      but they cannot yet be referenced within a SQL statement.
      8c48375e
    • Peter Eisentraut's avatar
      pg_xlogdump: Add NLS · 69d590ff
      Peter Eisentraut authored
      Reviewed-by: default avatarMichael Paquier <michael.paquier@gmail.com>
      69d590ff
    • Peter Eisentraut's avatar
      pg_test_timing: Add NLS · 59fa9d2d
      Peter Eisentraut authored
      Also straighten out use of time unit abbreviations a bit.
      Reviewed-by: default avatarMichael Paquier <michael.paquier@gmail.com>
      59fa9d2d
    • Peter Eisentraut's avatar
      pg_test_fsync: Add NLS · a39255d7
      Peter Eisentraut authored
      Reviewed-by: default avatarMichael Paquier <michael.paquier@gmail.com>
      a39255d7
    • Peter Eisentraut's avatar
      632fbe77
    • Peter Eisentraut's avatar
      pageinspect: Fix unaligned struct access in GIN functions · 84ad68d6
      Peter Eisentraut authored
      The raw page data that is passed into the functions will not be aligned
      at 8-byte boundaries.  Casting that to a struct and accessing int64
      fields will result in unaligned access.  On most platforms, you get away
      with it, but it will result on a crash on pickier platforms such as ia64
      and sparc64.
      84ad68d6
    • Robert Haas's avatar
      Add API to check if an existing exclusive lock allows cleanup. · f2e6a2cc
      Robert Haas authored
      LockBufferForCleanup() acquires a cleanup lock unconditionally, and
      ConditionalLockBufferForCleanup() acquires a cleanup lock if it is
      possible to do so without waiting; this patch adds a new API,
      IsBufferCleanupOK(), which tests whether an exclusive lock already
      held happens to be a cleanup lock.  This is possible because a cleanup
      lock simply means an exclusive lock plus the assurance any other pins
      on the buffer are newer than our own pin.  Therefore, just as the
      existing functions decide that the exclusive lock that they've just
      taken is a cleanup lock if they observe the pin count to be 1, this
      new function allows us to observe that the pin count is 1 on a buffer
      we've already locked.
      
      This is useful in situations where a backend definitely wishes to
      modify the buffer and also wishes to perform cleanup operations if
      possible.  The patch to eliminate heavyweight locking by hash indexes
      uses this, and it may have other applications as well.
      
      Amit Kapila, per a suggestion from me.  Some comment adjustments by me
      as well.
      f2e6a2cc
    • Robert Haas's avatar
      postgres_fdw: Fix typo in comment. · 7016e4c4
      Robert Haas authored
      Etsuro Fujita
      7016e4c4
    • Peter Eisentraut's avatar
      doc: Add index letter links to XSLT HTML build · 97f16b87
      Peter Eisentraut authored
      This matches what was already implemented in the DSSSL HTML build.
      97f16b87
    • Tom Lane's avatar
      Sync our copy of the timezone library with IANA tzcode master. · 1f87181e
      Tom Lane authored
      This patch absorbs some unreleased fixes for symlink manipulation bugs
      introduced in tzcode 2016g.  Ordinarily I'd wait around for a released
      version, but in this case it seems like we could do with extra testing,
      in particular checking whether it works in EDB's VMware build environment.
      This corresponds to commit aec59156abbf8472ba201b6c7ca2592f9c10e077 in
      https://github.com/eggert/tz.
      
      Per a report from Sandeep Thakkar, building in an environment where hard
      links are not supported in the timezone data installation directory failed,
      because upstream code refactoring had broken the case of symlinking from an
      existing symlink.  Further experimentation also showed that the symlinks
      were sometimes made incorrectly, with too many or too few "../"'s in the
      symlink contents.
      
      This should get back-patched, but first let's see what the buildfarm
      makes of it.  I'm not too sure about the new dependency on linkat(2).
      
      Report: <CANFyU94_p6mqRQc2i26PFp5QAOQGB++AjGX=FO8LDpXw0GSTjw@mail.gmail.com>
      Discussion: http://mm.icann.org/pipermail/tz/2016-November/024431.html
      1f87181e
  3. 03 Nov, 2016 4 commits
  4. 02 Nov, 2016 5 commits
    • Tom Lane's avatar
      Don't make FK-based selectivity estimates in inheritance situations. · 77067106
      Tom Lane authored
      The foreign-key-aware logic for estimation of join sizes (added in commit
      100340e2) blindly tried to apply the concept to rels that are actually
      parents of inheritance trees.  This is just plain wrong so far as the
      referenced relation is concerned, since the inheritance scan may well
      produce lots of rows that are not participating in the constraint.  It's
      wrong for the referencing relation too, for the same reason; although on
      that end we could conceivably detect whether all members of the inheritance
      tree have equivalent FK constraints pointing to the same referenced rel,
      and then proceed more or less as we do now.  But pending somebody writing
      code to do that, we must disable this, because it's producing completely
      silly estimates when there's an FK linking the heads of inheritance trees.
      
      Per bug #14404 from Clinton Adams.  Back-patch to 9.6 where the new
      estimation logic came in.
      
      Report: <20161028200412.15987.96482@wrigleys.postgresql.org>
      77067106
    • Tom Lane's avatar
      Don't convert Consts into Vars during setrefs.c processing. · da8f3ebf
      Tom Lane authored
      While converting expressions in an upper-level plan node so that they
      reference Vars and expressions provided by the input plan node(s),
      don't convert plain Const items, even if there happens to be a matching
      Const in the input.  It's silly to do so because a Var is more expensive to
      execute than a Const.  Moreover, converting can fool ExecCheckPlanOutput's
      check that an insert or update query inserts nulls into dropped columns,
      leading to "query provides a value for a dropped column" errors during
      INSERT or UPDATE on a table with a dropped column.  We could solve this
      by making that check more complicated, but I don't see the point; this fix
      should save a marginal number of cycles, and it also makes for less messy
      EXPLAIN output, as shown by the ensuing regression test result changes.
      
      Per report from Pavel Hanák.  I have not incorporated a test case based
      on that example, as there doesn't seem to be a simple way of checking
      this in isolation without making a bunch of assumptions about other
      planner and SQL-function behavior.
      
      Back-patch to 9.6.  This setrefs.c behavior exists much further back,
      but there is not currently reason to think that it causes problems
      before 9.6.
      
      Discussion: <83shraampf.fsf@is-it.eu>
      da8f3ebf
    • Peter Eisentraut's avatar
      pageinspect: Make page test more portable · 00a86856
      Peter Eisentraut authored
      Choose test data that makes the output independent of endianness.
      00a86856
    • Tom Lane's avatar
      Fix portability bug in gin_page_opaque_info(). · 14ee3579
      Tom Lane authored
      Somebody apparently thought that "if Int32GetDatum is good,
      Int64GetDatum must be better".  Per buildfarm failures now
      that Peter has added some regression tests here.
      14ee3579
    • Peter Eisentraut's avatar
      pageinspect: Make btree test more portable · f7c9a6e0
      Peter Eisentraut authored
      Choose test data that makes the output independent of endianness and
      alignment.
      f7c9a6e0
  5. 01 Nov, 2016 4 commits
  6. 31 Oct, 2016 1 commit
  7. 30 Oct, 2016 5 commits
    • Tatsuo Ishii's avatar
      Fix typo in sources.sgml. · 36d154ec
      Tatsuo Ishii authored
      Per Shinichi Matsuda.
      36d154ec
    • Tom Lane's avatar
      Fix nasty performance problem in tsquery_rewrite(). · 5ec81ace
      Tom Lane authored
      tsquery_rewrite() tries to find matches to subsets of AND/OR conditions;
      for example, in the query 'a | b | c' the substitution subquery 'a | c'
      should match and lead to replacement of the first and third items.
      That's fine, but the matching algorithm apparently takes about O(2^N)
      for an N-clause query (I say "apparently" because the code is also both
      unintelligible and uncommented).  We could probably do better than that
      even without any extra assumptions --- but actually, we know that the
      subclauses are sorted, indeed are depending on that elsewhere in this very
      same function.  So we can just scan the two lists a single time to detect
      matches, as though we were doing a merge join.
      
      Also do a re-flattening call (QTNTernary()) in tsquery_rewrite_query, just
      to make sure that the tree fits the expectations of the next search cycle.
      I didn't try to devise a test case for this, but I'm pretty sure that the
      oversight could have led to failure to match in some cases where a match
      would be expected.
      
      Improve comments, and also stick a CHECK_FOR_INTERRUPTS into
      dofindsubquery, just in case it's still too slow for somebody.
      
      Per report from Andreas Seltenreich.  Back-patch to all supported branches.
      
      Discussion: <8760oasf2y.fsf@credativ.de>
      5ec81ace
    • Tom Lane's avatar
      Fix bogus tree-flattening logic in QTNTernary(). · 24ebc444
      Tom Lane authored
      QTNTernary() contains logic to flatten, eg, '(a & b) & c' into 'a & b & c',
      which is all well and good, but it tries to do that to NOT nodes as well,
      so that '!!a' gets changed to '!a'.  Explicitly restrict the conversion to
      be done only on AND and OR nodes, and add a test case illustrating the bug.
      
      In passing, provide some comments for the sadly naked functions in
      tsquery_util.c, and simplify some baroque logic in QTNFree(), which
      I think may have been leaking some items it intended to free.
      
      Noted while investigating a complaint from Andreas Seltenreich.
      Back-patch to all supported versions.
      24ebc444
    • Tom Lane's avatar
      Improve speed of aggregates that use array_append as transition function. · 9a00f03e
      Tom Lane authored
      In the previous coding, if an aggregate's transition function returned an
      expanded array, nodeAgg.c and nodeWindowAgg.c would always copy it and thus
      force it into the flat representation.  This led to ping-ponging between
      flat and expanded formats, which costs a lot.  For an aggregate using
      array_append as transition function, I measured about a 15X slowdown
      compared to the pre-9.5 code, when working on simple int[] arrays.
      Of course, the old code was already O(N^2) in this usage due to copying
      flat arrays all the time, but it wasn't quite this inefficient.
      
      To fix, teach nodeAgg.c and nodeWindowAgg.c to allow expanded transition
      values without copying, so long as the transition function takes care to
      return the transition value already properly parented under the aggcontext.
      That puts a bit of extra responsibility on the transition function, but
      doing it this way allows us to not need any extra logic in the fast path
      of advance_transition_function (ie, with a pass-by-value transition value,
      or with a modified-in-place pass-by-reference value).  We already know
      that that's a hot spot so I'm loath to add any cycles at all there.  Also,
      while only array_append currently knows how to follow this convention,
      this solution allows other transition functions to opt-in without needing
      to have a whitelist in the core aggregation code.
      
      (The reason we would need a whitelist is that currently, if you pass a
      R/W expanded-object pointer to an arbitrary function, it's allowed to do
      anything with it including deleting it; that breaks the core agg code's
      assumption that it should free discarded values.  Returning a value under
      aggcontext is the transition function's signal that it knows it is an
      aggregate transition function and will play nice.  Possibly the API rules
      for expanded objects should be refined, but that would not be a
      back-patchable change.)
      
      With this fix, an aggregate using array_append is no longer O(N^2), so it's
      much faster than pre-9.5 code rather than much slower.  It's still a bit
      slower than the bespoke infrastructure for array_agg, but the differential
      seems to be only about 10%-20% rather than orders of magnitude.
      
      Discussion: <6315.1477677885@sss.pgh.pa.us>
      9a00f03e
    • Magnus Hagander's avatar
      Fix memory leak in tar file padding · a775406e
      Magnus Hagander authored
      Spotted by Coverity, patch by Michael Paquier
      a775406e
  8. 28 Oct, 2016 2 commits
    • Robert Haas's avatar
      pgstattuple: Don't take heavyweight locks when examining a hash index. · d4b5d4ca
      Robert Haas authored
      It's currently necessary to take a heavyweight lock when scanning a
      hash bucket, but pgstattuple only examines individual pages, so it
      doesn't need to do this.  If, for some hypothetical reason, it did
      need to do any heavyweight locking here, this logic would probably
      still be incorrect, because most of the locks that it is taking are
      meaningless.  Only a heavyweight lock on a primary bucket page has any
      meaning, but this takes heavyweight locks on all pages regardless of
      function - and in particular overflow pages, where you might imagine
      that we'd want to lock the primary bucket page if we needed to lock
      anything at all.
      
      This is arguably a bug that has existed since this code was added in
      commit dab42382, but I'm not going to
      bother back-patching it because in most cases the only consequence is
      that running pgstattuple() on a hash index is a little slower than it
      otherwise might be, which is no big deal.
      
      Extracted from a vastly larger patch by Amit Kapila which heavyweight
      locking for hash indexes entirely; analysis of why this can be done
      independently of the rest by me.
      d4b5d4ca
    • Robert Haas's avatar
      Fix leftover reference to background writer performing checkpoints. · 33839b5f
      Robert Haas authored
      This was changed in PostgreSQL 9.2, but somehow this comment never
      got updated.
      33839b5f