Permalink
Commits on Oct 23, 2011
  1. Improve git_changelog's handling of inconsistent commit orderings.

    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.
    tglsfdc committed Oct 23, 2011
  2. Don't trust deferred-unique indexes for join removal.

    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.
    tglsfdc committed Oct 23, 2011
Commits on Oct 22, 2011
  1. Support synchronization of snapshots through an export/import procedure.

    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
    tglsfdc committed Oct 22, 2011
  2. Fix overly-complicated usage of errcode_for_file_access().

    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.
    hlinnaka committed Oct 22, 2011
Commits on Oct 21, 2011
  1. Code review for pgstat_get_crashed_backend_activity patch.

    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.
    tglsfdc committed Oct 21, 2011
  2. More cleanup after failed reduced-lock-levels-for-DDL feature.

    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.
    tglsfdc committed Oct 21, 2011
  3. Try to log current the query string when a backend crashes.

    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
    Robert Haas committed Oct 21, 2011
  4. Fix DROP OPERATOR FAMILY IF EXISTS.

    Essentially, the "IF EXISTS" portion was being ignored, and an error
    thrown anyway if the opfamily did not exist.
    
    I broke this in commit fd1843f; so
    backpatch to 9.1.X.
    
    Report and diagnosis by KaiGai Kohei.
    Robert Haas committed Oct 21, 2011
Commits on Oct 20, 2011
  1. Simplify and improve ProcessStandbyHSFeedbackMessage logic.

    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.
    tglsfdc committed Oct 20, 2011
  2. Rewrite tab completion's previous-word fetching for more sanity.

    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.)
    tglsfdc committed Oct 20, 2011
  3. Fix get_object_namespace() not to think extensions are "in" a schema.

    extnamespace means something altogether different in this context.
    Mostly by accident, this coding error (introduced in my commit
    82a4a77) broke the buildfarm instead
    of just silently doing the wrong thing.
    Robert Haas committed Oct 20, 2011
  4. Add "skipping" to the NOTICE produced by DROP OPERATOR CLASS IF EXISTS.

    This makes this message consistent with all the other similar notices
    produced by other DROP IF EXISTS commands.
    
    Noted by KaiGai Kohei
    Robert Haas committed Oct 20, 2011
  5. Remove a few of the new DROP-IF-EXISTS regression tests.

    Commit 3301c83 broke the build farm.
    Let's try to fix that.
    Robert Haas committed Oct 20, 2011
  6. Consolidate DROP handling for some object types.

    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.
    Robert Haas committed Oct 20, 2011
  7. Add some more regression tests for DROP IF EXISTS.

    KaiGai Kohei
    Robert Haas committed Oct 20, 2011
Commits on Oct 19, 2011
  1. Document that postmaster.opts is excluded from base backups

    Fujii Masao
    Robert Haas committed Oct 19, 2011
  2. Suppress remaining -Waddress warnings from recent gcc versions.

    Still an exercise in satisfying pedants.
    tglsfdc committed Oct 19, 2011
  3. Suppress -Wunused-result warnings about write() and fwrite().

    This is merely an exercise in satisfying pedants, not a bug fix, because
    in every case we were checking for failure later with ferror(), or else
    there was nothing useful to be done about a failure anyway.  Document
    the latter cases.
    tglsfdc committed Oct 19, 2011
  4. Make the CHECKPOINT reference page more clear.

    Josh Kupershmidt, reviewed by Fujii Masao
    Robert Haas committed Oct 19, 2011
  5. Reject empty pg_hba.conf files.

    An empty HBA file is surely an error, since it means there is no way to
    connect to the server.  We've not heard identifiable reports of people
    actually doing that, but this will also close off the case Thom Brown just
    complained of, namely pointing hba_file at a directory.  (On at least some
    platforms with some directories, it will read as an empty file.)
    
    Perhaps this should be back-patched, but given the lack of previous
    complaints, I won't add extra work for the translators.
    tglsfdc committed Oct 19, 2011
Commits on Oct 18, 2011
  1. Remove unnecessary AssertMacro() to suppress gcc 4.6 compiler warning.

    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.
    tglsfdc committed Oct 18, 2011
  2. Fix pg_dump to dump casts between auto-generated types.

    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.
    tglsfdc committed Oct 18, 2011
  3. Exclude postmaster.opts from base backups

    Noted by Fujii Masao
    mhagander committed Oct 16, 2011
Commits on Oct 16, 2011
  1. Avoid assuming that index-only scan data matches the index's rowtype.

    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.
    tglsfdc committed Oct 16, 2011
  2. Teach btree to handle ScalarArrayOpExpr quals natively.

    This allows "indexedcol op ANY(ARRAY[...])" conditions to be used in plain
    indexscans, and particularly in index-only scans.
    tglsfdc committed Oct 16, 2011
Commits on Oct 15, 2011
  1. Marginal improvements to documentation of plpgsql's OPEN cursor state…

    …ment.
    
    Rearrange text to improve clarity, and add an example of implicit reference
    to a plpgsql variable in a bound cursor's query.  Byproduct of some work
    I'd done on the "named cursor parameters" patch before giving up on it.
    tglsfdc committed Oct 15, 2011
  2. Allow a major PG version psql .psqlrc file to be used if a minor

    matching version file does not exist.  This avoids needing to rename
    .psqlrc files after minor version upgrades.
    bmomjian committed Oct 15, 2011
  3. Fix bugs in information_schema.referential_constraints view.

    This view was being insufficiently careful about matching the FK constraint
    to the depended-on primary or unique key constraint.  That could result in
    failure to show an FK constraint at all, or showing it multiple times, or
    claiming that it depended on a different constraint than the one it really
    does.  Fix by joining via pg_depend to ensure that we find only the correct
    dependency.
    
    Back-patch, but don't bump catversion because we can't force initdb in back
    branches.  The next minor-version release notes should explain that if you
    need to fix this in an existing installation, you can drop the
    information_schema schema then re-create it by sourcing
    $SHAREDIR/information_schema.sql in each database (as a superuser of
    course).
    tglsfdc committed Oct 15, 2011
Commits on Oct 14, 2011
  1. Measure the number of all-visible pages for use in index-only scan co…

    …sting.
    
    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.
    tglsfdc committed Oct 14, 2011
  2. Dump all roles first, then all config settings on roles.

    This way, if a role's config setting uses the name of another role,
    the validity of the dump isn't dependent on the order in which those
    two roles are dumped.
    
    Code by Phil Sorber, comment by me.
    Robert Haas committed Oct 14, 2011
  3. Avoid potential relcache leak in objectaddress.c.

    Nobody using the missing_ok flag yet, but let's speculate that this will
    be a better interface for future callers.
    
    KaiGai Kohei, with some adjustments by me.
    Robert Haas committed Oct 14, 2011
  4. Document actual string that has to be returned by the client for MD5

    authentication.
    
    Report and pseudo code by Cyan Ogilvie
    bmomjian committed Oct 14, 2011