1. 22 Feb, 2013 11 commits
    • Alvaro Herrera's avatar
      Fix copy-and-pasteo · f03a7797
      Alvaro Herrera authored
      Harmless, but it's certainly better like this.
      
      Noticed by Andres Freund
      f03a7797
    • Alvaro Herrera's avatar
      Add pg_xlogdump contrib program · 639ed4e8
      Alvaro Herrera authored
      This program relies on rm_desc backend routines and the xlogreader
      infrastructure to emit human-readable rendering of WAL records.
      
      Author: Andres Freund, with many reworks by Álvaro
      Reviewed (in a much earlier version) by Peter Eisentraut
      639ed4e8
    • Tom Lane's avatar
      Fix some planning oversights in postgres_fdw. · c0c6acdf
      Tom Lane authored
      Include eval costs of local conditions in remote-estimate mode, and don't
      assume the remote eval cost is zero in local-estimate mode.  (The best
      we can do with that at the moment is to assume a seqscan, which may well
      be wildly pessimistic ... but zero won't do at all.)
      
      To get a reasonable local estimate, we need to know the relpages count
      for the remote rel, so improve the ANALYZE code to fetch that rather
      than just setting the foreign table's relpages field to zero.
      c0c6acdf
    • Alvaro Herrera's avatar
      Blind attempt at fixing the non-MSVC Windows builds · af0a4c59
      Alvaro Herrera authored
      Apparently, they need -DBUILDING_DLL for the Assert() declarations to
      work correctly.
      af0a4c59
    • Tom Lane's avatar
      Fix whole-row references in postgres_fdw. · 6da378db
      Tom Lane authored
      The optimization to not retrieve unnecessary columns wasn't smart enough.
      Noted by Thom Brown.
      6da378db
    • Tom Lane's avatar
      Change postgres_fdw to show casts as casts, not underlying function calls. · 211e157a
      Tom Lane authored
      On reflection this method seems to be exposing an unreasonable amount of
      implementation detail.  It wouldn't matter when talking to a remote server
      of the identical Postgres version, but it seems likely to make things worse
      not better if the remote is a different version with different casting
      infrastructure.  Instead adopt ruleutils.c's policy of regurgitating the
      cast as it was originally specified; including not showing it at all, if
      it was implicit to start with.  (We must do that because for some datatypes
      explicit and implicit casts have different semantics.)
      211e157a
    • Tom Lane's avatar
      Get rid of postgres_fdw's assumption that remote type OIDs match ours. · 5fd386bb
      Tom Lane authored
      The only place we depended on that was in sending numeric type OIDs in
      PQexecParams; but we can replace that usage with explicitly casting
      each Param symbol in the query string, so that the types are specified
      to the remote by name not OID.  This makes no immediate difference but
      will be essential if we ever hope to support use of non-builtin types.
      5fd386bb
    • Heikki Linnakangas's avatar
      Fix thinko in previous commit. · 6c4f6664
      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.
      6c4f6664
    • Tom Lane's avatar
      Adjust postgres_fdw's search path handling. · 6d060494
      Tom Lane authored
      Set the remote session's search path to exactly "pg_catalog" at session
      start, then schema-qualify only names that aren't in that schema.  This
      greatly reduces clutter in the generated SQL commands, as seen in the
      regression test changes.  Per discussion.
      
      Also, rethink use of FirstNormalObjectId as the "built-in object" cutoff
      --- FirstBootstrapObjectId is safer, since the former will accept
      objects in information_schema for instance.
      6d060494
    • Heikki Linnakangas's avatar
      If recovery.conf is created after "pg_ctl stop -m i", do crash recovery. · abf5c5c9
      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.
      abf5c5c9
    • Alvaro Herrera's avatar
      Move relpath() to libpgcommon · a7301839
      Alvaro Herrera authored
      This enables non-backend code, such as pg_xlogdump, to use it easily.
      The previous location, in src/backend/catalog/catalog.c, made that
      essentially impossible because that file depends on many backend-only
      facilities; so this needs to live separately.
      a7301839
  2. 21 Feb, 2013 4 commits
  3. 20 Feb, 2013 3 commits
  4. 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
  5. 16 Feb, 2013 1 commit
  6. 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
  7. 14 Feb, 2013 3 commits
  8. 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
  9. 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
  10. 11 Feb, 2013 2 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