1. 22 Dec, 2016 8 commits
  2. 21 Dec, 2016 14 commits
    • Joe Conway's avatar
      Improve dblink error message when remote does not provide it · ea0aa969
      Joe Conway authored
      When dblink or postgres_fdw detects an error on the remote side of the
      connection, it will try to construct a local error message as best it
      can using libpq's PQresultErrorField(). When no primary message is
      available, it was bailing out with an unhelpful "unknown error". Make
      that message better and more style guide compliant. Per discussion
      on hackers.
      
      Backpatch to 9.2 except postgres_fdw which didn't exist before 9.3.
      
      Discussion: https://postgr.es/m/19872.1482338965%40sss.pgh.pa.us
      ea0aa969
    • Tom Lane's avatar
      Fix detection of unfinished Unicode surrogate pair at end of string. · a8ae1232
      Tom Lane authored
      The U&'...' and U&"..." syntaxes silently discarded a surrogate pair
      start (that is, a code between U+D800 and U+DBFF) if it occurred at
      the very end of the string.  This seems like an obvious oversight,
      since we throw an error for every other invalid combination of surrogate
      characters, including the very same situation in E'...' syntax.
      
      This has been wrong since the pair processing was added (in 9.0),
      so back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/19113.1482337898@sss.pgh.pa.us
      a8ae1232
    • Tom Lane's avatar
      Fix strange behavior (and possible crashes) in full text phrase search. · 89fcea1a
      Tom Lane authored
      In an attempt to simplify the tsquery matching engine, the original
      phrase search patch invented rewrite rules that would rearrange a
      tsquery so that no AND/OR/NOT operator appeared below a PHRASE operator.
      But this approach had numerous problems.  The rearrangement step was
      missed by ts_rewrite (and perhaps other places), allowing tsqueries
      to be created that would cause Assert failures or perhaps crashes at
      execution, as reported by Andreas Seltenreich.  The rewrite rules
      effectively defined semantics for operators underneath PHRASE that were
      buggy, or at least unintuitive.  And because rewriting was done in
      tsqueryin() rather than at execution, the rearrangement was user-visible,
      which is not very desirable --- for example, it might cause unexpected
      matches or failures to match in ts_rewrite.
      
      As a somewhat independent problem, the behavior of nested PHRASE operators
      was only sane for left-deep trees; queries like "x <-> (y <-> z)" did not
      behave intuitively at all.
      
      To fix, get rid of the rewrite logic altogether, and instead teach the
      tsquery execution engine to manage AND/OR/NOT below a PHRASE operator
      by explicitly computing the match location(s) and match widths for these
      operators.
      
      This requires introducing some additional fields into the publicly visible
      ExecPhraseData struct; but since there's no way for third-party code to
      pass such a struct to TS_phrase_execute, it shouldn't create an ABI problem
      as long as we don't move the offsets of the existing fields.
      
      Another related problem was that index searches supposed that "!x <-> y"
      could be lossily approximated as "!x & y", which isn't correct because
      the latter will reject, say, "x q y" which the query itself accepts.
      This required some tweaking in TS_execute_ternary along with the main
      tsquery engine.
      
      Back-patch to 9.6 where phrase operators were introduced.  While this
      could be argued to change behavior more than we'd like in a stable branch,
      we have to do something about the crash hazards and index-vs-seqscan
      inconsistency, and it doesn't seem desirable to let the unintuitive
      behaviors induced by the rewriting implementation stand as precedent.
      
      Discussion: https://postgr.es/m/28215.1481999808@sss.pgh.pa.us
      Discussion: https://postgr.es/m/26706.1482087250@sss.pgh.pa.us
      89fcea1a
    • Stephen Frost's avatar
      Improve ALTER TABLE documentation · 2d1018ca
      Stephen Frost authored
      The ALTER TABLE documentation wasn't terribly clear when it came to
      which commands could be combined together and what it meant when they
      were.
      
      In particular, SET TABLESPACE *can* be combined with other commands,
      when it's operating against a single table, but not when multiple tables
      are being moved with ALL IN TABLESPACE.  Further, the actions are
      applied together but not really in 'parallel', at least today.
      
      Pointed out by: Amit Langote
      
      Improved wording from Tom.
      
      Back-patch to 9.4, where the ALL IN TABLESPACE option was added.
      
      Discussion: https://www.postgresql.org/message-id/14c535b4-13ef-0590-1b98-76af355a0763%40lab.ntt.co.jp
      2d1018ca
    • Stephen Frost's avatar
      Fix dumping of casts and transforms using built-in functions · 2259bf67
      Stephen Frost authored
      In pg_dump.c dumpCast() and dumpTransform(), we would happily ignore the
      cast or transform if it happened to use a built-in function because we
      weren't including the information about built-in functions when querying
      pg_proc from getFuncs().
      
      Modify the query in getFuncs() to also gather information about
      functions which are used by user-defined casts and transforms (where
      "user-defined" means "has an OID >= FirstNormalObjectId").  This also
      adds to the TAP regression tests for 9.6 and master to cover these
      types of objects.
      
      Back-patch all the way for casts, back to 9.5 for transforms.
      
      Discussion: https://www.postgresql.org/message-id/flat/20160504183952.GE10850%40tamriel.snowman.net
      2259bf67
    • Stephen Frost's avatar
      For 8.0 servers, get last built-in oid from pg_database · 19990918
      Stephen Frost authored
      We didn't start ensuring that all built-in objects had OIDs less than
      16384 until 8.1, so for 8.0 servers we still need to query the value out
      of pg_database.  We need this, in particular, to distinguish which casts
      were built-in and which were user-defined.
      
      For HEAD, we only worry about going back to 8.0, for the back-branches,
      we also ensure that 7.0-7.4 work.
      
      Discussion: https://www.postgresql.org/message-id/flat/20160504183952.GE10850%40tamriel.snowman.net
      19990918
    • Dean Rasheed's avatar
      Fix order of operations in CREATE OR REPLACE VIEW. · 58b13626
      Dean Rasheed authored
      When CREATE OR REPLACE VIEW acts on an existing view, don't update the
      view options until after the view query has been updated.
      
      This is necessary in the case where CREATE OR REPLACE VIEW is used on
      an existing view that is not updatable, and the new view is updatable
      and specifies the WITH CHECK OPTION. In this case, attempting to apply
      the new options to the view before updating its query fails, because
      the options are applied using the ALTER TABLE infrastructure which
      checks that WITH CHECK OPTION is only applied to an updatable view.
      
      If new columns are being added to the view, that is also done using
      the ALTER TABLE infrastructure, but it is important that that still be
      done before updating the view query, because the rules system checks
      that the query columns match those on the view relation. Added a
      comment to explain that, in case someone is tempted to move that to
      where the view options are now being set.
      
      Back-patch to 9.4 where WITH CHECK OPTION was added.
      
      Report: https://postgr.es/m/CAEZATCUp%3Dz%3Ds4SzZjr14bfct_bdJNwMPi-gFi3Xc5k1ntbsAgQ%40mail.gmail.com
      58b13626
    • Robert Haas's avatar
      Convert elog() to ereport() and do some wordsmithing. · cd510f04
      Robert Haas authored
      It's not entirely clear that we should log a message here at all, but
      it's certainly wrong to use elog() for a message that should clearly
      be translatable.
      
      Amit Langote
      cd510f04
    • Robert Haas's avatar
      Refactor partition tuple routing code to reduce duplication. · 1fc5c494
      Robert Haas authored
      Amit Langote
      1fc5c494
    • Robert Haas's avatar
      Fix corner-case bug in WaitEventSetWaitBlock on Windows. · 3b790d25
      Robert Haas authored
      If we do not reset the FD_READ event, WaitForMultipleObjects won't
      return it again again unless we've meanwhile read from the socket,
      which is generally true but not guaranteed.  WaitEventSetWaitBlock
      itself may fail to return the event to the caller if the latch is
      also set, and even if we changed that, the caller isn't obliged to
      handle all returned events at once.  On non-Windows systems, the
      socket-read event is purely level-triggered, so this issue does
      not exist.  To fix, make Windows reset the event when needed.
      
      This bug was introduced by 98a64d0b,
      and causes hangs when trying to use the pldebugger extension.
      
      Patch by Amit Kapial.  Reported and tested by Ashutosh Sharma, who
      also provided some analysis.  Further analysis by Michael Paquier.
      3b790d25
    • Robert Haas's avatar
      Refactor merge path generation code. · 59649c3f
      Robert Haas authored
      This shouldn't change the set of paths that get generated in any
      way, but it is preparatory work for further changes to allow a
      partial path to be merge-joined witih a non-partial path to produce
      a partial join path.
      
      Dilip Kumar, with cosmetic adjustments by me.
      59649c3f
    • Peter Eisentraut's avatar
      Reorder pg_sequence columns to avoid alignment issue · f3b421da
      Peter Eisentraut authored
      On AIX, doubles are aligned at 4 bytes, but int64 is aligned at 8 bytes.
      Our code assumes that doubles have alignment that can also be applied to
      int64, but that fails in this case.  One effect is that
      heap_form_tuple() writes tuples in a different layout than
      Form_pg_sequence expects.
      
      Rather than rewrite the whole alignment code, work around the issue by
      reordering the columns in pg_sequence so that the first int64 column
      naturally comes out at an 8-byte boundary.
      f3b421da
    • Fujii Masao's avatar
      Forbid invalid combination of options in pg_basebackup. · ecbdc4c5
      Fujii Masao authored
      Commit 56c7d8d4 allowed pg_basebackup
      to stream WAL in tar mode. But there is the restriction that WAL
      streaming in tar mode works only when the value - (dash) is not
      specified as output directory. This means that the combination of
      three options "-D -", "-F t" and "-X stream" is invalid. However,
      previously, even when those options were specified at the same time,
      pg_basebackup background process unexpectedly started streaming WAL.
      And then it exited with an error.
      
      This commit changes pg_basebackup so that it errors out on such
      invalid combination of options at the beginning.
      
      Reviewed by Magnus Hagander, and patch by me.
      ecbdc4c5
    • Tom Lane's avatar
      Fix minor oversights in nodeAgg.c. · c080b223
      Tom Lane authored
      aggstate->evalproj is always set up by ExecInitAgg, so there's no
      need to test.  Doing so led Coverity to think that we might be
      intending "slot" to be possibly NULL here, and it quite properly
      complained that the rest of combine_aggregates() wasn't prepared
      for that.
      
      Also fix a couple of obvious thinkos in Asserts checking that
      "inputoff" isn't past the end of the slot.
      
      Errors introduced in commit 8ed3f11b, so no need for back-patch.
      c080b223
  3. 20 Dec, 2016 4 commits
  4. 19 Dec, 2016 6 commits
    • Robert Haas's avatar
      Provide a DSA area for all parallel queries. · e13029a5
      Robert Haas authored
      This will allow future parallel query code to dynamically allocate
      storage shared by all participants.
      
      Thomas Munro, with assorted changes by me.
      e13029a5
    • Tom Lane's avatar
      Fix handling of phrase operator removal while removing tsquery stopwords. · 26044384
      Tom Lane authored
      The distance of a removed phrase operator should propagate up to a
      parent phrase operator if there is one, but this only worked correctly
      in left-deep trees.  Throwing in a few parentheses confused it completely,
      as indeed was illustrated by bizarre results in existing regression test
      cases.
      
      To fix, track unaccounted-for distances that should propagate to the left
      and to the right of the current node, rather than trying to make it work
      with only one returned distance.
      
      Also make some adjustments to behave as well as we can for cases of
      intermixed phrase and regular (AND/OR) operators.  I don't think it's
      possible to be 100% correct for that without a rethinking of the tsquery
      representation; for example, maybe we should just not drop stopword nodes
      at all underneath phrase operators.  But this is better than it was,
      and changing tsquery representation wouldn't be safely back-patchable.
      
      While at it, I simplified the API of the clean_fakeval_intree function
      a bit by getting rid of the "char *result" output parameter; that wasn't
      doing anything that wasn't redundant with whether the result node is
      NULL or not, and testing for NULL seems a lot clearer/safer.
      
      This is part of a larger project to fix various infelicities in the
      phrase-search implementation, but this part seems comittable on its own.
      
      Back-patch to 9.6 where phrase operators were introduced.
      
      Discussion: https://postgr.es/m/28215.1481999808@sss.pgh.pa.us
      Discussion: https://postgr.es/m/26706.1482087250@sss.pgh.pa.us
      26044384
    • Robert Haas's avatar
      Fix locking problem in _hash_squeezebucket() / _hash_freeovflpage(). · dd728826
      Robert Haas authored
      A bucket squeeze operation needs to lock each page of the bucket
      before releasing the prior page, but the previous coding fumbled the
      locking when freeing an overflow page during a bucket squeeze
      operation.  Commit 6d46f478
      introduced this bug.
      
      Amit Kapila, with help from Kuntal Ghosh and Dilip Kumar, after
      an initial trouble report by Jeff Janes.  Reviewed by me.  I also
      fixed a problem with a comment.
      dd728826
    • Robert Haas's avatar
      Remove unused file. · 668dbbec
      Robert Haas authored
      This was added in 10540974, but has
      never been used for anything as far as I can tell.  There seems to
      be no reason to keep it.
      668dbbec
    • Fujii Masao's avatar
      Support quorum-based synchronous replication. · 3901fd70
      Fujii Masao authored
      This feature is also known as "quorum commit" especially in discussion
      on pgsql-hackers.
      
      This commit adds the following new syntaxes into synchronous_standby_names
      GUC. By using FIRST and ANY keywords, users can specify the method to
      choose synchronous standbys from the listed servers.
      
        FIRST num_sync (standby_name [, ...])
        ANY num_sync (standby_name [, ...])
      
      The keyword FIRST specifies a priority-based synchronous replication
      which was available also in 9.6 or before. This method makes transaction
      commits wait until their WAL records are replicated to num_sync
      synchronous standbys chosen based on their priorities.
      
      The keyword ANY specifies a quorum-based synchronous replication
      and makes transaction commits wait until their WAL records are
      replicated to *at least* num_sync listed standbys. In this method,
      the values of sync_state.pg_stat_replication for the listed standbys
      are reported as "quorum". The priority is still assigned to each standby,
      but not used in this method.
      
      The existing syntaxes having neither FIRST nor ANY keyword are still
      supported. They are the same as new syntax with FIRST keyword, i.e.,
      a priorirty-based synchronous replication.
      
      Author: Masahiko Sawada
      Reviewed-By: Michael Paquier, Amit Kapila and me
      Discussion: <CAD21AoAACi9NeC_ecm+Vahm+MMA6nYh=Kqs3KB3np+MBOS_gZg@mail.gmail.com>
      
      Many thanks to the various individuals who were involved in
      discussing and developing this feature.
      3901fd70
    • Magnus Hagander's avatar
      Fix base backup rate limiting in presence of slow i/o · 10238fad
      Magnus Hagander authored
      When source i/o on disk was too slow compared to the rate limiting
      specified, the system could end up with a negative value for sleep that
      it never got out of, which caused rate limiting to effectively be
      turned off.
      
      Discussion: https://postgr.es/m/CABUevEy_-e0YvL4ayoX8bH_Ja9w%2BBHoP6jUgdxZuG2nEj3uAfQ%40mail.gmail.com
      
      Analysis by me, patch by Antonin Houska
      10238fad
  5. 18 Dec, 2016 2 commits
    • Noah Misch's avatar
      MSVC: Position MSBFLAGS after flags it might override. · cc07e06b
      Noah Misch authored
      Christian Ullrich
      cc07e06b
    • Tom Lane's avatar
      In contrib/uuid-ossp, #include headers needed for ntohl() and ntohs(). · 4a0a34b5
      Tom Lane authored
      Oversight in commit b8cc8f94.  I just noticed this causes compiler
      warnings on FreeBSD, and it really ought to cause warnings elsewhere too:
      all references I can find say that <arpa/inet.h> is required for these.
      We have a lot of code elsewhere that thinks that both <netinet/in.h>
      and <arpa/inet.h> should be included for these functions, so do it that
      way here too, even though <arpa/inet.h> ought to be sufficient according
      to the references I consulted.
      
      Back-patch to 9.4 where the previous commit landed.
      4a0a34b5
  6. 17 Dec, 2016 3 commits
    • Tom Lane's avatar
      Fix FK-based join selectivity estimation for semi/antijoins. · 7fa93eec
      Tom Lane authored
      This case wasn't thought through sufficiently in commit 100340e2.
      It's true that the FK proves that every outer row has a match in the
      inner table, but we forgot that some of the inner rows might be filtered
      away by WHERE conditions located within the semijoin's RHS.
      
      If the RHS is just one table, we can reasonably take the semijoin
      selectivity as equal to the fraction of the referenced table's rows
      that are expected to survive its restriction clauses.
      
      If the RHS is a join, it's not clear how much of the referenced table
      might get through the join, so fall back to the same rule we were
      already using for other outer-join cases: use the minimum of the
      regular per-clause selectivity estimates.  This gives the same result
      as if we hadn't considered the FK at all when there's a single FK
      column, but it should still help for multi-column FKs, which is the
      case that 100340e2 is really meant to help with.
      
      Back-patch to 9.6 where the previous commit came in.
      
      Discussion: https://postgr.es/m/16149.1481835103@sss.pgh.pa.us
      7fa93eec
    • Peter Eisentraut's avatar
      doc: Remove some trailing whitespace · b645a05f
      Peter Eisentraut authored
      Per discussion, we will not at this time remove trailing whitespace in
      psql output displays where it is part of the actual psql output.
      
      From: Vladimir Rusinov <vrusinov@google.com>
      b645a05f
    • Magnus Hagander's avatar
      Fix typos in comments · 01776a07
      Magnus Hagander authored
      Michael Paquier
      01776a07
  7. 16 Dec, 2016 3 commits
    • Robert Haas's avatar
      Fix outdated comment in lwlock.c · 591ccb66
      Robert Haas authored
      Commit 3761fe3c should have made
      this change, but didn't.
      
      Reported by Álvaro Herrera.
      591ccb66
    • Fujii Masao's avatar
      Ensure that num_sync is greater than zero in synchronous_standby_names. · 93eb619c
      Fujii Masao authored
      Previously num_sync could be set to zero and this setting caused
      an assertion failure. This means that multiple synchronous standbys
      code should assume that num_sync is greater than zero.
      Also setting num_sync to zero is nonsense because it's basically
      the configuration for synchronous replication. If users want not to
      make transaction commits wait for any standbys,
      synchronous_standby_names should be emptied to disable synchronous
      replication instead of setting num_sync to zero.
      
      This patch forbids users from setting num_sync to zero in
      synchronous_standby_names. If zero is specified, an error will
      happen during processing the parameter settings.
      
      Back-patch to 9.6 where multiple synchronous standbys feature was added.
      
      Patch by me. Reviewed by Tom Lane.
      Discussion: <CAHGQGwHWB3izc6cXuFLh5kOcAbFXaRhhgwd-X5PeN9TEjxqXwg@mail.gmail.com>
      93eb619c
    • Tom Lane's avatar
      Improve documentation around TS_execute(). · 23c75b55
      Tom Lane authored
      I got frustrated by the lack of commentary in this area, so here is some
      reverse-engineered documentation, along with minor stylistic cleanup.
      No code changes more significant than removal of unused variables.
      
      Back-patch to 9.6, not because that's useful in itself, but because
      we have some bugs to fix in phrase search and this would cause merge
      failures if it's only in HEAD.
      23c75b55