1. 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
  2. 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
  3. 17 Aug, 2016 7 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
    • Tom Lane's avatar
      Improve plpgsql's memory management to fix some function-lifespan leaks. · bfaaacc8
      Tom Lane authored
      In some cases, exiting out of a plpgsql statement due to an error, then
      catching the error in a surrounding exception block, led to leakage of
      temporary data the statement was working with, because we kept all such
      data in the function-lifespan SPI Proc context.  Iterating such behavior
      many times within one function call thus led to noticeable memory bloat.
      
      To fix, create an additional memory context meant to have statement
      lifespan.  Since many plpgsql statements, particularly the simpler/more
      common ones, don't need this, create it only on demand.  Reset this context
      at the end of any statement that uses it, and arrange for exception cleanup
      to reset it too, thereby fixing the memory-leak issue.  Allow a stack of
      such contexts to exist to handle cases where a compound statement needs
      statement-lifespan data that persists across calls of inner statements.
      
      While at it, clean up code and improve comments referring to the existing
      short-term memory context, which by plpgsql convention is the per-tuple
      context of the eval_econtext ExprContext.  We now uniformly refer to that
      as the eval_mcontext, whereas the new statement-lifespan memory contexts
      are called stmt_mcontext.
      
      This change adds some context-creation overhead, but on the other hand
      it allows removal of some retail pfree's in favor of context resets.
      On balance it seems to be about a wash performance-wise.
      
      In principle this is a bug fix, but it seems too invasive for a back-patch,
      and the infrequency of complaints weighs against taking the risk in the
      back branches.  So we'll fix it only in HEAD, at least for now.
      
      Tom Lane, reviewed by Pavel Stehule
      
      Discussion: <17863.1469142152@sss.pgh.pa.us>
      bfaaacc8
    • Magnus Hagander's avatar
      Disable update_process_title by default on Windows · 09215546
      Magnus Hagander authored
      The performance overhead of this can be significant on Windows, and most
      people don't have the tools to view it anyway as Windows does not have
      native support for process titles.
      
      Discussion: <0A3221C70F24FB45833433255569204D1F5BE3E8@G01JPEXMBYT05>
      
      Takayuki Tsunakawa
      09215546
    • Bruce Momjian's avatar
      docs: my third pass over the 9.6 release notes · d125d257
      Bruce Momjian authored
      Backpatch-through: 9.6
      d125d257
    • Tom Lane's avatar
      Improve parsetree representation of special functions such as CURRENT_DATE. · 0bb51aa9
      Tom Lane authored
      We implement a dozen or so parameterless functions that the SQL standard
      defines special syntax for.  Up to now, that was done by converting them
      into more or less ad-hoc constructs such as "'now'::text::date".  That's
      messy for multiple reasons: it exposes what should be implementation
      details to users, and performance is worse than it needs to be in several
      cases.  To improve matters, invent a new expression node type
      SQLValueFunction that can represent any of these parameterless functions.
      
      Bump catversion because this changes stored parsetrees for rules.
      
      Discussion: <30058.1463091294@sss.pgh.pa.us>
      0bb51aa9
  4. 16 Aug, 2016 9 commits
    • Tom Lane's avatar
      Suppress -Wunused-result warning for strtol(). · 4bc4cfe3
      Tom Lane authored
      I'm not sure which bozo thought it's a problem to use strtol() only
      for its endptr result, but silence the warning using same method
      used elsewhere.
      
      Report: <f845d3a6-5328-3e2a-924f-f8e91aa2b6d2@2ndquadrant.com>
      4bc4cfe3
    • Tom Lane's avatar
      Fix assorted places in psql to print version numbers >= 10 in new style. · 7f61fd10
      Tom Lane authored
      This is somewhat cosmetic, since as long as you know what you are looking
      at, "10.0" is a serviceable substitute for "10".  But there is a potential
      for confusion between version numbers with minor numbers and those without
      --- we don't want people asking "why is psql saying 10.0 when my server is
      10.2".  Therefore, back-patch as far as practical, which turns out to be
      9.3.  I could have redone the patch to use fprintf(stderr) in place of
      psql_error(), but it seems more work than is warranted for branches that
      will be EOL or nearly so by the time v10 comes out.
      
      Although only psql seems to contain any code that needs this, I chose
      to put the support function into fe_utils, since it seems likely we'll
      need it in other client programs in future.  (In 9.3-9.5, use dumputils.c,
      the predecessor of fe_utils/string_utils.c.)
      
      In HEAD, also fix the backend code that whines about loadable-library
      version mismatch.  I don't see much need to back-patch that.
      7f61fd10
    • Peter Eisentraut's avatar
      doc: Remove some confusion from pg_archivecleanup doc · 63916664
      Peter Eisentraut authored
      From: Jeff Janes <jeff.janes@gmail.com>
      63916664
    • Peter Eisentraut's avatar
      Fix typos · f0fe1c8f
      Peter Eisentraut authored
      From: Alexander Law <exclusion@gmail.com>
      f0fe1c8f
    • Tom Lane's avatar
      Automate the maintenance of SO_MINOR_VERSION for our shared libraries. · a3bce17e
      Tom Lane authored
      Up to now we've manually adjusted these numbers in several different
      Makefiles at the start of each development cycle.  While that's not
      much work, it's easily forgotten, so let's get rid of it by setting
      the SO_MINOR_VERSION values directly from $(MAJORVERSION).
      
      In the case of libpq, this dev cycle's value of SO_MINOR_VERSION happens
      to be "10" anyway, so this switch is transparent.  For ecpg's shared
      libraries, this will result in skipping one or two minor version numbers
      between v9.6 and v10, which seems like no big problem; and it was a bit
      inconsistent that they didn't have equal minor version numbers anyway.
      
      Discussion: <21969.1471287988@sss.pgh.pa.us>
      a3bce17e
    • Robert Haas's avatar
      Fix possible crash due to incorrect allocation context. · 41fb35fa
      Robert Haas authored
      Commit af330393 aimed to reduce
      leakage from tqueue.c, which is good.  Unfortunately, by changing the
      memory context in which all of gather_readnext() executes, it also
      changed the context in which ExecShutdownGatherWorkers executes, which
      is not good, because that function eventually causes a call to
      ExecParallelRetrieveInstrumentation, which proceeds to allocate
      planstate->worker_instrument in a short-lived context, causing a
      crash.
      
      Rushabh Lathia, reviewed by Amit Kapila and by me.
      41fb35fa
    • Tom Lane's avatar
      Remove separate version numbering for ecpg preprocessor. · a7b5573d
      Tom Lane authored
      Once upon a time, it made sense for the ecpg preprocessor to have its
      own version number, because it used a manually-maintained grammar that
      wasn't always in sync with the core grammar.  But those days are
      thankfully long gone, leaving only a maintenance nuisance behind.
      Let's use the PG v10 version numbering changeover as an excuse to get
      rid of the ecpg version number and just have ecpg identify itself by
      PG_VERSION.  From the user's standpoint, ecpg will go from "4.12" in
      the 9.6 branch to "10" in the 10 branch, so there's no failure of
      monotonicity.
      
      Discussion: <1471332659.4410.67.camel@postgresql.org>
      a7b5573d
    • Tom Lane's avatar
      Doc: copy-editing in create_access_method.sgml. · 9b002cc9
      Tom Lane authored
      Improve shaky English grammar.  And markup.
      9b002cc9
    • Tom Lane's avatar
      Doc: remove out-of-date claim that pg_am rows must be inserted by hand. · 8fc571b7
      Tom Lane authored
      Commit 473b9328 added a sentence about that, but neglected to remove
      the adjacent sentence it had falsified.  Per Alexander Law.
      8fc571b7
  5. 15 Aug, 2016 3 commits