1. 20 Nov, 2010 3 commits
    • Robert Haas's avatar
      Attempt to fix breakage caused by signed integer conversion patch. · 815810ed
      Robert Haas authored
      Use INT_MIN rather than INT32_MIN as we do elsewhere in the code, and
      try to work around nonexistence of INT64_MIN if necessary.  Adjust the
      new regression tests to something hopefully saner, per observation by
      Tom Lane.
      815810ed
    • Tom Lane's avatar
      Fix leakage of cost_limit when multiple autovacuum workers are active. · b58c2505
      Tom Lane authored
      When using default autovacuum_vac_cost_limit, autovac_balance_cost relied
      on VacuumCostLimit to contain the correct global value ... but after the
      first time through in a particular worker process, it didn't, because we'd
      trashed it in previous iterations.  Depending on the state of other autovac
      workers, this could result in a steady reduction of the effective
      cost_limit setting as a particular worker processed more and more tables,
      causing it to go slower and slower.  Spotted by Simon Poole (bug #5759).
      Fix by saving and restoring the GUC variables in the loop in do_autovacuum.
      
      In passing, improve a few comments.
      
      Back-patch to 8.3 ... the cost rebalancing code has been buggy since it was
      put in.
      b58c2505
    • Robert Haas's avatar
      Speed up conversion of signed integers to C strings. · 4fc115b2
      Robert Haas authored
      A hand-coded implementation turns out to be much faster than calling
      printf().  In passing, add a few more regresion tests.
      
      Andres Freund, with assorted, mostly cosmetic changes.
      4fc115b2
  2. 19 Nov, 2010 1 commit
    • Tom Lane's avatar
      Improve relation width estimation for subqueries. · 0f61d4dd
      Tom Lane authored
      As per the ancient comment for set_rel_width, it really wasn't much good
      for relations that aren't plain tables: it would never find any stats and
      would always fall back on datatype-based estimates, which are often pretty
      silly.  Fix that by copying up width estimates from the subquery planning
      process.
      
      At some point we might want to do this for CTEs too, but that would be a
      significantly more invasive patch because the sub-PlannerInfo is no longer
      accessible by the time it's needed.  I refrained from doing anything about
      that, partly for fear of breaking the unmerged CTE-related patches.
      
      In passing, also generate less bogus width estimates for whole-row Vars.
      
      Per a gripe from Jon Nelson.
      0f61d4dd
  3. 18 Nov, 2010 7 commits
    • Tom Lane's avatar
      Improve plpgsql's error reporting for no-such-column cases. · fe24d781
      Tom Lane authored
      Given a column reference foo.bar, where there is a composite plpgsql
      variable foo but it doesn't contain a column bar, the pre-9.0 coding would
      immediately throw a "record foo has no field bar" error.  In 9.0 the parser
      hook instead falls through to let the core parser see if it can resolve the
      reference.  If not, you get a complaint about "missing FROM-clause entry
      for table foo", which while in some sense correct isn't terribly helpful.
      Complicate things a bit so that we can throw the old error message if
      neither the core parser nor the hook are able to resolve the column
      reference, while not changing the behavior in any other case.
      Per bug #5757 from Andrey Galkin.
      fe24d781
    • Alvaro Herrera's avatar
      Add pg_describe_object function · 6cc2deb8
      Alvaro Herrera authored
      This function is useful to obtain textual descriptions of objects as
      stored in pg_depend.
      6cc2deb8
    • 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
  4. 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
  5. 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
  6. 15 Nov, 2010 10 commits
  7. 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
  8. 13 Nov, 2010 2 commits
  9. 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
  10. 11 Nov, 2010 1 commit
  11. 10 Nov, 2010 4 commits