1. 23 Aug, 2016 8 commits
    • Tom Lane's avatar
      Create an SP-GiST opclass for inet/cidr. · 77e29068
      Tom Lane authored
      This seems to offer significantly better search performance than the
      existing GiST opclass for inet/cidr, at least on data with a wide mix
      of network mask lengths.  (That may suggest that the data splitting
      heuristics in the GiST opclass could be improved.)
      
      Emre Hasegeli, with mostly-cosmetic adjustments by me
      
      Discussion: <CAE2gYzxtth9qatW_OAqdOjykS0bxq7AYHLuyAQLPgT7H9ZU0Cw@mail.gmail.com>
      77e29068
    • Robert Haas's avatar
      Extend dsm API with a new function dsm_unpin_segment. · 0fda682e
      Robert Haas authored
      If you have previously pinned a segment and decide that you don't
      actually want to keep it around until shutdown, this new API lets you
      remove the pin.  This is pretty trivial except on Windows, where it
      requires closing the duplicate handle that was used to implement the
      pin.
      
      Thomas Munro and Amit Kapila, reviewed by Amit Kapila and by me.
      0fda682e
    • Robert Haas's avatar
      Remove duplicate function prototype. · 19998730
      Robert Haas authored
      Kyotaro Horiguchi
      19998730
    • Bruce Momjian's avatar
      doc: fix incorrect 'literal' tags · ff066481
      Bruce Momjian authored
      Discussion: dcc4113d-1eda-4f60-d1c5-f50eee160bad@gmail.com
      
      Author: Alexander Law <exclusion@gmail.com>
      
      Backpatch-through: 9.6
      ff066481
    • Tom Lane's avatar
      Improve SP-GiST opclass API to better support unlabeled nodes. · d2ddee63
      Tom Lane authored
      Previously, the spgSplitTuple action could only create a new upper tuple
      containing a single labeled node.  This made it useless for opclasses
      that prefer to work with fixed sets of nodes (labeled or otherwise),
      which meant that restrictive prefixes could not be used with such
      node definitions.  Change the output field set for the choose() method
      to allow it to specify any valid node set for the new upper tuple,
      and to specify which of these nodes to place the modified lower tuple in.
      
      In addition to its primary use for fixed node sets, this feature could
      allow existing opclasses that use variable node sets to skip a separate
      spgAddNode action when splitting a tuple, by setting up the node needed
      for the incoming value as part of the spgSplitTuple action.  However, care
      would have to be taken to add the extra node only when it would not make
      the tuple bigger than before.  (spgAddNode can enlarge the tuple,
      spgSplitTuple can't.)
      
      This is a prerequisite for an upcoming SP-GiST inet opclass, but is
      being committed separately to increase the visibility of the API change.
      
      In passing, improve the documentation about the traverse-values feature
      that was added by commit ccd6eb49.
      
      Emre Hasegeli, with cosmetic adjustments and documentation rework by me
      
      Discussion: <CAE2gYzxtth9qatW_OAqdOjykS0bxq7AYHLuyAQLPgT7H9ZU0Cw@mail.gmail.com>
      d2ddee63
    • Robert Haas's avatar
      Add txid_current_ifassigned(). · 86f31695
      Robert Haas authored
      Add a variant of txid_current() that returns NULL if no transaction ID
      is assigned.  This version can be used even on a standby server,
      although it will always return NULL since no transaction IDs can be
      assigned during recovery.
      
      Craig Ringer, per suggestion from Jim Nasby.  Reviewed by Petr Jelinek
      and by me.
      86f31695
    • Robert Haas's avatar
      Remove duplicate word from comment. · ff36700c
      Robert Haas authored
      Erik Rijkers
      ff36700c
    • Tom Lane's avatar
      Refactor some network.c code to create cidr_set_masklen_internal(). · 7b405b3e
      Tom Lane authored
      Merge several copies of "copy an inet value and adjust the mask length"
      code to create a single, conveniently C-callable function.  This function
      is exported for future use by inet SPGiST support, but it's good cleanup
      anyway since we had three slightly-different-for-no-good-reason copies.
      
      (Extracted from a larger patch, to separate new code from refactoring
      of old code)
      
      Emre Hasegeli
      7b405b3e
  2. 22 Aug, 2016 6 commits
  3. 20 Aug, 2016 2 commits
    • Tom Lane's avatar
      initdb now needs to reference libpq include files in MSVC builds. · 04164deb
      Tom Lane authored
      Fallout from commit a00c5831.  Per buildfarm.
      04164deb
    • Tom Lane's avatar
      Make initdb's suggested "pg_ctl start" command line more reliable. · a00c5831
      Tom Lane authored
      The original coding here was not nearly careful enough about quoting
      special characters, and it didn't get corner cases right for constructing
      the pg_ctl path either.  Use join_path_components() and appendShellString()
      to do it honestly, so that the string will more likely work if blindly
      copied-and-pasted.
      
      While at it, teach appendShellString() not to quote strings that clearly
      don't need it, so that the output from initdb doesn't become uglier than
      it was before in typical cases where quoting is not needed.
      
      Ryan Murphy, reviewed by Michael Paquier and myself
      
      Discussion: <CAHeEsBeAe1FeBypT3E8R1ZVZU0e8xv3A-7BHg6bEOi=jZny2Uw@mail.gmail.com>
      a00c5831
  4. 19 Aug, 2016 9 commits
    • Tom Lane's avatar
      Allow empty queries in pgbench. · 64710452
      Tom Lane authored
      This might have been too much of a foot-gun before 9.6, but with the
      new commands-end-at-semicolons parsing rule, the only way to get an
      empty query into a script is to explicitly write an extra ";".
      So we may as well allow the case.
      
      Fabien Coelho
      
      Patch: <alpine.DEB.2.20.1607090922170.3412@sto>
      64710452
    • Tom Lane's avatar
      Use LEFT JOINs in some system views in case referenced row doesn't exist. · 8299471c
      Tom Lane authored
      In particular, left join to pg_authid so that rows in pg_stat_activity
      don't disappear if the session's owning user has been dropped.
      Also convert a few joins to pg_database to left joins, in the same spirit,
      though that case might be harder to hit.  We were doing this in other
      views already, so it was a bit inconsistent that these views didn't.
      
      Oskari Saarenmaa, with some further tweaking by me
      
      Discussion: <56E87CD8.60007@ohmu.fi>
      8299471c
    • Tom Lane's avatar
      Guard against parallel-restricted functions in VALUES expressions. · 65a603e9
      Tom Lane authored
      Obvious brain fade in set_rel_consider_parallel().  Noticed it while
      adjusting the adjacent RTE_FUNCTION case.
      
      In 9.6, also make the code look more like what I just did in HEAD
      by removing the unnecessary function_rte_parallel_ok subroutine
      (it does nothing that expression_tree_walker wouldn't do).
      65a603e9
    • Tom Lane's avatar
      Speed up planner's scanning for parallel-query hazards. · da1c9163
      Tom Lane authored
      We need to scan the whole parse tree for parallel-unsafe functions.
      If there are none, we'll later need to determine whether particular
      subtrees contain any parallel-restricted functions.  The previous coding
      retained no knowledge from the first scan, even though this is very
      wasteful in the common case where the query contains only parallel-safe
      functions.  We can bypass all of the later scans by remembering that fact.
      This provides a small but measurable speed improvement when the case
      applies, and shouldn't cost anything when it doesn't.
      
      Patch by me, reviewed by Robert Haas
      
      Discussion: <3740.1471538387@sss.pgh.pa.us>
      da1c9163
    • Alvaro Herrera's avatar
      reorderbuffer: preserve errno while reporting error · 6f79ae7f
      Alvaro Herrera authored
      Clobbering errno during cleanup after an error is an oft-repeated, easy
      to make mistake.  Deal with it here as everywhere else, by saving it
      aside and restoring after cleanup, before ereport'ing.
      
      In passing, add a missing errcode declaration in another ereport() call
      in the same file, which I noticed while skimming the file looking for
      similar problems.
      
      Backpatch to 9.4, where this code was introduced.
      6f79ae7f
    • Tom Lane's avatar
      Clean up another pre-ANSI-C-ism in regex code: get rid of pcolor typedef. · a859e640
      Tom Lane authored
      pcolor was used to represent function arguments that are nominally of
      type color, but when using a pre-ANSI C compiler would be passed as the
      promoted integer type.  We really don't need that anymore.
      a859e640
    • Tom Lane's avatar
      Remove typedef celt from the regex library, along with macro NOCELT. · 6eefd242
      Tom Lane authored
      The regex library used to have a notion of a "collating element" that was
      distinct from a "character", but Henry Spencer never actually implemented
      his planned support for multi-character collating elements, and the Tcl
      crew ripped out most of the stubs for that years ago.  The only thing left
      that distinguished the "celt" typedef from the "chr" typedef was that
      "celt" was supposed to also be able to hold the not-a-character "NOCELT"
      value.  However, NOCELT was not used anywhere after the MCCE stub removal
      changes, which means there's no need for celt to be different from chr.
      Removing the separate typedef simplifies matters and also removes a trap
      for the unwary, in that celt is signed while chr may not be, so comparisons
      could mean different things.  There's no bug there today because we
      restrict CHR_MAX to be less than INT_MAX, but I think there may have been
      such bugs before we did that, and there could be again if anyone ever
      decides to fool with the range of chr.
      
      This patch also removes assorted unnecessary casts to "chr" of values
      that are already chrs.  Many of these seem to be leftover from days when
      the code was compatible with pre-ANSI C.
      6eefd242
    • Bruce Momjian's avatar
      doc: requirepeer is a way to avoid spoofing · 5285c5e8
      Bruce Momjian authored
      We already mentioned unix_socket_directories as an option.
      
      Reported-by: https://www.postgresql.org/message-id/45016837-6cf3-3136-f959-763d06a28076%402ndquadrant.com
      
      Backpatch-through: 9.6
      5285c5e8
    • Andres Freund's avatar
      Add alternative output for ON CONFLICT toast isolation test. · 9595383b
      Andres Freund authored
      On some buildfarm animals the isolationtest added in 07ef0351 failed, as
      the order in which processes are run after unlocking is not
      guaranteed. Add an alternative output for that.
      
      Discussion: <7969.1471484738@sss.pgh.pa.us>
      Backpatch: 9.6, like the test in the aforementioned commit
      9595383b
  5. 18 Aug, 2016 12 commits
    • Peter Eisentraut's avatar
      Remove obsolete replacement system() on darwin · 1d2e73a3
      Peter Eisentraut authored
      Per comment in the file, this was fixed around OS X 10.2.
      1d2e73a3
    • Tom Lane's avatar
      Update line count totals for psql help displays. · c5d4f40c
      Tom Lane authored
      As usual, we've been pretty awful about maintaining these counts.
      They're not all that critical, perhaps, but let's get them right
      at release time.  Also fix 9.5, which I notice is just as bad.
      It's probably wrong further back, but the lack of --help=foo
      options before 9.5 makes it too painful to count.
      c5d4f40c
    • Tom Lane's avatar
      In plpgsql, don't try to convert int2vector or oidvector to expanded array. · 5697522d
      Tom Lane authored
      These types are storage-compatible with real arrays, but they don't support
      toasting, so of course they can't support expansion either.
      
      Per bug #14289 from Michael Overmeyer.  Back-patch to 9.5 where expanded
      arrays were introduced.
      
      Report: <20160818174414.1529.37913@wrigleys.postgresql.org>
      5697522d
    • Peter Eisentraut's avatar
      doc: Speed up XSLT builds · e8306745
      Peter Eisentraut authored
      The upstream XSLT stylesheets use some very general XPath expressions in
      some places that end up being very slow.  We can optimize them with
      knowledge about the DocBook document structure and our particular use
      thereof.  For example, when counting preceding chapters to get a number
      for the current chapter, we only need to count preceding sibling
      nodes (more or less) instead of searching through the entire node tree
      for chapter elements.
      
      This change attacks the slowest pieces as identified by xsltproc
      --profile.  This makes the HTML build roughly 10 times faster, resulting
      in the new total build time being about the same as the old DSSSL-based
      build.  Some of the non-HTML build targets (especially FO) will also
      benefit a bit, but they have not been specifically analyzed.
      
      With this, also remove the pg.fast parameter, which was previously a
      hack to get the build to a manageable speed.
      
      Alexander Lakhin <a.lakhin@postgrespro.ru>, with some additional
      tweaking by me
      e8306745
    • Tom Lane's avatar
      Improve psql's tab completion for \l. · 8019b5a8
      Tom Lane authored
      Offer a list of database names; formerly no help was offered.
      
      Ian Barwick, reviewed by Gerdan Santos
      
      Patch: <5724132E.1030804@2ndquadrant.com>
      8019b5a8
    • Tom Lane's avatar
      Improve psql's tab completion for ALTER EXTENSION foo UPDATE ... · 49917dbd
      Tom Lane authored
      Offer a list of available versions for that extension.  Formerly, since
      there was no special support for this, it triggered off the UPDATE
      keyword and offered a list of table names --- not too helpful.
      
      Jeff Janes, reviewed by Gerdan Santos
      
      Patch: <CAMkU=1z0gxEOLg2BWa69P4X4Ot8xBxipGUiGkXe_tC+raj79-Q@mail.gmail.com>
      49917dbd
    • Tom Lane's avatar
      Support the new regexp_match() function for citext. · f9d747a4
      Tom Lane authored
      Emre Hasegeli
      
      Patch: <CAE2gYzzF24ZHWqkMukkHwqa0otbES9Rex22LrjQUNbi=oKziNQ@mail.gmail.com>
      f9d747a4
    • Peter Eisentraut's avatar
      Improve formatting of comments in plpgsql.h · 9f31e45a
      Peter Eisentraut authored
      This file had some unusual comment layout.  Most of the comments
      introducing structs ended up to the right of the screen and following
      the start of the struct.  Some comments for struct members ended up
      after the member definition.
      
      Fix that by moving comments consistently before what they are
      describing.  Also add missing struct tags where missing so that it is
      easier to tell what the struct is.
      9f31e45a
    • Heikki Linnakangas's avatar
      Refactor RandomSalt to handle salts of different lengths. · fa878703
      Heikki Linnakangas authored
      All we need is 4 bytes at the moment, for MD5 authentication. But in
      upcomint patches for SCRAM authentication, SCRAM will need a salt of
      different length. It's less scary for the caller to pass the buffer
      length anyway, than assume a certain-sized output buffer.
      
      Author: Michael Paquier
      Discussion: <CAB7nPqQvO4sxLFeS9D+NM3wpy08ieZdAj_6e117MQHZAfxBFsg@mail.gmail.com>
      fa878703
    • Magnus Hagander's avatar
      Update Windows timezone mapping from Windows 7 and 10 · a79a6856
      Magnus Hagander authored
      This adds a couple of new timezones that are present in the newer
      versions of Windows. It also updates comments to reference UTC rather
      than GMT, as this change has been made in Windows.
      
      Michael Paquier
      a79a6856
    • Heikki Linnakangas's avatar
      Refactor sendAuthRequest. · 8d3b9cce
      Heikki Linnakangas authored
      This way sendAuthRequest doesn't need to know the details of all the
      different authentication methods. This is in preparation for adding SCRAM
      authentication, which will add yet another authentication request message
      type, with different payload.
      
      Reviewed-By: Michael Paquier
      Discussion: <CAB7nPqQvO4sxLFeS9D+NM3wpy08ieZdAj_6e117MQHZAfxBFsg@mail.gmail.com>
      8d3b9cce
    • Andres Freund's avatar
      Fix deletion of speculatively inserted TOAST on conflict · 07ef0351
      Andres Freund authored
      INSERT ..  ON CONFLICT runs a pre-check of the possible conflicting
      constraints before performing the actual speculative insertion.  In case
      the inserted tuple included TOASTed columns the ON CONFLICT condition
      would be handled correctly in case the conflict was caught by the
      pre-check, but if two transactions entered the speculative insertion
      phase at the same time, one would have to re-try, and the code for
      aborting a speculative insertion did not handle deleting the
      speculatively inserted TOAST datums correctly.
      
      TOAST deletion would fail with "ERROR: attempted to delete invisible
      tuple" as we attempted to remove the TOAST tuples using
      simple_heap_delete which reasoned that the given tuples should not be
      visible to the command that wrote them.
      
      This commit updates the heap_abort_speculative() function which aborts
      the conflicting tuple to use itself, via toast_delete, for deleting
      associated TOAST datums.  Like before, the inserted toast rows are not
      marked as being speculative.
      
      This commit also adds a isolationtester spec test, exercising the
      relevant code path. Unfortunately 9.5 cannot handle two waiting
      sessions, and thus cannot execute this test.
      
      Reported-By: Viren Negi, Oskari Saarenmaa
      Author: Oskari Saarenmaa, edited a bit by me
      Bug: #14150
      Discussion: <20160519123338.12513.20271@wrigleys.postgresql.org>
      Backpatch: 9.5, where ON CONFLICT was introduced
      07ef0351
  6. 17 Aug, 2016 3 commits
    • Tom Lane's avatar
      Implement regexp_match(), a simplified alternative to regexp_matches(). · cf9b0fea
      Tom Lane authored
      regexp_match() is like regexp_matches(), but it disallows the 'g' flag
      and in consequence does not need to return a set.  Instead, it returns
      a simple text array value, or NULL if there's no match.  Previously people
      usually got that behavior with a sub-select, but this way is considerably
      more efficient.
      
      Documentation adjusted so that regexp_match() is presented first and then
      regexp_matches() is introduced as a more complicated version.  This is
      a bit historically revisionist but seems pedagogically better.
      
      Still TODO: extend contrib/citext to support this function.
      
      Emre Hasegeli, reviewed by David Johnston
      
      Discussion: <CAE2gYzy42sna2ME_e3y1KLQ-4UBrB-eVF0SWn8QG39sQSeVhEw@mail.gmail.com>
      cf9b0fea
    • Andres Freund's avatar
      Properly re-initialize replication slot shared memory upon creation. · 2d7e5910
      Andres Freund authored
      Slot creation did not clear all fields upon creation. After start the
      memory is zeroed, but when a physical replication slot was created in
      the shared memory of a previously existing logical slot, catalog_xmin
      would not be cleared. That in turn would prevent vacuum from doing its
      duties.
      
      To fix initialize all the fields. To make similar future bugs less
      likely, zero all of ReplicationSlotPersistentData, and re-order the
      rest of the initialization to be in struct member order.
      
      Analysis: Andrew Gierth
      Reported-By: md@chewy.com
      Author: Michael Paquier
      Discussion: <20160705173502.1398.70934@wrigleys.postgresql.org>
      Backpatch: 9.4, where replication slots were introduced
      2d7e5910
    • Tom Lane's avatar
      Fix -e option in contrib/intarray/bench/bench.pl. · 6657acc0
      Tom Lane authored
      As implemented, -e ran an EXPLAIN but then discarded the output, which
      certainly seems pointless.  Make it print to stdout instead.  It's been
      like that forever, so back-patch to all supported branches.
      
      Daniel Gustafsson, reviewed by Andreas Scherbaum
      
      Patch: <B97BDCB7-A3B3-4734-90B5-EDD586941629@yesql.se>
      6657acc0