Skip to content
Snippets Groups Projects
  1. Oct 23, 2011
    • 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
    • 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
  2. Oct 22, 2011
  3. Oct 21, 2011
    • 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
    • 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
  4. Oct 20, 2011
  5. Oct 19, 2011
    • Tom Lane's avatar
      Suppress -Wunused-result warnings about write() and fwrite(). · aa90e148
      Tom Lane authored
      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.
      aa90e148
    • Tom Lane's avatar
      Reject empty pg_hba.conf files. · e27f52f3
      Tom Lane authored
      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.
      e27f52f3
  6. Oct 18, 2011
  7. Oct 17, 2011
    • 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
  8. Oct 16, 2011
  9. Oct 15, 2011
    • Tom Lane's avatar
      Fix bugs in information_schema.referential_constraints view. · d26e1eba
      Tom Lane authored
      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).
      d26e1eba
  10. Oct 14, 2011
    • 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
    • Robert Haas's avatar
      Avoid potential relcache leak in objectaddress.c. · 393e828e
      Robert Haas authored
      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.
      393e828e
    • Bruce Momjian's avatar
      0180bd61
  11. Oct 13, 2011
    • Tom Lane's avatar
      Don't mark auto-generated types as extension members. · 7b96519f
      Tom Lane authored
      Relation rowtypes and automatically-generated array types do not need to
      have their own extension membership dependency entries.  If we create such
      then it becomes more difficult to remove items from an extension, and it's
      also harder for an extension upgrade script to make sure it duplicates the
      dependencies created by the extension's regular installation script.
      
      I changed the code in such a way that this happened in commit
      988cccc6, I think because of worries about
      the shell-type-replacement case; but that cure was worse than the disease.
      It would only matter if one extension created a shell type that was
      replaced with an auto-generated type in another extension, which seems
      pretty far-fetched.  Better to make this work unsurprisingly in normal
      cases.
      
      Report and patch by Robert Haas, comment adjustments by me.
      7b96519f
  12. Oct 12, 2011
    • Bruce Momjian's avatar
      Modify RelationGetBufferForTuple() to use a typedef, rather than a · 484af9b3
      Bruce Momjian authored
      struct, to help pgindent.
      484af9b3
    • Tom Lane's avatar
      Throw a useful error message if an extension script file is fed to psql. · 458857cc
      Tom Lane authored
      We have seen one too many reports of people trying to use 9.1 extension
      files in the old-fashioned way of sourcing them in psql.  Not only does
      that usually not work (due to failure to substitute for MODULE_PATHNAME
      and/or @extschema@), but if it did work they'd get a collection of loose
      objects not an extension.  To prevent this, insert an \echo ... \quit
      line that prints a suitable error message into each extension script file,
      and teach commands/extension.c to ignore lines starting with \echo.
      That should not only prevent any adverse consequences of loading a script
      file the wrong way, but make it crystal clear to users that they need to
      do it differently now.
      
      Tom Lane, following an idea of Andrew Dunstan's.  Back-patch into 9.1
      ... there is not going to be much value in this if we wait till 9.2.
      458857cc
    • Tom Lane's avatar
      Add comment on why pulling data from a "name" index column can't crash. · 8c8ba6d1
      Tom Lane authored
      It's been bothering me for several days that pretending that the cstring
      data stored in a btree name_ops column is really a "name" Datum could lead
      to reading past the end of memory.  However, given the current memory
      layout used for index-only scans in the btree code, a crash is in fact not
      possible.  Document that so we don't break it.  I have not thought of any
      other solutions that aren't fairly ugly too, and most of them lose the
      functionality of index-only scans on name columns altogether, so this seems
      like the way to go.
      8c8ba6d1
    • Tom Lane's avatar
      Generate index-only scan tuple descriptor from the plan node's indextlist. · cb6771fb
      Tom Lane authored
      Dept. of second thoughts: as long as we've got that tlist hanging around
      anyway, we can apply ExecTypeFromTL to it to get a suitable descriptor for
      the ScanTupleSlot.  This is a nicer solution than the previous one because
      it eliminates some hard-wired knowledge about btree name_ops, and because
      it avoids the somewhat shaky assumption that we needn't set up the scan
      tuple descriptor in EXPLAIN_ONLY mode.  It doesn't change what actually
      happens at run-time though, and I'm still a bit nervous about that.
      cb6771fb
  13. Oct 11, 2011
    • Tom Lane's avatar
      Consider index-only scans even when there is no matching qual or ORDER BY. · 600d3206
      Tom Lane authored
      By popular demand.
      600d3206
    • Tom Lane's avatar
      Rearrange the implementation of index-only scans. · a0185461
      Tom Lane authored
      This commit changes index-only scans so that data is read directly from the
      index tuple without first generating a faux heap tuple.  The only immediate
      benefit is that indexes on system columns (such as OID) can be used in
      index-only scans, but this is necessary infrastructure if we are ever to
      support index-only scans on expression indexes.  The executor is now ready
      for that, though the planner still needs substantial work to recognize
      the possibility.
      
      To do this, Vars in index-only plan nodes have to refer to index columns
      not heap columns.  I introduced a new special varno, INDEX_VAR, to mark
      such Vars to avoid confusion.  (In passing, this commit renames the two
      existing special varnos to OUTER_VAR and INNER_VAR.)  This allows
      ruleutils.c to handle them with logic similar to what we use for subplan
      reference Vars.
      
      Since index-only scans are now fundamentally different from regular
      indexscans so far as their expression subtrees are concerned, I also chose
      to change them to have their own plan node type (and hence, their own
      executor source file).
      a0185461
    • Robert Haas's avatar
      Replace hardcoded switch in object_exists() with a lookup table. · fa351d5a
      Robert Haas authored
      There's no particular advantage to this change on its face; indeed,
      it's possible that this might be slightly slower than the old way.
      But it makes this information more easily accessible to other
      functions, and therefore paves the way for future code consolidation.
      Performance isn't critical here, so there's no need to be smart about
      how we do the search.
      
      This is a heavily cut-down version of a patch from KaiGai Kohei,
      with several fixes by me.  Additional review from Dimitri Fontaine.
      fa351d5a
    • Robert Haas's avatar
      Repair breakage in VirtualXactLock. · e76bcaba
      Robert Haas authored
      I broke this in commit 84e37126.  Report and
      fix by Fujii Masao.
      e76bcaba
  14. Oct 10, 2011
    • Bruce Momjian's avatar
      e26d5fcd
    • Robert Haas's avatar
      Fix ALTER TABLE ONLY .. DROP CONSTRAINT. · c0f03aae
      Robert Haas authored
      When I consolidated two copies of the HOT-chain search logic in commit
      4da99ea4, I introduced a behavior
      change: the old code wouldn't necessarily traverse the entire chain,
      if the most recently returned tuple were updated while the HOT chain
      traversal is in progress.  The new behavior seems more correct, but
      unfortunately, the code here relies on a scan with SnapshotNow failing
      to see its own updates.  That seems pretty shaky even with the old HOT
      chain traversal behavior, since there's no guarantee that these
      updates will always be HOT, but it's trivial to broke a failure with
      the new HOT search logic.  Fix by updating just the first matching
      pg_constraint tuple, rather than all of them, since there should be
      only one anyway.  But since nobody has reproduced this failure on older
      versions, no back-patch for now.
      
      Report and test case by Alex Hunsaker; tablecmds.c changes by me.
      c0f03aae
  15. Oct 09, 2011
    • Heikki Linnakangas's avatar
      Clean up a couple of box gist helper functions. · d50e1251
      Heikki Linnakangas authored
      The original idea of this patch was to make box picksplit run faster, by
      eliminating unnecessary palloc() overhead, but that was obsoleted by the new
      double-sorting split algorithm that doesn't call these functions so heavily
      anymore. Nevertheless, the code looks better this way.
      
      Original patch by me, reviewed and tidied up after the double-sorting patch
      by Kevin Grittner.
      d50e1251
    • Tom Lane's avatar
      Improve index-only scans to avoid repeated access to the index page. · cbfa92c2
      Tom Lane authored
      We copy all the matched tuples off the page during _bt_readpage, instead of
      expensively re-locking the page during each subsequent tuple fetch.  This
      costs a bit more local storage, but not more than 2*BLCKSZ worth, and the
      reduction in LWLock traffic is certainly worth that.  What's more, this
      lets us get rid of the API wart in the original patch that said an index AM
      could randomly decline to supply an index tuple despite having asserted
      pg_am.amcanreturn.  That will be important for future improvements in the
      index-only-scan feature, since the executor will now be able to rely on
      having the index data available.
      cbfa92c2
  16. Oct 08, 2011
    • Tom Lane's avatar
      Fix brain fade in cost estimation for index-only scans. · b324384f
      Tom Lane authored
      visibility_fraction should not be applied to regular indexscans.
      Noted by Cédric Villemain.
      b324384f
    • Heikki Linnakangas's avatar
      Don't let transform_null_equals=on affect CASE foo WHEN NULL ... constructs. · 1ef60dab
      Heikki Linnakangas authored
      transform_null_equals is only supposed to affect "foo = NULL" expressions
      given directly by the user, not the internal "foo = NULL" expression
      generated from CASE-WHEN.
      
      This fixes bug #6242, reported by Sergey. Backpatch to all supported
      branches.
      1ef60dab
    • Tom Lane's avatar
      Support index-only scans using the visibility map to avoid heap fetches. · a2822fb9
      Tom Lane authored
      When a btree index contains all columns required by the query, and the
      visibility map shows that all tuples on a target heap page are
      visible-to-all, we don't need to fetch that heap page.  This patch depends
      on the previous patches that made the visibility map reliable.
      
      There's a fair amount left to do here, notably trying to figure out a less
      chintzy way of estimating the cost of an index-only scan, but the core
      functionality seems ready to commit.
      
      Robert Haas and Ibrar Ahmed, with some previous work by Heikki Linnakangas.
      a2822fb9
  17. Oct 06, 2011
    • Magnus Hagander's avatar
      Ensure walsenders can be SIGTERMed while in non-walsender code · 7aeff9f4
      Magnus Hagander authored
      In oder to exit on SIGTERM when in non-walsender code,
      such as do_pg_stop_backup(), we need to set the interrupt
      variables that are used there, and not just the walsender
      local ones.
      7aeff9f4
    • Bruce Momjian's avatar
      Add postmaster -C option to query configuration parameters, and have · aaa6e1de
      Bruce Momjian authored
      pg_ctl use that to query the data directory for config-only installs.
      This fixes awkward or impossible pg_ctl operation for config-only
      installs.
      aaa6e1de
    • Heikki Linnakangas's avatar
      Replace the "New Linear" GiST split algorithm for boxes and points with a · 7f3bd868
      Heikki Linnakangas authored
      new double-sorting algorithm. The new algorithm produces better quality
      trees, making searches faster.
      
      Alexander Korotkov
      7f3bd868
    • Tom Lane's avatar
      Improve and simplify CREATE EXTENSION's management of GUC variables. · ba6f6293
      Tom Lane authored
      CREATE EXTENSION needs to transiently set search_path, as well as
      client_min_messages and log_min_messages.  We were doing this by the
      expedient of saving the current string value of each variable, doing a
      SET LOCAL, and then doing another SET LOCAL with the previous value at
      the end of the command.  This is a bit expensive though, and it also fails
      badly if there is anything funny about the existing search_path value,
      as seen in a recent report from Roger Niederland.  Fortunately, there's a
      much better way, which is to piggyback on the GUC infrastructure previously
      developed for functions with SET options.  We just open a new GUC nesting
      level, do our assignments with GUC_ACTION_SAVE, and then close the nesting
      level when done.  This automatically restores the prior settings without a
      re-parsing pass, so (in principle anyway) there can't be an error.  And
      guc.c still takes care of cleanup in event of an error abort.
      
      The CREATE EXTENSION code for this was modeled on some much older code in
      ri_triggers.c, which I also changed to use the better method, even though
      there wasn't really much risk of failure there.  Also improve the comments
      in guc.c to reflect this additional usage.
      ba6f6293
Loading