1. 21 Feb, 2013 1 commit
    • Tom Lane's avatar
      Add postgres_fdw contrib module. · d0d75c40
      Tom Lane authored
      There's still a lot of room for improvement, but it basically works,
      and we need this to be present before we can do anything much with the
      writable-foreign-tables patch.  So let's commit it and get on with testing.
      
      Shigeru Hanada, reviewed by KaiGai Kohei and Tom Lane
      d0d75c40
  2. 20 Feb, 2013 3 commits
  3. 18 Feb, 2013 3 commits
    • Alvaro Herrera's avatar
      Move ExceptionalCondition back to postgres.h · a40d09e2
      Alvaro Herrera authored
      It needs to be defined in the backend even when assertions are not
      enabled.  It's cleaner to put it back, than create a separate #ifdef
      section in c.h.
      
      Per trouble report from Jeff Janes
      a40d09e2
    • Alvaro Herrera's avatar
      Split pgstat file in smaller pieces · 187492b6
      Alvaro Herrera authored
      We now write one file per database and one global file, instead of
      having the whole thing in a single huge file.  This reduces the I/O that
      must be done when partial data is required -- which is all the time,
      because each process only needs information on its own database anyway.
      Also, the autovacuum launcher does not need data about tables and
      functions in each database; having the global stats for all DBs is
      enough.
      
      Catalog version bumped because we have a new subdir under PGDATA.
      
      Author: Tomas Vondra.  Some rework by Álvaro
      Testing by Jeff Janes
      Other discussion by Heikki Linnakangas, Tom Lane.
      187492b6
    • Peter Eisentraut's avatar
      Add ALTER ROLE ALL SET command · 9475db3a
      Peter Eisentraut authored
      This generalizes the existing ALTER ROLE ... SET and ALTER DATABASE
      ... SET functionality to allow creating settings that apply to all users
      in all databases.
      
      reviewed by Pavel Stehule
      9475db3a
  4. 16 Feb, 2013 1 commit
  5. 15 Feb, 2013 5 commits
    • Heikki Linnakangas's avatar
      Better fix for "unarchived WAL files get deleted on crash recovery" bug. · 1bd42cd7
      Heikki Linnakangas authored
      Revert my earlier fix for the bug that unarchived WAL files get deleted on
      crash recovery, commit c9cc7e05. We create
      a .done file for files streamed or restored from archive, so the WAL file
      recycling logic used during normal operation works just as well during
      archive recovery.
      
      Per Fujii Masao's suggestion.
      1bd42cd7
    • Simon Riggs's avatar
      Force archive_status of .done for xlogs created by dearchival/replication. · c2f79ba2
      Simon Riggs authored
      This is a forward-patch of commit 6f4b8a4f4f7a2d683ff79ab59d3693714b965e3d,
      applied to 9.2 back in August. The plan was to do something else in master,
      but it looks like it's not going to happen, so let's just apply the 9.2
      solution to master as well.
      
      Fujii Masao
      c2f79ba2
    • Heikki Linnakangas's avatar
      Don't delete unarchived WAL files during crash recovery. · c9cc7e05
      Heikki Linnakangas authored
      Bug reported by Jehan-Guillaume (ioguix) de Rorthais. This was introduced
      with the change to keep WAL files restored from archive in pg_xlog, in 9.2.
      c9cc7e05
    • Peter Eisentraut's avatar
      pgindent: Fix order in instructions · 8e6c8da1
      Peter Eisentraut authored
      The previous order of steps didn't literally work, because git clean
      -fdx would delete the downloaded typedefs.list.  Also, pgindent needs to
      be called with a path when one is in at the top of the build tree.
      8e6c8da1
    • Tom Lane's avatar
      Invent pre-commit/pre-prepare/pre-subcommit events for xact callbacks. · fdaf4486
      Tom Lane authored
      Currently it's only possible for loadable modules to get control during
      post-commit cleanup of a transaction.  That doesn't work too well if they
      want to do something that could throw an error; for example, an FDW might
      need to issue a remote commit, which could well fail.  To improve matters,
      extend the existing APIs for XactCallback and SubXactCallback functions
      to provide new pre-commit events for this purpose.
      
      The release notes will need to mention that existing callback functions
      should be checked to make sure they don't do something unwanted when one
      of the new event types occurs.  In the examples within our source tree,
      contrib/sepgsql was fine but plpgsql had been a bit too cute.
      fdaf4486
  6. 14 Feb, 2013 3 commits
  7. 13 Feb, 2013 4 commits
    • Tom Lane's avatar
      Fix CVE-2013-0255 properly. · 71627f3d
      Tom Lane authored
      Revert commit ab0f7b60 (in HEAD only)
      in favor of the proper solution, which is to declare enum_recv() correctly
      in the system catalogs.  It should be declared to take type "internal"
      not "cstring".
      
      Also improve the type_sanity regression test, which should have caught
      this typo, so that it actually would.  Most of the relevant checks on
      the signature of type I/O functions should not have been restricted to
      basetypes/pseudotypes, as they should apply to any type's I/O functions.
      71627f3d
    • Tom Lane's avatar
      Fix contrib/pg_trgm's similarity() function for trigram-free strings. · 9728eda7
      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.
      9728eda7
    • Tom Lane's avatar
      Fix bogus when-to-deregister-from-listener-array logic. · cd89965a
      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.
      cd89965a
    • Heikki Linnakangas's avatar
      Update visibility map in the second phase of vacuum. · fdf9e211
      Heikki Linnakangas authored
      There's a high chance that a page becomes all-visible when the second phase
      of vacuum removes all the dead tuples on it, so it makes sense to check for
      that. Otherwise the visibility map won't get updated until the next vacuum.
      
      Pavan Deolasee, reviewed by Jeff Janes.
      fdf9e211
  8. 12 Feb, 2013 4 commits
    • Alvaro Herrera's avatar
      Rename "string" pstrdup argument to "in" · 0e81ddde
      Alvaro Herrera authored
      The former name collides with a symbol also used in the isolation test's
      parser, causing assorted failures in certain platforms.
      0e81ddde
    • Alvaro Herrera's avatar
      Don't build libpgcommon_srv.a just yet · 0f980b0e
      Alvaro Herrera authored
      It's empty, and some archivers do not support that case.
      0f980b0e
    • Alvaro Herrera's avatar
      Create libpgcommon, and move pg_malloc et al to it · 8396447c
      Alvaro Herrera authored
      libpgcommon is a new static library to allow sharing code among the
      various frontend programs and backend; this lets us eliminate duplicate
      implementations of common routines.  We avoid libpgport, because that's
      intended as a place for porting issues; per discussion, it seems better
      to keep them separate.
      
      The first use case, and the only implemented by this patch, is pg_malloc
      and friends, which many frontend programs were already using.
      
      At the same time, we can use this to provide palloc emulation functions
      for the frontend; this way, some palloc-using files in the backend can
      also be used by the frontend cleanly.  To do this, we change palloc() in
      the backend to be a function instead of a macro on top of
      MemoryContextAlloc().  This was previously believed to cause loss of
      performance, but this implementation has been tweaked by Tom and Andres
      so that on modern compilers it provides a slight improvement over the
      previous one.
      
      This lets us clean up some places that were already with
      localized hacks.
      
      Most of the pg_malloc/palloc changes in this patch were authored by
      Andres Freund. Zoltán Böszörményi also independently provided a form of
      that.  libpgcommon infrastructure was authored by Álvaro.
      8396447c
    • Peter Eisentraut's avatar
  9. 11 Feb, 2013 3 commits
    • Heikki Linnakangas's avatar
      Support unlogged GiST index. · 62401db4
      Heikki Linnakangas authored
      The reason this wasn't supported before was that GiST indexes need an
      increasing sequence to detect concurrent page-splits. In a regular WAL-
      logged GiST index, the LSN of the page-split record is used for that
      purpose, and in a temporary index, we can get away with a backend-local
      counter. Neither of those methods works for an unlogged relation.
      
      To provide such an increasing sequence of numbers, create a "fake LSN"
      counter that is saved and restored across shutdowns. On recovery, unlogged
      relations are blown away, so the counter doesn't need to survive that
      either.
      
      Jeevan Chalke, based on discussions with Robert Haas, Tom Lane and me.
      62401db4
    • Heikki Linnakangas's avatar
      Fix checkpoint after fast promotion. · b669f416
      Heikki Linnakangas authored
      The intention was to request a regular online checkpoint immediately after
      end of recovery, when performing "fast promotion". However, because the
      checkpoint was requested before other backends were allowed to write WAL,
      the checkpointer process performed a restartpoint rather than a checkpoint.
      
      Delay the RequestCheckPoint call until after recovery has truly ended, so
      that you get a real checkpoint.
      b669f416
    • Heikki Linnakangas's avatar
      Include previous TLI in end-of-recovery and shutdown checkpoint records. · 7803e932
      Heikki Linnakangas authored
      This isn't used for anything but a sanity check at the moment, but it could
      be highly valuable for debugging purposes. It could also be used to recreate
      timeline history by traversing WAL, which seems useful.
      7803e932
  10. 10 Feb, 2013 4 commits
    • Tom Lane's avatar
      Further cleanup of gistsplit.c. · c352ea2d
      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.
      c352ea2d
    • Tom Lane's avatar
      Remove useless picksplit-doesn't-support-secondary-split log spam. · db3d7e9f
      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.
      db3d7e9f
    • Tom Lane's avatar
      Remove vestigial secondary-split support in gist_box_picksplit(). · dacc185f
      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).
      dacc185f
    • Tom Lane's avatar
      Document and clean up gistsplit.c. · 0fd0f368
      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.
      0fd0f368
  11. 09 Feb, 2013 5 commits
  12. 08 Feb, 2013 4 commits
    • Tom Lane's avatar
      Simplify box_overlap computations. · f806c191
      Tom Lane authored
      Given the assumption that a box's high coordinates are not less than its
      low coordinates, the tests in box_ov() are overly complicated and can be
      reduced to about half as much work.  Since many other functions in
      geo_ops.c rely on that assumption, there doesn't seem to be a good reason
      not to use it here.
      
      Per discussion of Alexander Korotkov's GiST fix, which was already using
      the simplified logic (in a non-fuzzy form, but the equivalence holds just
      as well for fuzzy).
      f806c191
    • Tom Lane's avatar
      Fix gist_box_same and gist_point_consistent to handle fuzziness correctly. · 3c29b196
      Tom Lane authored
      While there's considerable doubt that we want fuzzy behavior in the
      geometric operators at all (let alone as currently implemented), nobody is
      stepping forward to redesign that stuff.  In the meantime it behooves us
      to make sure that index searches agree with the behavior of the underlying
      operators.  This patch fixes two problems in this area.
      
      First, gist_box_same was using fuzzy equality, but it really needs to use
      exact equality to prevent not-quite-identical upper index keys from being
      treated as identical, which for example would prevent an existing upper
      key from being extended by an amount less than epsilon.  This would result
      in inconsistent indexes.  (The next release notes will need to recommend
      that users reindex GiST indexes on boxes, polygons, circles, and points,
      since all four opclasses use gist_box_same.)
      
      Second, gist_point_consistent used exact comparisons for upper-page
      comparisons in ~= searches, when it needs to use fuzzy comparisons to
      ensure it finds all matches; and it used fuzzy comparisons for point <@ box
      searches, when it needs to use exact comparisons because that's what the
      <@ operator (rather inconsistently) does.
      
      The added regression test cases illustrate all three misbehaviors.
      
      Back-patch to all active branches.  (8.4 did not have GiST point_ops,
      but it still seems prudent to apply the gist_box_same patch to it.)
      
      Alexander Korotkov, reviewed by Noah Misch
      3c29b196
    • Alvaro Herrera's avatar
      Clean up c.h / postgres.h after Assert() move · 381d4b70
      Alvaro Herrera authored
      Per Tom
      381d4b70
    • Alvaro Herrera's avatar
      Fix Xmax freeze conditions · 5766228b
      Alvaro Herrera authored
      I broke this in 0ac5ad51; previously, freezing a tuple marked with an
      IS_MULTI xmax was not necessary.
      
      Per brokenness report from Jeff Janes.
      5766228b