1. 18 Nov, 2010 5 commits
    • Tom Lane's avatar
      Dept of second thoughts: don't try to push LIMIT below a SRF. · 48c348f8
      Tom Lane authored
      If we have Limit->Result->Sort, the Result might be projecting a tlist
      that contains a set-returning function.  If so, it's possible for the
      SRF to sometimes return zero rows, which means we could need to fetch
      more than N rows from the Sort in order to satisfy LIMIT N.
      So top-N sorting cannot be used in this scenario.
      48c348f8
    • Robert Haas's avatar
      Minor corrections to dummy_seclabel documentation. · 1fc2d60d
      Robert Haas authored
      Problems noted by Thom Brown.
      1fc2d60d
    • Heikki Linnakangas's avatar
      ecf70b91
    • Tom Lane's avatar
      Further fallout from the MergeAppend patch. · 6fbc323c
      Tom Lane authored
      Fix things so that top-N sorting can be used in child Sort nodes of a
      MergeAppend node, when there is a LIMIT and no intervening joins or
      grouping.  Actually doing this on the executor side isn't too bad,
      but it's a bit messier to get the planner to cost it properly.
      Per gripe from Robert Haas.
      
      In passing, fix an oversight in the original top-N-sorting patch:
      query_planner should not assume that a LIMIT can be used to make an
      explicit sort cheaper when there will be grouping or aggregation in
      between.  Possibly this should be back-patched, but I'm not sure the
      mistake is serious enough to be a real problem in practice.
      6fbc323c
    • Robert Haas's avatar
      Document the dummy_seclabel contrib module. · 45768d10
      Robert Haas authored
      KaiGai Kohei, with editing and markup fixes by me.
      45768d10
  2. 17 Nov, 2010 3 commits
    • Tom Lane's avatar
      Make TRUNCATE ... RESTART IDENTITY restart sequences transactionally. · 511e902b
      Tom Lane authored
      In the previous coding, we simply issued ALTER SEQUENCE RESTART commands,
      which do not roll back on error.  This meant that an error between
      truncating and committing left the sequences out of sync with the table
      contents, with potentially bad consequences as were noted in a Warning on
      the TRUNCATE man page.
      
      To fix, create a new storage file (relfilenode) for a sequence that is to
      be reset due to RESTART IDENTITY.  If the transaction aborts, we'll
      automatically revert to the old storage file.  This acts just like a
      rewriting ALTER TABLE operation.  A penalty is that we have to take
      exclusive lock on the sequence, but since we've already got exclusive lock
      on its owning table, that seems unlikely to be much of a problem.
      
      The interaction of this with usual nontransactional behaviors of sequence
      operations is a bit weird, but it's hard to see what would be completely
      consistent.  Our choice is to discard cached-but-unissued sequence values
      both when the RESTART is executed, and at rollback if any; but to not touch
      the currval() state either time.
      
      In passing, move the sequence reset operations to happen before not after
      any AFTER TRUNCATE triggers are fired.  The previous ordering was not
      logically sensible, but was forced by the need to minimize inconsistency
      if the triggers caused an error.  Transactional rollback is a much better
      solution to that.
      
      Patch by Steve Singer, rather heavily adjusted by me.
      511e902b
    • Peter Eisentraut's avatar
      Additional fixes for parallel make · cfad144f
      Peter Eisentraut authored
      Add some additional dependencies to constrain the build order to prevent
      parallel make from failing.  In the case of src/Makefile, this is likely to be
      too complicated to be worth maintaining, so just add .NOTPARALLEL to get the
      old for-loop-like behavior.
      
      More fine-tuning might be necessary for some platforms or configurations.
      cfad144f
    • Andrew Dunstan's avatar
  3. 16 Nov, 2010 2 commits
    • Magnus Hagander's avatar
      Send paramHandle to subprocesses as 64-bit on Win64 · 4acf99b2
      Magnus Hagander authored
      The handle to the shared memory segment containing startup
      parameters was sent as 32-bit even on 64-bit systems. Since
      HANDLEs appear to be allocated sequentially this shouldn't
      be a problem until we reach 2^32 open handles in the postmaster,
      but a 64-bit value should be sent across as 64-bit, and not
      zero out the top 32 bits.
      
      Noted by Tom Lane.
      4acf99b2
    • Heikki Linnakangas's avatar
      The GiST scan algorithm uses LSNs to detect concurrent pages splits, but · 2edc5cd4
      Heikki Linnakangas authored
      temporary indexes are not WAL-logged. We used a constant LSN for temporary
      indexes, on the assumption that we don't need to worry about concurrent page
      splits in temporary indexes because they're only visible to the current
      session. But that assumption is wrong, it's possible to insert rows and
      split pages in the same session, while a scan is in progress. For example,
      by opening a cursor and fetching some rows, and INSERTing new rows before
      fetching some more.
      
      Fix by generating fake increasing LSNs, used in place of real LSNs in
      temporary GiST indexes.
      2edc5cd4
  4. 15 Nov, 2010 10 commits
  5. 14 Nov, 2010 2 commits
    • Tom Lane's avatar
      Fix canAcceptConnections() bugs introduced by replication-related patches. · 3892a2d8
      Tom Lane authored
      We must not return any "okay to proceed" result code without having checked
      for too many children, else we might fail later on when trying to add the
      new child to one of the per-child state arrays.  It's not clear whether
      this oversight explains Stefan Kaltenbrunner's recent report, but it could
      certainly produce a similar symptom.
      
      Back-patch to 8.4; the logic was not broken before that.
      3892a2d8
    • Tom Lane's avatar
      Work around make 3.80 bug with long expansions of $(eval). · 1bd20121
      Tom Lane authored
      3.80 breaks if the expansion of $(eval) is long enough to require expansion
      of its internal variable_buffer.  For the purposes of $(recurse) that means
      it'll work so long as no single evaluation of _create_recursive_target
      produces more than 195 bytes.  We can manage that by looping over
      subdirectories outside the call instead of complicating the generated rule.
      This coding is simpler and more readable anyway.
      
      Or at least, this works for me.  We'll see if the buildfarm likes it.
      1bd20121
  6. 13 Nov, 2010 2 commits
  7. 12 Nov, 2010 5 commits
    • Robert Haas's avatar
      Move copydir() prototype into its own header file. · 11e482c3
      Robert Haas authored
      Having this in src/include/port.h makes no sense, now that copydir.c lives
      in src/backend/strorage rather than src/port.  Along the way, remove an
      obsolete comment from contrib/pg_upgrade that makes reference to the old
      location.
      11e482c3
    • Tom Lane's avatar
      Fix old oversight in const-simplification of COALESCE() expressions. · d7304244
      Tom Lane authored
      Once we have found a non-null constant argument, there is no need to
      examine additional arguments of the COALESCE.  The previous coding got it
      right only if the constant was in the first argument position; otherwise
      it tried to simplify following arguments too, leading to unexpected
      behavior like this:
      
      regression=# select coalesce(f1, 42, 1/0) from int4_tbl;
      ERROR:  division by zero
      
      It's a minor corner case, but a bug is a bug, so back-patch all the way.
      d7304244
    • Peter Eisentraut's avatar
      Improved parallel make support · 19e231bb
      Peter Eisentraut authored
      Replace for loops in makefiles with proper dependencies.  Parallel
      make can now span across directories.  Also, make -k and make -q work
      properly.
      
      GNU make 3.80 or newer is now required.
      19e231bb
    • Peter Eisentraut's avatar
      docs -> documentation · d6754f67
      Peter Eisentraut authored
      d6754f67
    • Heikki Linnakangas's avatar
      Add missing support for removing foreign data wrapper / server privileges · e356743f
      Heikki Linnakangas authored
      belonging to a user at DROP OWNED BY. Foreign data wrappers and servers
      don't do anything useful yet, which is why no-one has noticed, but since we
      have them, seems prudent to fix this. Per report from Chetan Suttraway.
      Backpatch to 9.0, 8.4 has the same problem but this patch didn't apply
      there so I'm not going to bother.
      e356743f
  8. 11 Nov, 2010 1 commit
  9. 10 Nov, 2010 4 commits
  10. 09 Nov, 2010 6 commits
    • Alvaro Herrera's avatar
    • Tom Lane's avatar
      Improve pg_ctl's man page. · 0de92fd1
      Tom Lane authored
      Explicitly document that the -o options of pg_ctl init mode are meant
      for initdb, not postgres (Euler Taveira de Oliveira).  Assorted other
      copy-editing (Tom).
      0de92fd1
    • Tom Lane's avatar
      Repair memory leakage while ANALYZE-ing complex index expressions. · 80fb2c1f
      Tom Lane authored
      The general design of memory management in Postgres is that intermediate
      results computed by an expression are not freed until the end of the tuple
      cycle.  For expression indexes, ANALYZE has to re-evaluate each expression
      for each of its sample rows, and it wasn't bothering to free intermediate
      results until the end of processing of that index.  This could lead to very
      substantial leakage if the intermediate results were large, as in a recent
      example from Jakub Ouhrabka.  Fix by doing ResetExprContext for each sample
      row.  This necessitates adding a datumCopy step to ensure that the final
      expression value isn't recycled too.  Some quick testing suggests that this
      change adds at worst about 10% to the time needed to analyze a table with
      an expression index; which is annoying, but seems a tolerable price to pay
      to avoid unexpected out-of-memory problems.
      
      Back-patch to all supported branches.
      80fb2c1f
    • Heikki Linnakangas's avatar
      In rewriteheap.c (used by VACUUM FULL and CLUSTER), calculate the tuple · 000efc3d
      Heikki Linnakangas authored
      length stored in the line pointer the same way it's calculated in the normal
      heap_insert() codepath. As noted by Jeff Davis, the length stored by
      raw_heap_insert() included padding but the one stored by the normal codepath
      did not. While the mismatch seems to be harmless, inconsistency isn't good,
      and the normal codepath has received a lot more testing over the years.
      
      Backpatch to 8.3 where the heap rewrite code was introduced.
      000efc3d
    • Alvaro Herrera's avatar
      plpython has plpy.Error instead of plpy.ERROR · 73bc5218
      Alvaro Herrera authored
      Author: Marti Raudsepp <marti@juffo.org>
      73bc5218
    • Tom Lane's avatar
      Fix error handling in temp-file deletion with log_temp_files active. · 54428dbe
      Tom Lane authored
      The original coding in FileClose() reset the file-is-temp flag before
      unlinking the file, so that if control came back through due to an error,
      it wouldn't try to unlink the file twice.  This was correct when written,
      but when the log_temp_files feature was added, the logging action was put
      in between those two steps.  An error occurring during the logging action
      --- such as a query cancel --- would result in the unlink not getting done
      at all, as in recent report from Michael Glaesemann.
      
      To fix this, make sure that we do both the stat and the unlink before doing
      anything that could conceivably CHECK_FOR_INTERRUPTS.  There is a judgment
      call here, which is which log message to emit first: if you can see only
      one, which should it be?  I chose to log unlink failure at the risk of
      losing the log_temp_files log message --- after all, if the unlink does
      fail, the temp file is still there for you to see.
      
      Back-patch to all versions that have log_temp_files.  The code was OK
      before that.
      54428dbe