Skip to content
Snippets Groups Projects
  1. Mar 29, 2013
    • Tom Lane's avatar
      Must check indisready not just indisvalid when dumping from 9.2 server. · 723acc99
      Tom Lane authored
      9.2 uses a kluge representation of "indislive"; we have to account for
      that when examining pg_index.  Simplest solution is to check indisready
      for 9.0 and 9.1 as well; that's harmless though unnecessary, so it's
      not worth making a version distinction for.
      
      Fixes oversight in commit 683abc73,
      as noted by Andres Freund.
      723acc99
  2. Mar 28, 2013
  3. Mar 27, 2013
    • Tom Lane's avatar
      Reset OpenSSL randomness state in each postmaster child process. · 21ce40c8
      Tom Lane authored
      Previously, if the postmaster initialized OpenSSL's PRNG (which it will do
      when ssl=on in postgresql.conf), the same pseudo-random state would be
      inherited by each forked child process.  The problem is masked to a
      considerable extent if the incoming connection uses SSL encryption, but
      when it does not, identical pseudo-random state is made available to
      functions like contrib/pgcrypto.  The process's PID does get mixed into any
      requested random output, but on most systems that still only results in 32K
      or so distinct random sequences available across all Postgres sessions.
      This might allow an attacker who has database access to guess the results
      of "secure" operations happening in another session.
      
      To fix, forcibly reset the PRNG after fork().  Each child process that has
      need for random numbers from OpenSSL's generator will thereby be forced to
      go through OpenSSL's normal initialization sequence, which should provide
      much greater variability of the sequences.  There are other ways we might
      do this that would be slightly cheaper, but this approach seems the most
      future-proof against SSL-related code changes.
      
      This has been assigned CVE-2013-1900, but since the issue and the patch
      have already been publicized on pgsql-hackers, there's no point in trying
      to hide this commit.
      
      Back-patch to all supported branches.
      
      Marko Kreen
      21ce40c8
    • Heikki Linnakangas's avatar
      Fix buffer pin leak in heap update redo routine. · 1b315c53
      Heikki Linnakangas authored
      In a heap update, if the old and new tuple were on different pages, and the
      new page no longer existed (because it was subsequently truncated away by
      vacuum), heap_xlog_update forgot to release the pin on the old buffer. This
      bug was introduced by the "Fix multiple problems in WAL replay" patch,
      commit 3bbf668d (on master branch).
      
      With full_page_writes=off, this triggered an "incorrect local pin count"
      error later in replay, if the old page was vacuumed.
      
      This fixes bug #7969, reported by Yunong Xiao. Backpatch to 9.0, like the
      commit that introduced this bug.
      1b315c53
  4. Mar 26, 2013
    • Tom Lane's avatar
      Ignore invalid indexes in pg_dump. · 96103c6a
      Tom Lane authored
      Dumping invalid indexes can cause problems at restore time, for example
      if the reason the index creation failed was because it tried to enforce
      a uniqueness condition not satisfied by the table's data.  Also, if the
      index creation is in fact still in progress, it seems reasonable to
      consider it to be an uncommitted DDL change, which pg_dump wouldn't be
      expected to dump anyway.
      
      Back-patch to all active versions, and teach them to ignore invalid
      indexes in servers back to 8.2, where the concept was introduced.
      
      Michael Paquier
      96103c6a
  5. Mar 25, 2013
    • Heikki Linnakangas's avatar
      In base backup, only include our own tablespace version directory. · 13f9634c
      Heikki Linnakangas authored
      If you have clusters of different versions pointing to the same tablespace
      location, we would incorrectly include all the data belonging to the other
      versions, too.
      
      Fixes bug #7986, reported by Sergey Burladyan.
      13f9634c
    • Heikki Linnakangas's avatar
      Add a server version check to pg_basebackup and pg_receivexlog. · 6980497f
      Heikki Linnakangas authored
      These programs don't work against 9.0 or earlier servers, so check that when
      the connection is made. That's better than a cryptic error message you got
      before.
      
      Also, these programs won't work with a 9.3 server, because the WAL streaming
      protocol was changed in a non-backwards-compatible way. As a general rule,
      we don't make any guarantee that an old client will work with a new server,
      so check that. However, allow a 9.1 client to connect to a 9.2 server, to
      avoid breaking environments that currently work; a 9.1 client happens to
      work with a 9.2 server, even though we didn't make any great effort to
      ensure that.
      
      This patch is for the 9.1 and 9.2 branches, I'll commit a similar patch to
      master later. Although this isn't a critical bug fix, it seems safe enough
      to back-patch. The error message you got when connecting to a 9.3devel
      server without this patch was cryptic enough to warrant backpatching.
      6980497f
  6. Mar 24, 2013
    • Tom Lane's avatar
      Update time zone abbreviation lists for changes missed since 2006. · 3a003c5a
      Tom Lane authored
      Most (all?) of Russia has moved to what's effectively year-round daylight
      savings time, so that the "standard" zone names now mean an hour later
      than they used to.  Update that, notably changing MSK as per recent
      complaint from Sergey Konoplev, but also CHOT, GET, IRKT, KGT, KRAT,
      MAGT, NOVT, OMST, VLAT, YAKT, YEKT.  The corresponding DST abbreviations
      are presumably now obsolete, but I left them in place with their old
      definitions, just to reduce any possible breakage from this change.
      
      Also add VOLT (Europe/Volgograd), which for some reason we never had
      before, as well as MIST (Antarctica/Macquarie), and fix obsolete
      definitions of MAWT, TKT, and WST.
      3a003c5a
  7. Mar 23, 2013
  8. Mar 22, 2013
    • Tom Lane's avatar
      Fix contrib/dblink to handle inconsistent DateStyle/IntervalStyle safely. · f2482061
      Tom Lane authored
      If the remote database's settings of these GUCs are different from ours,
      ambiguous datetime values may be read incorrectly.  To fix, temporarily
      adopt the remote server's settings while we ingest a query result.
      
      This is not a complete fix, since it doesn't do anything about ambiguous
      values in commands sent to the remote server; but there seems little we
      can do about that end of it given dblink's entirely textual API for
      transmitted commands.
      
      Back-patch to 9.2.  The hazard exists in all versions, but this patch
      would need more work to apply before 9.2.  Given the lack of field
      complaints about this issue, it doesn't seem worth the effort at present.
      
      Daniel Farina and Tom Lane
      f2482061
  9. Mar 18, 2013
    • Tom Lane's avatar
      Improve documentation of EXTRACT(WEEK). · b8f45997
      Tom Lane authored
      The docs showed that early-January dates can be considered part of the
      previous year for week-counting purposes, but failed to say explicitly
      that late-December dates can also be considered part of the next year.
      Fix that, and add a cross-reference to the "isoyear" field.  Per bug
      #7967 from Pawel Kobylak.
      b8f45997
  10. Mar 11, 2013
    • Tom Lane's avatar
      Fix race condition in DELETE RETURNING. · 32638960
      Tom Lane authored
      When RETURNING is specified, ExecDelete would return a virtual-tuple slot
      that could contain pointers into an already-unpinned disk buffer.  Another
      process could change the buffer contents before we get around to using the
      data, resulting in garbage results or even a crash.  This seems of fairly
      low probability, which may explain why there are no known field reports of
      the problem, but it's definitely possible.  Fix by forcing the result slot
      to be "materialized" before we release pin on the disk buffer.
      
      Back-patch to 9.0; in earlier branches there is no bug because
      ExecProcessReturning sent the tuple to the destination immediately.  Also,
      this is already fixed in HEAD as part of the writable-foreign-tables patch
      (where the fix is necessary for DELETE RETURNING to work at all with
      postgres_fdw).
      32638960
  11. Mar 07, 2013
    • Tom Lane's avatar
      Fix infinite-loop risk in fixempties() stage of regex compilation. · 957b9c0c
      Tom Lane authored
      The previous coding of this function could get into situations where it
      would never terminate, because successive passes would re-add EMPTY arcs
      that had been removed by the previous pass.  Rewrite the function
      completely using a new algorithm that is guaranteed to terminate, and
      also seems to be usually faster than the old one.  Per Tcl bugs 3604074
      and 3606683.
      
      Tom Lane and Don Porter
      957b9c0c
    • Heikki Linnakangas's avatar
      Fix tli history file fetching, broken by the archive after crash recevery patch. · 51616dcd
      Heikki Linnakangas authored
      If we were about to enter archive recovery after crash recovery, we scanned
      the archive for the latest tli history file, and set the recovery target
      timeline to that. However, when we actually tried to read the history file,
      we would not fetch the file from the archive, because we were not in archive
      recovery yet.
      
      To fix, make readTimeLineHistory and existsTimeLineHistory to always fetch
      the file from archive if archive recovery is requested, even if we're not in
      archive recovery yet.
      
      Backpatch to 9.2. Mitsumasa KONDO
      51616dcd
    • Heikki Linnakangas's avatar
      Further fix to the mode where we enter archive recovery after crash recovery. · d009f903
      Heikki Linnakangas authored
      I missed to returns in the middle of ReadRecord function in my previous fix.
      If a WAL file was not found at all during crash recovery, XLogPageRead would
      return 'false', and ReadRecord would return without entering archive recovery.
      
      9.2 only. In master, the code is structured differently and does not have this
      problem.
      
      Kyotaro HORIGUCHI, Mitsumasa KONDO and me.
      d009f903
  12. Mar 06, 2013
  13. Mar 05, 2013
    • Tom Lane's avatar
      Fix to_char() to use ASCII-only case-folding rules where appropriate. · 1db236c7
      Tom Lane authored
      formatting.c used locale-dependent case folding rules in some code paths
      where the result isn't supposed to be locale-dependent, for example
      to_char(timestamp, 'DAY').  Since the source data is always just ASCII
      in these cases, that usually didn't matter ... but it does matter in
      Turkish locales, which have unusual treatment of "i" and "I".  To confuse
      matters even more, the misbehavior was only visible in UTF8 encoding,
      because in single-byte encodings we used pg_toupper/pg_tolower which
      don't have locale-specific behavior for ASCII characters.  Fix by providing
      intentionally ASCII-only case-folding functions and using these where
      appropriate.  Per bug #7913 from Adnan Dursun.  Back-patch to all active
      branches, since it's been like this for a long time.
      1db236c7
  14. Mar 04, 2013
  15. Mar 03, 2013
    • Tom Lane's avatar
      Fix SQL function execution to be safe with long-lived FmgrInfos. · d4f4bdf2
      Tom Lane authored
      fmgr_sql had been designed on the assumption that the FmgrInfo it's called
      with has only query lifespan.  This is demonstrably unsafe in connection
      with range types, as shown in bug #7881 from Andrew Gierth.  Fix things
      so that we re-generate the function's cache data if the (sub)transaction
      it was made in is no longer active.
      
      Back-patch to 9.2.  This might be needed further back, but it's not clear
      whether the case can realistically arise without range types, so for now
      I'll desist from back-patching further.
      d4f4bdf2
    • Peter Eisentraut's avatar
      doc: A few awkward phrasing fixes · bf63c4a2
      Peter Eisentraut authored
      Josh Kupershmidt
      bf63c4a2
  16. Mar 02, 2013
    • Peter Eisentraut's avatar
      Exclude utils/probes.h and pg_trace.h from cpluspluscheck · 224f6e50
      Peter Eisentraut authored
      They can include sys/sdt.h from SystemTap, which itself contains C++
      code and so won't compile with a C++ compiler under extern "C" linkage.
      224f6e50
    • Tom Lane's avatar
      Eliminate memory leaks in plperl's spi_prepare() function. · 0fe397fa
      Tom Lane authored
      Careless use of TopMemoryContext for I/O function data meant that repeated
      use of spi_prepare and spi_freeplan would leak memory at the session level,
      as per report from Christian Schröder.  In addition, spi_prepare
      leaked a lot of transient data within the current plperl function's SPI
      Proc context, which would be a problem for repeated use of spi_prepare
      within a single plperl function call; and it wasn't terribly careful
      about releasing permanent allocations in event of an error, either.
      
      In passing, clean up some copy-and-pasteos in query-lookup error messages.
      
      Alex Hunsaker and Tom Lane
      0fe397fa
  17. Feb 27, 2013
    • Tom Lane's avatar
      Add missing error check in regexp parser. · 3ae9d4db
      Tom Lane authored
      parseqatom() failed to check for an error return (NULL result) from its
      recursive call to parsebranch(), and in consequence could crash with a
      null-pointer dereference after an error return.  This bug has been there
      since day one, but wasn't noticed before, probably because most error cases
      in parsebranch() didn't actually lead to returning NULL.  Add the missing
      error check, and also tweak parsebranch() to exit in a less indirect
      fashion after a call to parseqatom() fails.
      
      Report by Tomasz Karlik, fix by me.
      3ae9d4db
  18. Feb 25, 2013
  19. Feb 24, 2013
  20. Feb 23, 2013
  21. Feb 22, 2013
    • Heikki Linnakangas's avatar
      Fix thinko in previous commit. · ca60f0c4
      Heikki Linnakangas authored
      We must still initialize minRecoveryPoint if we start straight with archive
      recovery, e.g when recovering from a normal base backup taken with
      pg_start/stop_backup. Otherwise we never consider the system consistent.
      ca60f0c4
    • Heikki Linnakangas's avatar
      If recovery.conf is created after "pg_ctl stop -m i", do crash recovery. · ee8b95e8
      Heikki Linnakangas authored
      If you create a base backup using an atomic filesystem snapshot, and try to
      perform PITR starting from that base backup, or if you just kill a master
      server and create recovery.conf to put it into standby mode, we don't know
      how far we need to recover before reaching consistency. Normally in crash
      recovery, we replay all the WAL present in pg_xlog, and assume that we're
      consistent after that. And normally in archive recovery, minRecoveryPoint,
      backupEndRequired, or backupEndPoint is set in the control file, indicating
      how far we need to replay to reach consistency. But if the server was
      previously up and running normally, and you kill -9 it or take an atomic
      filesystem snapshot, none of those fields are set in the control file.
      
      The solution is to perform crash recovery first, replaying all the WAL in
      pg_xlog. After that's done, we assume that the system is consistent like in
      normal crash recovery, and switch to archive recovery mode after that.
      
      Per report from Kyotaro HORIGUCHI. In his scenario, recovery.conf was
      created after "pg_ctl stop -m i". I'm not sure we need to support that exact
      scenario, but we should support backing up using a filesystem snapshot,
      which looks identical.
      
      This issue goes back to at least 9.0, where hot standby was introduced and
      we started to track when consistency is reached. In 9.1 and 9.2, we would
      open up for hot standby too early, and queries could briefly see an
      inconsistent state. But 9.2 made it more visible, as we started to PANIC if
      we see a reference to a non-existing page during recovery, if we've already
      reached consistency. This is a fairly big patch, so back-patch to 9.2 only,
      where the issue is more visible. We can consider back-patching further after
      this has received some more testing in 9.2 and master.
      ee8b95e8
  22. Feb 20, 2013
  23. Feb 15, 2013
  24. Feb 13, 2013
    • Tom Lane's avatar
      Fix contrib/pg_trgm's similarity() function for trigram-free strings. · 7b058a2d
      Tom Lane authored
      Cases such as similarity('', '') produced a NaN result due to computing
      0/0.  Per discussion, make it return zero instead.
      
      This appears to be the basic cause of bug #7867 from Michele Baravalle,
      although it remains unclear why her installation doesn't think Cyrillic
      letters are letters.
      
      Back-patch to all active branches.
      7b058a2d
    • Tom Lane's avatar
      Fix bogus when-to-deregister-from-listener-array logic. · a25ccd61
      Tom Lane authored
      Since a backend adds itself to the global listener array during
      Exec_ListenPreCommit, it's inappropriate for it to remove itself during
      Exec_UnlistenCommit or Exec_UnlistenAllCommit --- that leads to failure
      when committing a transaction that did UNLISTEN then LISTEN, since we end
      up not registered though we should be.  (This leads to missing later
      notifications, or to Assert failures in assert-enabled builds.)  Instead
      deal with deregistering at the bottom of AtCommit_Notify, when we know the
      final state of the listenChannels list.
      
      Also, simplify the representation of registration status by replacing the
      transient backendHasExecutedInitialListen flag with an amRegisteredListener
      flag.
      
      Per report from Greg Sabino Mullane.  Back-patch to 9.0, where the problem
      was introduced during the LISTEN/NOTIFY rewrite.
      a25ccd61
  25. Feb 10, 2013
    • Tom Lane's avatar
      Further cleanup of gistsplit.c. · a2cf57f5
      Tom Lane authored
      After further reflection I was unconvinced that the existing coding is
      guaranteed to return valid union datums in every code path for multi-column
      indexes.  Fix that by forcing a gistunionsubkey() call at the end of the
      recursion.  Having done that, we can remove some clearly-redundant calls
      elsewhere.  This should be a little faster for multi-column indexes (since
      the previous coding would uselessly do such a call for each column while
      unwinding the recursion), as well as much harder to break.
      
      Also, simplify the handling of cases where one side or the other of a
      primary split contains only don't-care tuples.  The previous coding used a
      very ugly hack in removeDontCares() that essentially forced one random
      tuple to be treated as non-don't-care, providing a random initial choice of
      seed datum for the secondary split.  It seems unlikely that that method
      will give better-than-random splits.  Instead, treat such a split as
      degenerate and just let the next column determine the split, the same way
      that we handle fully degenerate cases where the two sides produce identical
      union datums.
      a2cf57f5
    • Tom Lane's avatar
      Remove useless picksplit-doesn't-support-secondary-split log spam. · 4ce3fa1f
      Tom Lane authored
      This LOG message was put in over five years ago with the evident
      expectation that we'd make all GiST opclasses support secondary split
      directly.  However, no such thing ever happened, and indeed the number of
      opclasses supporting it decreased to zero in 9.2.  The reason is that
      improving on the default implementation isn't that easy --- the
      opclass-specific code that did exist, before 9.2, doesn't appear to have
      been any improvement over the default.
      
      Hence, remove the message altogether.  There's certainly no point in
      nagging users about this in released branches, but I doubt that we'll
      ever implement complete opclass-specific support anyway.
      4ce3fa1f
    • Tom Lane's avatar
      Remove vestigial secondary-split support in gist_box_picksplit(). · 184dc0b1
      Tom Lane authored
      Not only is this implementation of secondary-split not better than the
      default implementation in gistsplit.c, it's actually worse.  The gistsplit.c
      code at least looks to see if switching the left and right sides would make
      a better merge with the previously-split tuples, while this doesn't.
      
      In any case it's rather useless to support secondary split only in an edge
      case.  There used to be more complete support for it here (in chooseLR()),
      but that was removed in commit 7f3bd868.
      It appears to me though that the chooseLR() code was really isomorphic to
      the default implementation, since it was still based on choosing the cheaper
      way of adding two sub-split vectors that had been chosen without regard to
      the primary split initially.  I think an implementation of secondary split
      that could beat the default implementation would have to be pretty fully
      integrated into the split algorithm, not plastered on at the end.
      
      Back-patch to 9.2, but not further; previous branches have the chooseLR()
      code which I don't feel a great need to mess with.  This is mainly so we
      just have two behaviors and not three among the various branches (IOW, this
      patch is cleanup for commit 7f3bd868's
      incomplete removal of secondary-split support).
      184dc0b1
    • Tom Lane's avatar
      Document and clean up gistsplit.c. · 2f0491dd
      Tom Lane authored
      Improve comments, rename some variables and functions, slightly simplify
      a couple of APIs, in an attempt to make this code readable by people other
      than its original author.
      
      Even though this is essentially just cosmetic, back-patch to all active
      branches, because otherwise it's going to make back-patching future fixes
      in this file very painful.
      2f0491dd
Loading