1. 09 Feb, 2012 1 commit
    • Heikki Linnakangas's avatar
      Add new keywords SNAPSHOT and TYPES to the keyword list in gram.y · 82e73ba0
      Heikki Linnakangas authored
      These were added to kwlist.h as unreserved keywords in separate patches,
      but authors forgot to add them to the corresponding list in gram.y.
      Because of that, even though they were supposed to be unreserved keywords,
      they could not be used as identifiers. src/tools/check_keywords.pl is your
      friend.
      82e73ba0
  2. 08 Feb, 2012 9 commits
    • Tom Lane's avatar
      Throw error sooner for unlogged GiST indexes. · 331bf671
      Tom Lane authored
      Throwing an error only after we've built the main index fork is pretty
      unfriendly when the table already contains data.  Per gripe from Jay
      Levitt.
      331bf671
    • Tom Lane's avatar
      Fix up dumping conditions for extension configuration tables. · d77354ea
      Tom Lane authored
      Various filters that were meant to prevent dumping of table data were not
      being applied to extension config tables, notably --exclude-table-data and
      --no-unlogged-table-data.  We also would bogusly try to dump data from
      views, sequences, or foreign tables, should an extension try to claim they
      were config tables.  Fix all that, and refactor/redocument to try to make
      this a bit less fragile.  This reverts the implementation, though not the
      feature, of commit 7b070e89, which had
      broken config-table dumping altogether :-(.
      
      It is still the case that the code will dump config-table data even if
      --schema is specified.  That behavior was intentional, as per the comments
      in getExtensionMembership, so I think it requires some more discussion
      before we change it.
      d77354ea
    • Tom Lane's avatar
      Check misplaced window functions before checking aggregate/group by sanity. · cb7c84fa
      Tom Lane authored
      If somebody puts a window function in WHERE, we should complain about that
      in so many words.  The previous coding tended to complain about the window
      function's arguments instead, which is likely to be misleading to users who
      are unclear on the semantics of window functions; as seen for example in
      bug #6440 from Matyas Novak.
      
      Just another example of how "add new code at the end" is frequently a bad
      heuristic.
      cb7c84fa
    • Tom Lane's avatar
      Support min/max index optimizations on boolean columns. · cbba55d6
      Tom Lane authored
      Since bool_and() is equivalent to min(), and bool_or() to max(), we might
      as well let them be index-optimized in the same way.  The practical value
      of this is debatable at best, but it seems nearly cost-free to enable it.
      Code-wise, we need only adjust the entries in pg_aggregate.  There is a
      measurable planning speed penalty for a query involving one of these
      aggregates, but it is only a few percent in simple cases, so that seems
      acceptable.
      
      Marti Raudsepp, reviewed by Abhijit Menon-Sen
      cbba55d6
    • Tom Lane's avatar
      Mark some more I/O-conversion-invoking functions as stable not volatile. · 3db6524f
      Tom Lane authored
      When written, textanycat, anytextcat, quote_literal, and quote_nullable
      were marked volatile, because they could invoke arbitrary type-specific
      output functions as part of casting their anyelement arguments to text.
      Since then, we have defined a project policy that I/O functions must not
      be volatile, as per commit aab353a6.
      So these functions can safely be downgraded to stable.  Most of the time
      this makes no difference since they'll get inlined anyway, but as noted
      by Andrew Dunstan, there are cases where the volatile marking prevents
      optimizations that the planner does before function inlining.  (I think
      I might have overlooked these functions in the earlier commit on the
      grounds that inlining would make it moot, but not so --- tgl)
      
      This change results in a change in the expected output of the json
      regression tests, because the planner can now flatten a sub-select
      that it failed to before.  The old output is preferable, but getting
      that back will require some as-yet-unfinished work on RowExpr handling.
      
      Marti Raudsepp
      3db6524f
    • Robert Haas's avatar
      Add transform functions for various temporal typmod coercisions. · c1389798
      Robert Haas authored
      This enables ALTER TABLE to skip table and index rebuilds in some cases.
      
      Noah Misch, with trivial changes by me.
      c1389798
    • Heikki Linnakangas's avatar
      Rename LWLockWaitUntilFree to LWLockAcquireOrWait. · 1a01560c
      Heikki Linnakangas authored
      LWLockAcquireOrWait makes it more clear that the lock is acquired if it's
      free.
      1a01560c
    • Robert Haas's avatar
      Fix typos pointed out by Noah Misch. · af7dd696
      Robert Haas authored
      af7dd696
    • Bruce Momjian's avatar
      Add opensp as a requirement for building the docs on Debian --- tested · a870c7fd
      Bruce Momjian authored
      on Debian Squeeze.
      a870c7fd
  3. 07 Feb, 2012 10 commits
    • Peter Eisentraut's avatar
      pg_dump: Add some const qualifiers · e09509bd
      Peter Eisentraut authored
      e09509bd
    • Peter Eisentraut's avatar
      pg_regress: Use target-specific variable instead of overriding make rule · d66b31c9
      Peter Eisentraut authored
      Use a target-specific variable to add to CPPFLAGS instead of writing a
      custom .c -> .o rule.  This will ensure that dependency tracking is
      used when enabled.
      d66b31c9
    • Heikki Linnakangas's avatar
      Fix typo in comment. · 5ece8eca
      Heikki Linnakangas authored
      5ece8eca
    • Robert Haas's avatar
      Support fls(). · 4f658dc8
      Robert Haas authored
      The immediate impetus for this is that Noah Misch's patch to elide
      unnecessary table and index rebuilds when changing typmod for temporal
      types uses it; and this is extracted from that patch, with some
      further commentary by me.  But it seems logically separate from the
      remainder of the patch, so I'm committing it separately; this is not
      the first time someone has wanted fls() in the backend and probably
      won't be the last.
      
      If we end up using this in more performance-critical spots it may be
      worthwhile to add some architecture-specific optimizations to our
      src/port version of fls() - e.g. any x86 platform can implement this
      using the assembly instruction BSRL.  But performance won't matter
      a bit for assessing typmod changes, so I'm not worried about that
      right now.
      4f658dc8
    • Robert Haas's avatar
      Add a transform function for varbit typmod coercisions. · f7d7dade
      Robert Haas authored
      This enables ALTER TABLE to skip table and index rebuilds when the
      new type is unconstraint varbit, or when the allowable number of bits
      is not decreasing.
      
      Noah Misch, with review and a fix for an OID collision by me.
      f7d7dade
    • Robert Haas's avatar
      Add a transform function for numeric typmod coercisions. · 3cc08008
      Robert Haas authored
      This enables ALTER TABLE to skip table and index rebuilds when a column
      is changed to an unconstrained numeric, or when the scale is unchanged
      and the precision does not decrease.
      
      Noah Misch, with a few stylistic changes and a fix for an OID
      collision by me.
      3cc08008
    • Robert Haas's avatar
      Add TIMING option to EXPLAIN, to allow eliminating of timing overhead. · af7914c6
      Robert Haas authored
      Sometimes it may be useful to get actual row counts out of EXPLAIN
      (ANALYZE) without paying the cost of timing every node entry/exit.
      With this patch, you can say EXPLAIN (ANALYZE, TIMING OFF) to get that.
      
      Tomas Vondra, reviewed by Eric Theise, with minor doc changes by me.
      af7914c6
    • Robert Haas's avatar
      pg_dump: Further reduce reliance on global variables. · 1631598e
      Robert Haas authored
      This is another round of refactoring to make things simpler for parallel
      pg_dump.  pg_dump.c now issues SQL queries through the relevant Archive
      object, rather than relying on the global variable g_conn.  This commit
      isn't quite enough to get rid of g_conn entirely, but it makes a big
      dent in its utilization and, along the way, manages to be slightly less
      code than before.
      1631598e
    • Peter Eisentraut's avatar
      createuser: Disable prompting by default · a347f96b
      Peter Eisentraut authored
      Do not prompt when options were not specified.  Assume --no-createdb,
      --no-createrole, --no-superuser by default.
      
      Also disable prompting for user name in dropdb, unless --interactive
      was specified.
      
      reviewed by Josh Kupershmidt
      a347f96b
    • Heikki Linnakangas's avatar
      When building with LWLOCK_STATS, initialize the stats in LWLockWaitUntilFree. · 15ad6f15
      Heikki Linnakangas authored
      If LWLockWaitUntilFree was called before the first LWLockAcquire call, you
      would either crash because of access to uninitialized array or account the
      acquisition incorrectly. LWLockConditionalAcquire doesn't have this problem
      because it doesn't update the lwlock stats.
      
      In practice, this never happens because there is no codepath where you would
      call LWLockWaitUntilfree before LWLockAcquire after a new process is
      launched. But that's just accidental, there's no guarantee that that's
      always going to be true in the future.
      
      Spotted by Jeff Janes.
      15ad6f15
  4. 06 Feb, 2012 8 commits
    • Tom Lane's avatar
      Fix postmaster to attempt restart after a hot-standby crash. · 442231d7
      Tom Lane authored
      The postmaster was coded to treat any unexpected exit of the startup
      process (i.e., the WAL replay process) as a catastrophic crash, and not try
      to restart it. This was OK so long as the startup process could not have
      any sibling postmaster children.  However, if a hot-standby backend
      crashes, we SIGQUIT the startup process along with everything else, and the
      resulting exit is hardly "unexpected".  Treating it as such meant we failed
      to restart a standby server after any child crash at all, not only a crash
      of the WAL replay process as intended.  Adjust that.  Back-patch to 9.0
      where hot standby was introduced.
      442231d7
    • Michael Meskes's avatar
    • Tom Lane's avatar
      Avoid throwing ERROR during WAL replay of DROP TABLESPACE. · 5fc78efc
      Tom Lane authored
      Although we will not even issue an XLOG_TBLSPC_DROP WAL record unless
      removal of the tablespace's directories succeeds, that does not guarantee
      that the same operation will succeed during WAL replay.  Foreseeable
      reasons for it to fail include temp files created in the tablespace by Hot
      Standby backends, wrong directory permissions on a standby server, etc etc.
      The original coding threw ERROR if replay failed to remove the directories,
      but that is a serious overreaction.  Throwing an error aborts recovery,
      and worse means that manual intervention will be needed to get the database
      to start again, since otherwise the same error will recur on subsequent
      attempts to replay the same WAL record.  And the consequence of failing to
      remove the directories is only that some probably-small amount of disk
      space is wasted, so it hardly seems justified to throw an error.
      Accordingly, arrange to report such failures as LOG messages and keep going
      when a failure occurs during replay.
      
      Back-patch to 9.0 where Hot Standby was introduced.  In principle such
      problems can occur in earlier releases, but Hot Standby increases the odds
      of trouble significantly.  Given the lack of field reports of such issues,
      I'm satisfied with patching back as far as the patch applies easily.
      5fc78efc
    • Robert Haas's avatar
      pg_dump: Remove global Archive pointer. · 3b157cf2
      Robert Haas authored
      Instead, everything that needs the Archive object now gets it as a
      parameter.  This is necessary infrastructure for parallel pg_dump,
      but is also amply justified by the ugliness of the current code
      (though a lot more than this is needed to fix that problem).
      3b157cf2
    • Robert Haas's avatar
      pg_dump: Reduce dependencies on global variables. · 622f8628
      Robert Haas authored
      Change various places in the code that are referencing the global
      Archive object g_fout to instead reference the Archive object fout
      which is already being passed as a parameter.  For parallel pg_dump to
      work, we're going to need multiple Archive(Handle) objects, so the
      real solution here is to pass down the Archive object to everywhere
      that it needs to go, but we might as well pick the low-hanging fruit
      first.
      622f8628
    • Tom Lane's avatar
      Add locking around WAL-replay modification of shared-memory variables. · c6d76d7c
      Tom Lane authored
      Originally, most of this code assumed that no Postgres backends could be
      running concurrently with it, and so no locking could be needed.  That
      assumption fails in Hot Standby.  While it's still true that Hot Standby
      backends should never change values like nextXid, they can examine them,
      and consistency is important in some cases such as when computing a
      snapshot.  Therefore, prudence requires that WAL replay code obtain the
      relevant locks when modifying such variables, even though it can examine
      them without taking a lock.  We were following that coding rule in some
      places but not all.  This commit applies the coding rule uniformly to all
      updates of ShmemVariableCache and MultiXactState fields; a search of the
      replay routines did not find any other cases that seemed to be at risk.
      
      In addition, this commit fixes a longstanding thinko in replay of NEXTOID
      and checkpoint records: we tried to advance nextOid only if it was behind
      the value in the WAL record, but the comparison would draw the wrong
      conclusion if OID wraparound had occurred since the previous value.
      Better to just unconditionally assign the new value, since OID assignment
      shouldn't be happening during replay anyway.
      
      The additional locking seems to be more in the nature of future-proofing
      than fixing any live bug, so I am not going to back-patch it.  The NEXTOID
      fix will be back-patched separately.
      c6d76d7c
    • Robert Haas's avatar
      Remove dead declaration. · 96abd817
      Robert Haas authored
      96abd817
    • Alvaro Herrera's avatar
      fe-misc.c depends on pg_config_paths.h · 0c88086d
      Alvaro Herrera authored
      Declare this in Makefile to avoid failures in parallel compiles.
      
      Author: Lionel Elie Mamane
      0c88086d
  5. 05 Feb, 2012 4 commits
    • Tom Lane's avatar
      Fix transient clobbering of shared buffers during WAL replay. · 17118825
      Tom Lane authored
      RestoreBkpBlocks was in the habit of zeroing and refilling the target
      buffer; which was perfectly safe when the code was written, but is unsafe
      during Hot Standby operation.  The reason is that we have coding rules
      that allow backends to continue accessing a tuple in a heap relation while
      holding only a pin on its buffer.  Such a backend could see transiently
      zeroed data, if WAL replay had occasion to change other data on the page.
      This has been shown to be the cause of bug #6425 from Duncan Rance (who
      deserves kudos for developing a sufficiently-reproducible test case) as
      well as Bridget Frey's re-report of bug #6200.  It most likely explains the
      original report as well, though we don't yet have confirmation of that.
      
      To fix, change the code so that only bytes that are supposed to change will
      change, even transiently.  This actually saves cycles in RestoreBkpBlocks,
      since it's not writing the same bytes twice.
      
      Also fix seq_redo, which has the same disease, though it has to work a bit
      harder to meet the requirement.
      
      So far as I can tell, no other WAL replay routines have this type of bug.
      In particular, the index-related replay routines, which would certainly be
      broken if they had to meet the same standard, are not at risk because we
      do not have coding rules that allow access to an index page when not
      holding a buffer lock on it.
      
      Back-patch to 9.0 where Hot Standby was added.
      17118825
    • Tom Lane's avatar
      Improve comment. · ee68a441
      Tom Lane authored
      ee68a441
    • Tom Lane's avatar
      Add missing Assert and fix inaccurate elog message in standby_redo(). · 2af72cef
      Tom Lane authored
      All other WAL redo routines either call RestoreBkpBlocks() or Assert that
      they haven't been passed any backup blocks.  Make this one do likewise.
      Also, fix incorrect routine name in its failure message.
      2af72cef
    • Tom Lane's avatar
      Allow SQL-language functions to reference parameters by name. · 9bff0780
      Tom Lane authored
      Matthew Draper, reviewed by Hitoshi Harada
      9bff0780
  6. 04 Feb, 2012 3 commits
  7. 03 Feb, 2012 1 commit
  8. 02 Feb, 2012 3 commits
    • Peter Eisentraut's avatar
      ecpg: Improve test building · 69e9768e
      Peter Eisentraut authored
      Further improve on commit c75e1436.
      Instead of building both .o files and binaries in the same make rule,
      just rely on the normal .c -> .o rule.  This will ensure that
      dependency tracking is used when enabled.  To do this, disable the
      implicit direct .c -> binary rule globally, which will also prevent
      the original problem (*.dSYM junk) from reappearing elsewhere.
      69e9768e
    • Robert Haas's avatar
      Allow spgist's text_ops to handle pattern-matching operators. · 0ed7445d
      Robert Haas authored
      This was presumably intended to work this way all along, but a few key
      bits of indxpath.c didn't get the memo.
      
      Robert Haas and Tom Lane
      0ed7445d
    • Robert Haas's avatar
      Avoid re-checking for visibility map extension too frequently. · b4e07417
      Robert Haas authored
      When testing bits (but not when setting or clearing them), we now
      won't check whether the map has been extended.  This significantly
      improves performance in the case where the visibility map doesn't
      exist yet, by avoiding an extra system call per tuple.  To make
      sure backends notice eventually, send an smgr inval on VM extension.
      
      Dean Rasheed, with minor modifications by me.
      b4e07417
  9. 01 Feb, 2012 1 commit