1. 26 Oct, 2011 1 commit
    • Tom Lane's avatar
      Change FK trigger creation order to better support self-referential FKs. · 58958726
      Tom Lane authored
      When a foreign-key constraint references another column of the same table,
      row updates will queue both the PK's ON UPDATE action and the FK's CHECK
      action in the same event.  The ON UPDATE action must execute first, else
      the CHECK will check a non-final state of the row and possibly throw an
      inappropriate error, as seen in bug #6268 from Roman Lytovchenko.
      
      Now, the firing order of multiple triggers for the same event is determined
      by the sort order of their pg_trigger.tgnames, and the auto-generated names
      we use for FK triggers are "RI_ConstraintTrigger_NNNN" where NNNN is the
      trigger OID.  So most of the time the firing order is the same as creation
      order, and so rearranging the creation order fixes it.
      
      This patch will fail to fix the problem if the OID counter wraps around or
      adds a decimal digit (eg, from 99999 to 100000) while we are creating the
      triggers for an FK constraint.  Given the small odds of that, and the low
      usage of self-referential FKs, we'll live with that solution in the back
      branches.  A better fix is to change the auto-generated names for FK
      triggers, but it seems unwise to do that in stable branches because there
      may be client code that depends on the naming convention.  We'll fix it
      that way in HEAD in a separate patch.
      
      Back-patch to all supported branches, since this bug has existed for a long
      time.
      58958726
  2. 25 Oct, 2011 5 commits
  3. 24 Oct, 2011 1 commit
  4. 23 Oct, 2011 3 commits
    • Tom Lane's avatar
      Make psql support tab completion of EXECUTE <prepared-statement-name>. · 8140c1bc
      Tom Lane authored
      Andreas Karlsson, reviewed by Josh Kupershmidt
      8140c1bc
    • Tom Lane's avatar
      Improve git_changelog's handling of inconsistent commit orderings. · 7299778a
      Tom Lane authored
      Use the CommitDate not the AuthorDate, as the former is representative of
      the order in which things went into the main repository, and the latter
      isn't very; we now have instances where the AuthorDate is as much as a
      month before the patch really went in.  Also, get rid of the "commit order
      inversions" heuristic, which turns out not to do anything very desirable.
      Instead we just print commits in strict timestamp order, interpreting the
      "timestamp" of a merged commit as its timestamp on the newest branch it
      appears in.  This fixes some cases where very ancient commits were being
      printed relatively early in the report.
      7299778a
    • Tom Lane's avatar
      Don't trust deferred-unique indexes for join removal. · 0f39d505
      Tom Lane authored
      The uniqueness condition might fail to hold intra-transaction, and assuming
      it does can give incorrect query results.  Per report from Marti Raudsepp,
      though this is not his proposed patch.
      
      Back-patch to 9.0, where both these features were introduced.  In the
      released branches, add the new IndexOptInfo field to the end of the struct,
      to try to minimize ABI breakage for third-party code that may be examining
      that struct.
      0f39d505
  5. 22 Oct, 2011 2 commits
    • Tom Lane's avatar
      Support synchronization of snapshots through an export/import procedure. · bb446b68
      Tom Lane authored
      A transaction can export a snapshot with pg_export_snapshot(), and then
      others can import it with SET TRANSACTION SNAPSHOT.  The data does not
      leave the server so there are not security issues.  A snapshot can only
      be imported while the exporting transaction is still running, and there
      are some other restrictions.
      
      I'm not totally convinced that we've covered all the bases for SSI (true
      serializable) mode, but it works fine for lesser isolation modes.
      
      Joachim Wieland, reviewed by Marko Tiikkaja, and rather heavily modified
      by Tom Lane
      bb446b68
    • Heikki Linnakangas's avatar
      Fix overly-complicated usage of errcode_for_file_access(). · b436c72f
      Heikki Linnakangas authored
      No need to do  "errcode(errcode_for_file_access())", just
      "errcode_for_file_access()" is enough. The extra errcode() call is useless
      but harmless, so there's no user-visible bug here. Nevertheless, backpatch
      to 9.1 where this code were added.
      b436c72f
  6. 21 Oct, 2011 4 commits
    • Tom Lane's avatar
      Code review for pgstat_get_crashed_backend_activity patch. · f9c92a5a
      Tom Lane authored
      Avoid possibly dumping core when pgstat_track_activity_query_size has a
      less-than-default value; avoid uselessly searching for the query string
      of a successfully-exited backend; don't bother putting out an ERRDETAIL if
      we don't have a query to show; some other minor stylistic improvements.
      f9c92a5a
    • Tom Lane's avatar
      More cleanup after failed reduced-lock-levels-for-DDL feature. · 5ac59807
      Tom Lane authored
      Turns out that use of ShareUpdateExclusiveLock or ShareRowExclusiveLock
      to protect DDL changes had gotten copied into several places that were
      not touched by either of Simon's original patches for the feature, and
      thus neither he nor I thought to revert them.  (Indeed, it appears that
      two of these uses were committed *after* the reversion, which just goes
      to show that git merging is no panacea.)  Change these places to use
      AccessExclusiveLock again.  If we ever manage to resurrect that feature,
      we're going to have to think a bit harder about how to keep lock level
      usage in sync for DDL operations that aren't within the AlterTable
      infrastructure.
      
      Two of these bugs are only in HEAD, but one is in the 9.1 branch too.
      Alvaro found one of them, I found the other two.
      5ac59807
    • Robert Haas's avatar
      Try to log current the query string when a backend crashes. · c8e8b5a6
      Robert Haas authored
      To avoid minimize risk inside the postmaster, we subject this feature
      to a number of significant limitations.  We very much wish to avoid
      doing any complex processing inside the postmaster, due to the
      posssibility that the crashed backend has completely corrupted shared
      memory.  To that end, no encoding conversion is done; instead, we just
      replace anything that doesn't look like an ASCII character with a
      question mark.  We limit the amount of data copied to 1024 characters,
      and carefully sanity check the source of that data.  While these
      restrictions would doubtless be unacceptable in a general-purpose
      logging facility, even this limited facility seems like an improvement
      over the status quo ante.
      
      Marti Raudsepp, reviewed by PDXPUG and myself
      c8e8b5a6
    • Robert Haas's avatar
      Fix DROP OPERATOR FAMILY IF EXISTS. · 98026192
      Robert Haas authored
      Essentially, the "IF EXISTS" portion was being ignored, and an error
      thrown anyway if the opfamily did not exist.
      
      I broke this in commit fd1843ff; so
      backpatch to 9.1.X.
      
      Report and diagnosis by KaiGai Kohei.
      98026192
  7. 20 Oct, 2011 7 commits
    • Tom Lane's avatar
      Simplify and improve ProcessStandbyHSFeedbackMessage logic. · b4a0223d
      Tom Lane authored
      There's no need to clamp the standby's xmin to be greater than
      GetOldestXmin's result; if there were any such need this logic would be
      hopelessly inadequate anyway, because it fails to account for
      within-database versus cluster-wide values of GetOldestXmin.  So get rid of
      that, and just rely on sanity-checking that the xmin is not wrapped around
      relative to the nextXid counter.  Also, don't reset the walsender's xmin if
      the current feedback xmin is indeed out of range; that just creates more
      problems than we already had.  Lastly, don't bother to take the
      ProcArrayLock; there's no need to do that to set xmin.
      
      Also improve the comments about this in GetOldestXmin itself.
      b4a0223d
    • Tom Lane's avatar
      Rewrite tab completion's previous-word fetching for more sanity. · dce92c6d
      Tom Lane authored
      Make it return empty strings when there are no more words to the left of
      the current position, instead of sometimes returning NULL and other times
      returning copies of the leftmost word.  Also, fetch the words in one scan,
      rather than the previous wasteful approach of starting from scratch for
      each word.  Make the code a bit harder to break when someone decides we
      need more words of context, too.  (There was actually a memory leak here,
      because whoever added prev6_wd neglected to free it.)
      dce92c6d
    • Robert Haas's avatar
      Fix get_object_namespace() not to think extensions are "in" a schema. · 8f3362d4
      Robert Haas authored
      extnamespace means something altogether different in this context.
      Mostly by accident, this coding error (introduced in my commit
      82a4a777) broke the buildfarm instead
      of just silently doing the wrong thing.
      8f3362d4
    • Robert Haas's avatar
      Add "skipping" to the NOTICE produced by DROP OPERATOR CLASS IF EXISTS. · 1d751018
      Robert Haas authored
      This makes this message consistent with all the other similar notices
      produced by other DROP IF EXISTS commands.
      
      Noted by KaiGai Kohei
      1d751018
    • Robert Haas's avatar
      Remove a few of the new DROP-IF-EXISTS regression tests. · 0bf08994
      Robert Haas authored
      Commit 3301c835 broke the build farm.
      Let's try to fix that.
      0bf08994
    • Robert Haas's avatar
      Consolidate DROP handling for some object types. · 82a4a777
      Robert Haas authored
      This gets rid of a significant amount of duplicative code.
      
      KaiGai Kohei, reviewed in earlier versions by Dimitri Fontaine, with
      further review and cleanup by me.
      82a4a777
    • Robert Haas's avatar
      Add some more regression tests for DROP IF EXISTS. · 3301c835
      Robert Haas authored
      KaiGai Kohei
      3301c835
  8. 19 Oct, 2011 5 commits
  9. 18 Oct, 2011 3 commits
    • Tom Lane's avatar
      Remove unnecessary AssertMacro() to suppress gcc 4.6 compiler warning. · 7c19e044
      Tom Lane authored
      There's no particular value in doing AssertMacro((tup) != NULL) in front
      of code that's certain to crash anyway if tup is NULL.  And if "tup" is
      actually the address of a local variable, gcc 4.6 whinges about it.  That's
      arguably pretty broken on gcc's part, but we might as well remove the
      useless test to silence the warnings.  This gets rid of all the -Waddress
      warnings in the backend; there are some in libpq and psql that are a bit
      harder to avoid.
      7c19e044
    • Tom Lane's avatar
      Fix pg_dump to dump casts between auto-generated types. · b246207b
      Tom Lane authored
      The heuristic for when to dump a cast failed for a cast between table
      rowtypes, as reported by Frédéric Rejol.  Fix it by setting
      the "dump" flag for such a type the same way as the flag is set for the
      underlying table or base type.  This won't result in the auto-generated
      type appearing in the output, since setting its objType to DO_DUMMY_TYPE
      unconditionally suppresses that.  But it will result in dumpCast doing what
      was intended.
      
      Back-patch to 8.3.  The 8.2 code is rather different in this area, and it
      doesn't seem worth any risk to fix a corner case that nobody has stumbled
      on before.
      b246207b
    • Magnus Hagander's avatar
      Exclude postmaster.opts from base backups · d1e25b78
      Magnus Hagander authored
      Noted by Fujii Masao
      d1e25b78
  10. 16 Oct, 2011 3 commits
    • Tom Lane's avatar
      Avoid assuming that index-only scan data matches the index's rowtype. · 336c1d7a
      Tom Lane authored
      In general the data returned by an index-only scan should have the
      datatypes originally computed by FormIndexDatum.  If the index opclasses
      use "storage" datatypes different from their input datatypes, the scan
      tuple will not have the same rowtype attributed to the index; but we had
      a hard-wired assumption that that was true in nodeIndexonlyscan.c.  We'd
      already hacked around the issue for the one case where the types are
      different in btree indexes (btree name_ops), but this would definitely
      come back to bite us if we ever implement index-only scans in GiST.
      
      To fix, require the index AM to explicitly provide the tupdesc for the
      tuple it is returning.  btree can just pass back the index's tupdesc, but
      GiST will have to work harder when and if it supports index-only scans.
      
      I had previously proposed fixing this by allowing the index AM to fill the
      scan tuple slot directly; but on reflection that seemed like a module
      layering violation, since TupleTableSlots are creatures of the executor.
      At least in the btree case, it would also be less efficient, since the
      tuple deconstruction work would occur even for rows later found to be
      invisible to the scan's snapshot.
      336c1d7a
    • Tom Lane's avatar
      Fix collate.linux.utf8 expected output for recent error message change. · e661c3df
      Tom Lane authored
      Noted by Jeff Davis.
      e661c3df
    • Tom Lane's avatar
      Teach btree to handle ScalarArrayOpExpr quals natively. · 9e8da0f7
      Tom Lane authored
      This allows "indexedcol op ANY(ARRAY[...])" conditions to be used in plain
      indexscans, and particularly in index-only scans.
      9e8da0f7
  11. 15 Oct, 2011 5 commits
  12. 14 Oct, 2011 1 commit
    • Tom Lane's avatar
      Measure the number of all-visible pages for use in index-only scan costing. · e6858e66
      Tom Lane authored
      Add a column pg_class.relallvisible to remember the number of pages that
      were all-visible according to the visibility map as of the last VACUUM
      (or ANALYZE, or some other operations that update pg_class.relpages).
      Use relallvisible/relpages, instead of an arbitrary constant, to estimate
      how many heap page fetches can be avoided during an index-only scan.
      
      This is pretty primitive and will no doubt see refinements once we've
      acquired more field experience with the index-only scan mechanism, but
      it's way better than using a constant.
      
      Note: I had to adjust an underspecified query in the window.sql regression
      test, because it was changing answers when the plan changed to use an
      index-only scan.  Some of the adjacent tests perhaps should be adjusted
      as well, but I didn't do that here.
      e6858e66