1. 12 Nov, 2015 1 commit
    • Tom Lane's avatar
      Do a round of copy-editing on the 9.5 release notes. · 39b9978d
      Tom Lane authored
      Also fill in the previously empty "major enhancements" list.  YMMV as to
      which items should make the cut, but it's past time we had something more
      than a placeholder here.
      
      (I meant to get this done before beta2 was wrapped, but got distracted by
      PDF build problems.  Better late than never.)
      39b9978d
  2. 11 Nov, 2015 6 commits
    • Tom Lane's avatar
      Improve documentation around autovacuum-related storage parameters. · 6404751c
      Tom Lane authored
      These were discussed in three different sections of the manual, which
      unsurprisingly had diverged over time; and the descriptions of individual
      variables lacked stylistic consistency even within each section (and
      frequently weren't in very good English anyway).  Clean up the mess, and
      remove some of the redundant information in hopes that future additions
      will be less likely to re-introduce inconsistency.  For instance I see
      no need for maintenance.sgml to include its very own list of all the
      autovacuum storage parameters, especially since that list was already
      incomplete.
      6404751c
    • Tom Lane's avatar
      Be more noisy about "wrong number of nailed relations" initfile problems. · da3751c8
      Tom Lane authored
      In commit 5d1ff6bd I added some logic to
      relcache.c to try to ensure that the regression tests would fail if we
      made a mistake about which relations belong in the relcache init files.
      I'm quite sure I tested that, but I must have done so only for the
      non-shared-catalog case, because a report from Adam Brightwell showed that
      the regression tests still pass just fine if we bollix the shared-catalog
      init file in the way this code was supposed to catch.  The reason is that
      that file gets loaded before we do client authentication, so the WARNING
      is not sent to the client, only to the postmaster log, where it's far too
      easily missed.
      
      The least Rube Goldbergian answer to this is to put an Assert(false)
      after the elog(WARNING).  That will certainly get developers' attention,
      while not breaking production builds' ability to recover from corner
      cases with similar symptoms.
      
      Since this is only of interest to developers, there seems no need for
      a back-patch, even though the previous commit went into all branches.
      da3751c8
    • Robert Haas's avatar
      Generate parallel sequential scan plans in simple cases. · 80558c1f
      Robert Haas authored
      Add a new flag, consider_parallel, to each RelOptInfo, indicating
      whether a plan for that relation could conceivably be run inside of
      a parallel worker.  Right now, we're pretty conservative: for example,
      it might be possible to defer applying a parallel-restricted qual
      in a worker, and later do it in the leader, but right now we just
      don't try to parallelize access to that relation.  That's probably
      the right decision in most cases, anyway.
      
      Using the new flag, generate parallel sequential scan plans for plain
      baserels, meaning that we now have parallel sequential scan in
      PostgreSQL.  The logic here is pretty unsophisticated right now: the
      costing model probably isn't right in detail, and we can't push joins
      beneath Gather nodes, so the number of plans that can actually benefit
      from this is pretty limited right now.  Lots more work is needed.
      Nevertheless, it seems time to enable this functionality so that all
      this code can actually be tested easily by users and developers.
      
      Note that, if you wish to test this functionality, it will be
      necessary to set max_parallel_degree to a value greater than the
      default of 0.  Once a few more loose ends have been tidied up here, we
      might want to consider changing the default value of this GUC, but
      I'm leaving it alone for now.
      
      Along the way, fix a bug in cost_gather: the previous coding thought
      that a Gather node's transfer overhead should be costed on the basis of
      the relation size rather than the number of tuples that actually need
      to be passed off to the leader.
      
      Patch by me, reviewed in earlier versions by Amit Kapila.
      80558c1f
    • Robert Haas's avatar
      Make sequential scans parallel-aware. · f0661c4e
      Robert Haas authored
      In addition, this path fills in a number of missing bits and pieces in
      the parallel infrastructure.  Paths and plans now have a parallel_aware
      flag indicating whether whatever parallel-aware logic they have should
      be engaged.  It is believed that we will need this flag for a number of
      path/plan types, not just sequential scans, which is why the flag is
      generic rather than part of the SeqScan structures specifically.
      Also, execParallel.c now gives parallel nodes a chance to initialize
      their PlanState nodes from the DSM during parallel worker startup.
      
      Amit Kapila, with a fair amount of adjustment by me.  Review of previous
      patch versions by Haribabu Kommi and others.
      f0661c4e
    • Robert Haas's avatar
      Add outfuncs.c support for GatherPath. · f764ecd8
      Robert Haas authored
      I dunno how commit 3bd909b2 missed
      this, but it evidently did.
      f764ecd8
    • Tom Lane's avatar
      Docs: fix misleading example. · 7b6fb763
      Tom Lane authored
      Commit 8457d0be introduced an example which, while not incorrect,
      failed to exhibit the behavior it meant to describe, as a result of omitting
      an E'' prefix that needed to be there.  Noticed and fixed by Peter Geoghegan.
      
      I (tgl) failed to resist the temptation to wordsmith nearby text a bit
      while at it.
      7b6fb763
  3. 10 Nov, 2015 2 commits
    • Tom Lane's avatar
      Add missing "static" qualifier. · b05ae27e
      Tom Lane authored
      Per buildfarm member pademelon.
      b05ae27e
    • Tom Lane's avatar
      Improve our workaround for 'TeX capacity exceeded' in building PDF files. · 944b41fc
      Tom Lane authored
      In commit a5ec86a7 I wrote a quick hack
      that reduced the number of TeX string pool entries created while converting
      our documentation to PDF form.  That held the fort for awhile, but as of
      HEAD we're back up against the same limitation.  It turns out that the
      original coding of \FlowObjectSetup actually results in *three* string pool
      entries being generated for every "flow object" (that is, potential
      cross-reference target) in the documentation, and my previous hack only got
      rid of one of them.  With a little more care, we can reduce the string
      count to one per flow object plus one per actually-cross-referenced flow
      object (about 115000 + 5000 as of current HEAD); that should work until
      the documentation volume roughly doubles from where it is today.
      
      As a not-incidental side benefit, this change also causes pdfjadetex to
      stop emitting unreferenced hyperlink anchors (bookmarks) into the PDF file.
      It had been making one willy-nilly for every flow object; now it's just one
      per actually-cross-referenced object.  This results in close to a 2X
      savings in PDF file size.  We will still want to run the output through
      "jpdftweak" to get it to be compressed; but we no longer need removal of
      unreferenced bookmarks, so we might be able to find a quicker tool for
      that step.
      
      Although the failure only affects HEAD and US-format output at the moment,
      9.5 cannot be more than a few pages short of failing likewise, so it
      will inevitably fail after a few rounds of minor-version release notes.
      I don't have a lot of faith that we'll never hit the limit in the older
      branches; and anyway it would be nice to get rid of jpdftweak across the
      board.  Therefore, back-patch to all supported branches.
      944b41fc
  4. 09 Nov, 2015 4 commits
  5. 08 Nov, 2015 3 commits
    • Andres Freund's avatar
      Set replication origin when decoding commit records. · f3a764b0
      Andres Freund authored
      By accident the replication origin was not set properly in
      DecodeCommit(). That's bad because the origin is passed to the output
      plugins origin filter, and accessible from the output plugin via
      ReorderBufferTXN->origin_id.  Accessing the origin of individual changes
      worked before the fix, which is why this wasn't notices earlier.
      
      Reported-By: Craig Ringer
      Author: Craig Ringer
      Discussion: CAMsr+YFhBJLp=qfSz3-J+0P1zLkE8zNXM2otycn20QRMx380gw@mail.gmail.com
      Backpatch: 9.5, where replication origins where introduced
      f3a764b0
    • Noah Misch's avatar
      Don't connect() to a wildcard address in test_postmaster_connection(). · fed19f31
      Noah Misch authored
      At least OpenBSD, NetBSD, and Windows don't support it.  This repairs
      pg_ctl for listen_addresses='0.0.0.0' and listen_addresses='::'.  Since
      pg_ctl prefers to test a Unix-domain socket, Windows users are most
      likely to need this change.  Back-patch to 9.1 (all supported versions).
      This could change pg_ctl interaction with loopback-interface firewall
      rules.  Therefore, in 9.4 and earlier (released branches), activate the
      change only on known-affected platforms.
      
      Reported (bug #13611) and designed by Kondo Yuta.
      fed19f31
    • Robert Haas's avatar
      Remove set-but-not-used variables. · fba60e57
      Robert Haas authored
      Reported by both Peter Eisentraunt and Kevin Grittner.
      fba60e57
  6. 07 Nov, 2015 6 commits
    • Tom Lane's avatar
      Update 9.5 release notes through today. · ad9fad7b
      Tom Lane authored
      ad9fad7b
    • Tom Lane's avatar
      Add "xid <> xid" and "xid <> int4" operators. · c5e86ea9
      Tom Lane authored
      The corresponding "=" operators have been there a long time, and not
      having their negators is a bit of a nuisance.
      
      Michael Paquier
      c5e86ea9
    • Tom Lane's avatar
      Rename PQsslAttributes() to PQsslAttributeNames(), and const-ify fully. · 9042f583
      Tom Lane authored
      Per discussion, the original name was a bit misleading, and
      PQsslAttributeNames() seems more apropos.  It's not quite too late to
      change this in 9.5, so let's change it while we can.
      
      Also, make sure that the pointer array is const, not only the pointed-to
      strings.
      
      Minor documentation wordsmithing while at it.
      
      Lars Kanis, slight adjustments by me
      9042f583
    • Tom Lane's avatar
      Fix enforcement of restrictions inside regexp lookaround constraints. · a43b4ab1
      Tom Lane authored
      Lookahead and lookbehind constraints aren't allowed to contain backrefs,
      and parentheses within them are always considered non-capturing.  Or so
      says the manual.  But the regexp parser forgot about these rules once
      inside a parenthesized subexpression, so that constructs like (\w)(?=(\1))
      were accepted (but then not correctly executed --- a case like this acted
      like (\w)(?=\w), without any enforcement that the two \w's match the same
      text).  And in (?=((foo))) the innermost parentheses would be counted as
      capturing parentheses, though no text would ever be captured for them.
      
      To fix, properly pass down the "type" argument to the recursive invocation
      of parse().
      
      Back-patch to all supported branches; it was agreed that silent
      misexecution of such patterns is worse than throwing an error, even though
      new errors in minor releases are generally not desirable.
      a43b4ab1
    • Robert Haas's avatar
      Try to convince gcc that TupleQueueRemap never falls off the end. · 8d7396e5
      Robert Haas authored
      Without this, MacOS gcc version 4.2.1 isn't convinced.
      8d7396e5
    • Robert Haas's avatar
      When completing ALTER INDEX .. SET, add an equals sign also. · af9773cf
      Robert Haas authored
      Jeff Janes
      af9773cf
  7. 06 Nov, 2015 6 commits
    • Robert Haas's avatar
      Modify tqueue infrastructure to support transient record types. · 6e71dd7c
      Robert Haas authored
      Commit 4a4e6893, which introduced this
      mechanism, failed to account for the fact that the RECORD pseudo-type
      uses transient typmods that are only meaningful within a single
      backend.  Transferring such tuples without modification between two
      cooperating backends does not work.  This commit installs a system
      for passing the tuple descriptors over the same shm_mq being used to
      send the tuples themselves.  The two sides might not assign the same
      transient typmod to any given tuple descriptor, so we must also
      substitute the appropriate receiver-side typmod for the one used by
      the sender.  That adds some CPU overhead, but still seems better than
      being unable to pass records between cooperating parallel processes.
      
      Along the way, move the logic for handling multiple tuple queues from
      tqueue.c to nodeGather.c; tqueue.c now provides a TupleQueueReader,
      which reads from a single queue, rather than a TupleQueueFunnel, which
      potentially reads from multiple queues.  This change was suggested
      previously as a way to make sure that nodeGather.c rather than tqueue.c
      had policy control over the order in which to read from queues, but
      it wasn't clear to me until now how good an idea it was.  typmod
      mapping needs to be performed separately for each queue, and it is
      much simpler if the tqueue.c code handles that and leaves multiplexing
      multiple queues to higher layers of the stack.
      6e71dd7c
    • Robert Haas's avatar
      Remove unnecessary cast in previous commit. · cbb82e37
      Robert Haas authored
      Noted by Kyotaro Horiguchi, who also reviewed the previous patch, but
      I failed to notice his review before committing.
      cbb82e37
    • Robert Haas's avatar
      Add sort support routine for the UUID data type. · a76ef15d
      Robert Haas authored
      This introduces a simple encoding scheme to produce abbreviated keys:
      pack as many bytes of each UUID as will fit into a Datum.  On
      little-endian machines, a byteswap is also performed; the abbreviated
      comparator can therefore just consist of a simple 3-way unsigned integer
      comparison.
      
      The purpose of this change is to speed up sorting data on a column
      of type UUID.
      
      Peter Geoghegan
      a76ef15d
    • Stephen Frost's avatar
      Set include_realm=1 default in parse_hba_line · 5644419b
      Stephen Frost authored
      With include_realm=1 being set down in parse_hba_auth_opt, if multiple
      options are passed on the pg_hba line, such as:
      
      host all     all    0.0.0.0/0    gss include_realm=0 krb_realm=XYZ.COM
      
      We would mistakenly reset include_realm back to 1.  Instead, we need to
      set include_realm=1 up in parse_hba_line, prior to parsing any of the
      additional options.
      
      Discovered by Jeff McCormick during testing.
      
      Bug introduced by 9a088417.
      
      Back-patch to 9.5
      5644419b
    • Robert Haas's avatar
      pg_size_pretty: Format negative values similar to positive ones. · 8a1fab36
      Robert Haas authored
      Previously, negative values were always displayed in bytes, regardless
      of how large they were.
      
      Adrian Vondendriesch, reviewed by Julien Rouhaud and myself
      8a1fab36
    • Robert Haas's avatar
      Document interaction of bgworkers with LISTEN/NOTIFY. · dde5f09f
      Robert Haas authored
      Thomas Munro and Robert Haas, reviewed by Haribabu Kommi
      dde5f09f
  8. 05 Nov, 2015 5 commits
    • Tom Lane's avatar
      Fix erroneous hash calculations in gin_extract_jsonb_path(). · b23af458
      Tom Lane authored
      The jsonb_path_ops code calculated hash values inconsistently in some cases
      involving nested arrays and objects.  This would result in queries possibly
      not finding entries that they should find, when using a jsonb_path_ops GIN
      index for the search.  The problem cases involve JSONB values that contain
      both scalars and sub-objects at the same nesting level, for example an
      array containing both scalars and sub-arrays.  To fix, reset the current
      stack->hash after processing each value or sub-object, not before; and
      don't try to be cute about the outermost level's initial hash.
      
      Correcting this means that existing jsonb_path_ops indexes may now be
      inconsistent with the new hash calculation code.  The symptom is the same
      --- searches not finding entries they should find --- but the specific
      rows affected are likely to be different.  Users will need to REINDEX
      jsonb_path_ops indexes to make sure that all searches work as expected.
      
      Per bug #13756 from Daniel Cheng.  Back-patch to 9.4 where the faulty
      logic was introduced.
      b23af458
    • Tom Lane's avatar
      Fix memory leaks in PL/Python. · 8c75ad43
      Tom Lane authored
      Previously, plpython was in the habit of allocating a lot of stuff in
      TopMemoryContext, and it was very slipshod about making sure that stuff
      got cleaned up; in particular, use of TopMemoryContext as fn_mcxt for
      function calls represents an unfixable leak, since we generally don't
      know what the called function might have allocated in fn_mcxt.  This
      results in session-lifespan leakage in certain usage scenarios, as for
      example in a case reported by Ed Behn back in July.
      
      To fix, get rid of all the retail allocations in TopMemoryContext.
      All long-lived allocations are now made in sub-contexts that are
      associated with specific objects (either pl/python procedures, or
      Python-visible objects such as cursors and plans).  We can clean these
      up when the associated object is deleted.
      
      I went so far as to get rid of PLy_malloc completely.  There were a
      couple of places where it could still have been used safely, but on
      the whole it was just an invitation to bad coding.
      
      Haribabu Kommi, based on a draft patch by Heikki Linnakangas;
      some further work by me
      8c75ad43
    • Robert Haas's avatar
      Pass extra data to bgworkers, and use this to fix parallel contexts. · 64b2e7ad
      Robert Haas authored
      Up until now, the total amount of data that could be passed to a
      background worker at startup was one datum, which can be a small as
      4 bytes on some systems.  That's enough to pass a dsm_handle or an
      array index, but not much else.  Add a bgw_extra flag to the
      BackgroundWorker struct, allowing up to 128 bytes to be passed to
      a new worker on any platform.
      
      Use this to fix a problem I recently discovered with the parallel
      context machinery added in 9.5: the master assigns each worker an
      array index, and each worker subsequently assigns itself an array
      index, and there's nothing to guarantee that the two sets of indexes
      match, leading to chaos.
      
      Normally, I would not back-patch the change to add bgw_extra, since it
      is basically a feature addition.  However, since 9.5 is still in beta
      and there seems to be no other sensible way to repair the broken
      parallel context machinery, back-patch to 9.5.  Existing background
      worker code can ignore the bgw_extra field without a problem, but
      might need to be recompiled since the structure size has changed.
      
      Report and patch by me.  Review by Amit Kapila.
      64b2e7ad
    • Tom Lane's avatar
      Improve implementation of GEQO's init_tour() function. · 59464bd6
      Tom Lane authored
      Rather than filling a temporary array and then copying values to the
      output array, we can generate the required random permutation in-place
      using the Fisher-Yates shuffle algorithm.  This is shorter as well as
      more efficient than before.  It's pretty unlikely that anyone would
      notice a speed improvement, but shorter code is better.
      
      Nathan Wagner, edited a bit by me
      59464bd6
    • Peter Eisentraut's avatar
      Update spelling of COPY options · 7bd099d5
      Peter Eisentraut authored
      The preferred spelling was changed from FORCE QUOTE to FORCE_QUOTE and
      the like, but some code was still referring to the old spellings.
      7bd099d5
  9. 04 Nov, 2015 1 commit
  10. 03 Nov, 2015 6 commits
    • Tom Lane's avatar
      Allow postgres_fdw to ship extension funcs/operators for remote execution. · d8949416
      Tom Lane authored
      The user can whitelist specified extension(s) in the foreign server's
      options, whereupon we will treat immutable functions and operators of those
      extensions as candidates to be sent for remote execution.
      
      Whitelisting an extension in this way basically promises that the extension
      exists on the remote server and behaves compatibly with the local instance.
      We have no way to prove that formally, so we have to rely on the user to
      get it right.  But this seems like something that people can usually get
      right in practice.
      
      We might in future allow functions and operators to be whitelisted
      individually, but extension granularity is a very convenient special case,
      so it got done first.
      
      The patch as-committed lacks any regression tests, which is unfortunate,
      but introducing dependencies on other extensions for testing purposes
      would break "make installcheck" scenarios, which is worse.  I have some
      ideas about klugy ways around that, but it seems like material for a
      separate patch.  For the moment, leave the problem open.
      
      Paul Ramsey, hacked up a bit more by me
      d8949416
    • Robert Haas's avatar
      Improve comments about abbreviation abort. · ee44cb75
      Robert Haas authored
      Peter Geoghegan
      ee44cb75
    • Robert Haas's avatar
      postgres_fdw: Add ORDER BY to some remote SQL queries. · f18c944b
      Robert Haas authored
      If the join problem's entire ORDER BY clause can be pushed to the
      remote server, consider a path that adds this ORDER BY clause.  If
      use_remote_estimate is on, we cost this path using an additional
      remote EXPLAIN.  If not, we just estimate that the path costs 20%
      more, which is intended to be large enough that we won't request a
      remote sort when it's not helpful, but small enough that we'll have
      the remote side do the sort when in doubt.  In some cases, the remote
      sort might actually be free, because the remote query plan might
      happen to produce output that is ordered the way we need, but without
      remote estimates we have no way of knowing that.
      
      It might also be useful to request sorted output from the remote side
      if it enables an efficient merge join, but this patch doesn't attempt
      to handle that case.
      
      Ashutosh Bapat with revisions by me.  Also reviewed by Fabrízio de Royes
      Mello and Jeevan Chalke.
      f18c944b
    • Tom Lane's avatar
      Remove obsolete advice about doubling backslashes in regex escapes. · fc0b8935
      Tom Lane authored
      Standard-conforming literals have been the default for long enough that
      it no longer seems necessary to go out of our way to tell people to write
      regex escapes illegibly.
      fc0b8935
    • Tom Lane's avatar
      Code + docs review for unicode linestyle patch. · a69b0b2c
      Tom Lane authored
      Fix some brain fade in commit a2dabf0e: erroneous variable names
      in docs, rearrangements that made sentences less clear not more so,
      undocumented and poorly-chosen-anyway API behaviors of subroutines,
      bad grammar in error messages, copy-and-paste faults.
      
      Albe Laurenz and Tom Lane
      a69b0b2c
    • Robert Haas's avatar
      shm_mq: Third attempt at fixing nowait behavior in shm_mq_receive. · 4efe26cb
      Robert Haas authored
      Commit a1480ec1 purported to fix the
      problems with commit b2ccb5f4, but it
      didn't completely fix them.  The problem is that the checks were
      performed in the wrong order, leading to a race condition.  If the
      sender attached, sent a message, and detached after the receiver
      called shm_mq_get_sender and before the receiver called
      shm_mq_counterparty_gone, we'd incorrectly return SHM_MQ_DETACHED
      before all messages were read.  Repair by reversing the order of
      operations, and add a long comment explaining why this new logic is
      (hopefully) correct.
      4efe26cb