Skip to content
Snippets Groups Projects
  1. Feb 07, 2017
  2. Feb 06, 2017
    • Tom Lane's avatar
      Stamp 9.2.20. · 06a0f6de
      Tom Lane authored
      06a0f6de
    • Tom Lane's avatar
      a254f0d4
    • Tom Lane's avatar
      Avoid returning stale attribute bitmaps in RelationGetIndexAttrBitmap(). · bcd7b47c
      Tom Lane authored
      The problem with the original coding here is that we might receive (and
      clear) a relcache invalidation signal for the target relation down inside
      one of the index_open calls we're doing.  Since the target is open, we
      would not drop the relcache entry, just reset its rd_indexvalid and
      rd_indexlist fields.  But RelationGetIndexAttrBitmap() kept going, and
      would eventually cache and return potentially-obsolete attribute bitmaps.
      
      The case where this matters is where the inval signal was from a CREATE
      INDEX CONCURRENTLY telling us about a new index on a formerly-unindexed
      column.  (In all other cases, the lock we hold on the target rel should
      prevent any concurrent change in index state.)  Even just returning the
      stale attribute bitmap is not such a problem, because it shouldn't matter
      during the transaction in which we receive the signal.  What hurts is
      caching the stale data, because it can survive into later transactions,
      breaking CREATE INDEX CONCURRENTLY's expectation that later transactions
      will not create new broken HOT chains.  The upshot is that there's a window
      for building corrupted indexes during CREATE INDEX CONCURRENTLY.
      
      This patch fixes the problem by rechecking that the set of index OIDs
      is still the same at the end of RelationGetIndexAttrBitmap() as it was
      at the start.  If not, we loop back and try again.  That's a little
      more than is strictly necessary to fix the bug --- in principle, we
      could return the stale data but not cache it --- but it seems like a
      bad idea on general principles for relcache to return data it knows
      is stale.
      
      There might be more hazards of the same ilk, or there might be a better
      way to fix this one, but this patch definitely improves matters and seems
      unlikely to make anything worse.  So let's push it into today's releases
      even as we continue to study the problem.
      
      Pavan Deolasee and myself
      
      Discussion: https://postgr.es/m/CABOikdM2MUq9cyZJi1KyLmmkCereyGp5JQ4fuwKoyKEde_mzkQ@mail.gmail.com
      bcd7b47c
    • Peter Eisentraut's avatar
      Translation updates · e39a63ab
      Peter Eisentraut authored
      Source-Git-URL: git://git.postgresql.org/git/pgtranslation/messages.git
      Source-Git-Hash: 66e504a4b4750a86d02beb03758a81ef9f96a676
      e39a63ab
    • Peter Eisentraut's avatar
      Add missing newline to error messages · 863e70aa
      Peter Eisentraut authored
      Also improve the message style a bit while we're here.
      863e70aa
    • Heikki Linnakangas's avatar
      Fix typo also in expected output. · 16b74c47
      Heikki Linnakangas authored
      Commit 181bdb90 fixed the typo in the .sql file, but forgot to update the
      expected output.
      16b74c47
    • Heikki Linnakangas's avatar
      Fix typos in comments. · 2a931efb
      Heikki Linnakangas authored
      Backpatch to all supported versions, where applicable, to make backpatching
      of future fixes go more smoothly.
      
      Josh Soref
      
      Discussion: https://www.postgresql.org/message-id/CACZqfqCf+5qRztLPgmmosr-B0Ye4srWzzw_mo4c_8_B_mtjmJQ@mail.gmail.com
      2a931efb
  3. Feb 02, 2017
  4. Jan 30, 2017
    • Tom Lane's avatar
      Update time zone data files to tzdata release 2016j. · ef878cc2
      Tom Lane authored
      DST law changes in northern Cyprus (new zone Asia/Famagusta), Russia (new
      zone Europe/Saratov), Tonga, Antarctica/Casey.  Historical corrections for
      Asia/Aqtau, Asia/Atyrau, Asia/Gaza, Asia/Hebron, Italy, Malta.  Replace
      invented zone abbreviation "TOT" for Tonga with numeric UTC offset; but
      as in the past, we'll keep accepting "TOT" for input.
      ef878cc2
  5. Jan 27, 2017
    • Tom Lane's avatar
      Orthography fixes for new castNode() macro. · 3f6e085f
      Tom Lane authored
      Clean up hastily-composed comment.  Normalize whitespace.
      
      Erik Rijkers and myself
      3f6e085f
    • Simon Riggs's avatar
      Check interrupts during hot standby waits · 15c54e83
      Simon Riggs authored
      15c54e83
    • Andres Freund's avatar
      Add castNode(type, ptr) for safe casting between NodeTag based types. · 14d0e290
      Andres Freund authored
      The new function allows to cast from one NodeTag based type to
      another, while asserting that the conversion is valid.  This replaces
      the common pattern of doing a cast and a Assert(IsA(ptr, type))
      close-by.
      
      As this seems likely to be used pervasively, we decided to backpatch
      this change the addition of this macro. Otherwise backpatched fixes
      are more likely not to work on back-branches.
      
      On branches before 9.6, where we do not yet rely on inline functions
      being available, the type assertion is only performed if PG_USE_INLINE
      support is detected. The cast obviously is performed regardless.
      
      For the benefit of verifying the macro compiles in the back-branches,
      this commit contains a single use of the new macro. On master, a
      somewhat larger conversion will be committed separately.
      
      Author: Peter Eisentraut and Andres Freund
      Reviewed-By: Tom Lane
      Discussion: https://postgr.es/m/c5d387d9-3440-f5e0-f9d4-71d53b9fbe52@2ndquadrant.com
      Backpatch: 9.2-
      14d0e290
  6. Jan 26, 2017
    • Tom Lane's avatar
      Ensure that a tsquery like '!foo' matches empty tsvectors. · fe6120f9
      Tom Lane authored
      !foo means "the tsvector does not contain foo", and therefore it should
      match an empty tsvector.  ts_match_vq() overenthusiastically supposed
      that an empty tsvector could never match any query, so it forcibly
      returned FALSE, the wrong answer.  Remove the premature optimization.
      
      Our behavior on this point was inconsistent, because while seqscans and
      GIST index searches both failed to match empty tsvectors, GIN index
      searches would find them, since GIN scans don't rely on ts_match_vq().
      That makes this certainly a bug, not a debatable definition disagreement,
      so back-patch to all supported branches.
      
      Report and diagnosis by Tom Dunstan (bug #14515); added test cases by me.
      
      Discussion: https://postgr.es/m/20170126025524.1434.97828@wrigleys.postgresql.org
      fe6120f9
  7. Jan 24, 2017
    • Fujii Masao's avatar
      Fix bug in verifying TLI (timeline ID) in WAL page header during recovery.. · 38bec180
      Fujii Masao authored
      Previously ValidXLOGHeader() could not handle properly the case where
      we re-read the WAL segment after reading its subsequent segment having
      larger TLI. This case can happen, for example, when the WAL record is split
      across two segments having different TLI. In this case, since the segment
      we're re-reading has the smaller TLI than its subsequent segment we've
      already read, ValidXLOGHeader() reported an error "out-of-sequence TLI"
      even though TLI sequence was valid (i.e., TLI doesn't go backwards across
      successive WAL pages and segments).
      
      This issue was fixed by commit 7fcbf6a4
      in 9.3 or later though there is no mention to the bug fix in its commit log.
      It changed the WAL check code so that it verifies TLI for pages that are
      later than the last remembered LSN. This patch applies the same change to
      9.2 where the issue still existed.
      
      Author: Takayuki Tsunakawa and Amit Kapila
      Reviewed-By: Robert Haas
      Discussion: https://postgr.es/m/0A3221C70F24FB45833433255569204D1F5E15E5@G01JPEXMBYT05
      38bec180
    • Tatsuo Ishii's avatar
      Revert "Fix comments in StrategyNotifyBgWriter()." · dbaa621c
      Tatsuo Ishii authored
      This reverts commit 0b7bcf7a, which
      tried to fix the comments to reflect the change of API of the function
      but actually the change had been made only for 9.5 or later.
      dbaa621c
    • Tatsuo Ishii's avatar
      Fix comments in StrategyNotifyBgWriter(). · 0b7bcf7a
      Tatsuo Ishii authored
      The interface for the function was changed in
      d72731a7 but the comments of the
      function was not updated.
      
      Patch by Yugo Nagata.
      0b7bcf7a
  8. Jan 23, 2017
  9. Jan 20, 2017
    • Robert Haas's avatar
      Avoid useless respawining the autovacuum launcher at high speed. · 5dff230e
      Robert Haas authored
      When (1) autovacuum = off and (2) there's at least one database with
      an XID age greater than autovacuum_freeze_max_age and (3) all tables
      in that database that need vacuuming are already being processed by a
      worker and (4) the autovacuum launcher is started, a kind of infinite
      loop occurs.  The launcher starts a worker and immediately exits.  The
      worker, finding no worker to do, immediately starts the launcher,
      supposedly so that the next database can be processed.  But because
      datfrozenxid for that database hasn't been advanced yet, the new
      worker gets put right back into the same database as the old one,
      where it once again starts the launcher and exits.  High-speed ping
      pong ensues.
      
      There are several possible ways to break the cycle; this seems like
      the safest one.
      
      Amit Khandekar (code) and Robert Haas (comments), reviewed by
      Álvaro Herrera.
      
      Discussion: http://postgr.es/m/CAJ3gD9eWejf72HKquKSzax0r+epS=nAbQKNnykkMA0E8c+rMDg@mail.gmail.com
      5dff230e
  10. Jan 18, 2017
    • Tom Lane's avatar
      Reset the proper GUC in create_index test. · 154875a7
      Tom Lane authored
      Thinko in commit a4523c5a.  It doesn't really affect anything at
      present, but it would be a problem if any tests added later in this
      file ought to get index-only-scan plans.  Back-patch, like the previous
      commit, just to avoid surprises in case we add such a test and then
      back-patch it.
      
      Nikita Glukhov
      
      Discussion: https://postgr.es/m/8b70135d-ad38-bdd8-ac92-71e2b3c273cf@postgrespro.ru
      154875a7
    • Alvaro Herrera's avatar
      Change some test macros to return true booleans · 5462e348
      Alvaro Herrera authored
      These macros work fine when they are used directly in an "if" test or
      similar, but as soon as the return values are assigned to boolean
      variables (or passed as boolean arguments to some function), they become
      bugs, hopefully caught by compiler warnings.  To avoid future problems,
      fix the definitions so that they return actual booleans.
      
      To further minimize the risk that somebody uses them in back-patched
      fixes that only work correctly in branches starting from the current
      master and not in old ones, back-patch the change to supported branches
      as appropriate.
      
      See also commit af4472bc, and the long
      discussion (and larger patch) in the thread mentioned in its commit
      message.
      
      Discussion: https://postgr.es/m/18672.1483022414@sss.pgh.pa.us
      5462e348
  11. Jan 17, 2017
    • Fujii Masao's avatar
      Fix an assertion failure related to an exclusive backup. · c73157ca
      Fujii Masao authored
      Previously multiple sessions could execute pg_start_backup() and
      pg_stop_backup() to start and stop an exclusive backup at the same time.
      This could trigger the assertion failure of
      "FailedAssertion("!(XLogCtl->Insert.exclusiveBackup)".
      This happend because, even while pg_start_backup() was starting
      an exclusive backup, other session could run pg_stop_backup()
      concurrently and mark the backup as not-in-progress unconditionally.
      
      This patch introduces ExclusiveBackupState indicating the state of
      an exclusive backup. This state is used to ensure that there is only
      one session running pg_start_backup() or pg_stop_backup() at
      the same time, to avoid the assertion failure.
      
      Back-patch to all supported versions.
      
      Author: Michael Paquier
      Reviewed-By: Kyotaro Horiguchi and me
      Reported-By: Andreas Seltenreich
      Discussion: <87mvktojme.fsf@credativ.de>
      c73157ca
  12. Jan 14, 2017
  13. Jan 11, 2017
    • Stephen Frost's avatar
      pg_restore: Don't allow non-positive number of jobs · c59a1a89
      Stephen Frost authored
      pg_restore will currently accept invalid values for the number of
      parallel jobs to run (eg: -1), unlike pg_dump which does check that the
      value provided is reasonable.
      
      Worse, '-1' is actually a valid, independent, parameter (as an alias for
      --single-transaction), leading to potentially completely unexpected
      results from a command line such as:
      
        -> pg_restore -j -1
      
      Where a user would get neither parallel jobs nor a single-transaction.
      
      Add in validity checking of the parallel jobs option, as we already have
      in pg_dump, before we try to open up the archive.  Also move the check
      that we haven't been asked to run more parallel jobs than possible on
      Windows to the same place, so we do all the option validity checking
      before opening the archive.
      
      Back-patch all the way, though for 9.2 we're adding the Windows-specific
      check against MAXIMUM_WAIT_OBJECTS as that check wasn't back-patched
      originally.
      
      Discussion: https://www.postgresql.org/message-id/20170110044815.GC18360%40tamriel.snowman.net
      c59a1a89
  14. Jan 05, 2017
    • Tom Lane's avatar
      Fix handling of empty arrays in array_fill(). · e0d59c6e
      Tom Lane authored
      array_fill(..., array[0]) produced an empty array, which is probably
      what users expect, but it was a one-dimensional zero-length array
      which is not our standard representation of empty arrays.  Also, for
      no very good reason, it rejected empty input arrays; that case should
      be allowed and produce an empty output array.
      
      In passing, remove the restriction that the input array(s) have lower
      bound 1.  That seems rather pointless, and it would have needed extra
      complexity to make the check deal with empty input arrays.
      
      Per bug #14487 from Andrew Gierth.  It's been broken all along, so
      back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/20170105152156.10135.64195@wrigleys.postgresql.org
      e0d59c6e
    • Tom Lane's avatar
      Handle OID column inheritance correctly in ALTER TABLE ... INHERIT. · 6c4cf2be
      Tom Lane authored
      Inheritance operations must treat the OID column, if any, much like
      regular user columns.  But MergeAttributesIntoExisting() neglected to
      do that, leading to weird results after a table with OIDs is associated
      to a parent with OIDs via ALTER TABLE ... INHERIT.
      
      Report and patch by Amit Langote, reviewed by Ashutosh Bapat, some
      adjustments by me.  It's been broken all along, so back-patch to
      all supported branches.
      
      Discussion: https://postgr.es/m/cb13cfe7-a48c-5720-c383-bb843ab28298@lab.ntt.co.jp
      6c4cf2be
  15. Jan 03, 2017
  16. Jan 02, 2017
  17. Dec 30, 2016
  18. Dec 27, 2016
    • Tom Lane's avatar
      Fix interval_transform so it doesn't throw away non-no-op casts. · beae7d5f
      Tom Lane authored
      interval_transform() contained two separate bugs that caused it to
      sometimes mistakenly decide that a cast from interval to restricted
      interval is a no-op and throw it away.
      
      First, it was wrong to rely on dt.h's field type macros to have an
      ordering consistent with the field's significance; in one case they do
      not.  This led to mistakenly treating YEAR as less significant than MONTH,
      so that a cast from INTERVAL MONTH to INTERVAL YEAR was incorrectly
      discarded.
      
      Second, fls(1<<k) produces k+1 not k, so comparing its output directly
      to SECOND was wrong.  This led to supposing that a cast to INTERVAL
      MINUTE was really a cast to INTERVAL SECOND and so could be discarded.
      
      To fix, get rid of the use of fls(), and make a function based on
      intervaltypmodout to produce a field ID code adapted to the need here.
      
      Per bug #14479 from Piotr Stefaniak.  Back-patch to 9.2 where transform
      functions were introduced, because this code was born broken.
      
      Discussion: https://postgr.es/m/20161227172307.10135.7747@wrigleys.postgresql.org
      beae7d5f
    • Andrew Dunstan's avatar
      Explain unaccounted for space in pgstattuple. · 3ba8beda
      Andrew Dunstan authored
      In addition to space accounted for by tuple_len, dead_tuple_len and
      free_space, the table_len includes page overhead, the item pointers
      table and padding bytes.
      
      Backpatch to live branches.
      3ba8beda
  19. Dec 26, 2016
    • Tom Lane's avatar
      Remove triggerable Assert in hashname(). · 607d0cd1
      Tom Lane authored
      hashname() asserted that the key string it is given is shorter than
      NAMEDATALEN.  That should surely always be true if the input is in fact a
      regular value of type "name".  However, for reasons of coding convenience,
      we allow plain old C strings to be treated as "name" values in many places.
      Some SQL functions accept arbitrary "text" inputs, convert them to C
      strings, and pass them otherwise-untransformed to syscache lookups for name
      columns, allowing an overlength input value to trigger hashname's Assert.
      
      This would be a DOS problem, except that it only happens in assert-enabled
      builds which aren't recommended for production.  In a production build,
      you'll just get a name lookup error, since regardless of the hash value
      computed by hashname, the later equality comparison checks can't match.
      Likewise, if the catalog lookup is done by seqscan or indexscan searches,
      there will just be a lookup error, since the name comparison functions
      don't contain any similar length checks, and will see an overlength input
      as unequal to any stored entry.
      
      After discussion we concluded that we should simply remove this Assert.
      It's inessential to hashname's own functionality, and having such an
      assertion in only some paths for name lookup is more of a foot-gun than
      a useful check.  There may or may not be a case for the affected callers
      to do something other than let the name lookup fail, but we'll consider
      that separately; in any case we probably don't want to change such
      behavior in the back branches.
      
      Per report from Tushar Ahuja.  Back-patch to all supported branches.
      
      Report: https://postgr.es/m/7d0809ee-6f25-c9d6-8e74-5b2967830d49@enterprisedb.com
      Discussion: https://postgr.es/m/17691.1482523168@sss.pgh.pa.us
      607d0cd1
  20. Dec 24, 2016
    • Stephen Frost's avatar
      pg_dumpall: Include --verbose option in --help output · 071538f3
      Stephen Frost authored
      The -v/--verbose option was not included in the output from --help for
      pg_dumpall even though it's in the pg_dumpall documentation and has
      apparently been around since pg_dumpall was reimplemented in C in 2002.
      
      Fix that by adding it.
      
      Pointed out by Daniel Westermann.
      
      Back-patch to all supported branches.
      
      Discussion: https://www.postgresql.org/message-id/2020970042.4589542.1482482101585.JavaMail.zimbra%40dbi-services.com
      071538f3
    • Stephen Frost's avatar
      Fix tab completion in psql for ALTER DEFAULT PRIVILEGES · 26b55d66
      Stephen Frost authored
      When providing tab completion for ALTER DEFAULT PRIVILEGES, we are
      including the list of roles as possible options for completion after the
      GRANT or REVOKE.  Further, we accept FOR ROLE/IN SCHEMA at the same time
      and in either order, but the tab completion was only working for one or
      the other.  Lastly, we weren't using the actual list of allowed kinds of
      objects for default privileges for completion after the 'GRANT X ON' but
      instead were completeing to what 'GRANT X ON' supports, which isn't the
      ssame at all.
      
      Address these issues by improving the forward tab-completion for ALTER
      DEFAULT PRIVILEGES and then constrain and correct how the tail
      completion is done when it is for ALTER DEFAULT PRIVILEGES.
      
      Back-patch the forward/tail tab-completion to 9.6, where we made it easy
      to handle such cases.
      
      For 9.5 and earlier, correct the initial tab-completion to at least be
      correct as far as it goes and then add a check for GRANT/REVOKE to only
      tab-complete when the GRANT/REVOKE is the start of the command, so we
      don't try to do tab-completion after we get to the GRANT/REVOKE part of
      the ALTER DEFAULT PRIVILEGES command, which is better than providing
      incorrect completions.
      
      Initial patch for master and 9.6 by Gilles Darold, though I cleaned it
      up and added a few comments.  All bugs in the 9.5 and earlier patch are
      mine.
      
      Discussion: https://www.postgresql.org/message-id/1614593c-e356-5b27-6dba-66320a9bc68b@dalibo.com
      26b55d66
  21. Dec 22, 2016
Loading