Skip to content
Snippets Groups Projects
  1. Jan 24, 2012
  2. Jan 07, 2012
    • Peter Eisentraut's avatar
      Rename the internal structures of the CREATE TABLE (LIKE ...) facility · db49517c
      Peter Eisentraut authored
      The original implementation of this interpreted it as a kind of
      "inheritance" facility and named all the internal structures
      accordingly.  This turned out to be very confusing, because it has
      nothing to do with the INHERITS feature.  So rename all the internal
      parser infrastructure, update the comments, adjust the error messages,
      and split up the regression tests.
      db49517c
  3. Jan 05, 2012
  4. Jan 02, 2012
  5. Dec 25, 2011
    • Tom Lane's avatar
      Rethink representation of index clauses' mapping to index columns. · 472d3935
      Tom Lane authored
      In commit e2c2c2e8 I made use of nested
      list structures to show which clauses went with which index columns, but
      on reflection that's a data structure that only an old-line Lisp hacker
      could love.  Worse, it adds unnecessary complication to the many places
      that don't much care which clauses go with which index columns.  Revert
      to the previous arrangement of flat lists of clauses, and instead add a
      parallel integer list of column numbers.  The places that care about the
      pairing can chase both lists with forboth(), while the places that don't
      care just examine one list the same as before.
      
      The only real downside to this is that there are now two more lists that
      need to be passed to amcostestimate functions in case they care about
      column matching (which btcostestimate does, so not passing the info is not
      an option).  Rather than deal with 11-argument amcostestimate functions,
      pass just the IndexPath and expect the functions to extract fields from it.
      That gets us down to 7 arguments which is better than 11, and it seems
      more future-proof against likely additions to the information we keep
      about an index path.
      472d3935
  6. Dec 24, 2011
    • Tom Lane's avatar
      Improve planner's handling of duplicated index column expressions. · e2c2c2e8
      Tom Lane authored
      It's potentially useful for an index to repeat the same indexable column
      or expression in multiple index columns, if the columns have different
      opclasses.  (If they share opclasses too, the duplicate column is pretty
      useless, but nonetheless we've allowed such cases since 9.0.)  However,
      the planner failed to cope with this, because createplan.c was relying on
      simple equal() matching to figure out which index column each index qual
      is intended for.  We do have that information available upstream in
      indxpath.c, though, so the fix is to not flatten the multi-level indexquals
      list when putting it into an IndexPath.  Then we can rely on the sublist
      structure to identify target index columns in createplan.c.  There's a
      similar issue for index ORDER BYs (the KNNGIST feature), so introduce a
      multi-level-list representation for that too.  This adds a bit more
      representational overhead, but we might more or less buy that back by not
      having to search for matching index columns anymore in createplan.c;
      likewise btcostestimate saves some cycles.
      
      Per bug #6351 from Christian Rudolph.  Likely symptoms include the "btree
      index keys must be ordered by attribute" failure shown there, as well as
      "operator MMMM is not a member of opfamily NNNN".
      
      Although this is a pre-existing problem that can be demonstrated in 9.0 and
      9.1, I'm not going to back-patch it, because the API changes in the planner
      seem likely to break things such as index plugins.  The corner cases where
      this matters seem too narrow to justify possibly breaking things in a minor
      release.
      e2c2c2e8
  7. Dec 22, 2011
    • Robert Haas's avatar
      Add a security_barrier option for views. · 0e4611c0
      Robert Haas authored
      When a view is marked as a security barrier, it will not be pulled up
      into the containing query, and no quals will be pushed down into it,
      so that no function or operator chosen by the user can be applied to
      rows not exposed by the view.  Views not configured with this
      option cannot provide robust row-level security, but will perform far
      better.
      
      Patch by KaiGai Kohei; original problem report by Heikki Linnakangas
      (in October 2009!).  Review (in earlier versions) by Noah Misch and
      others.  Design advice by Tom Lane and myself.  Further review and
      cleanup by me.
      0e4611c0
  8. Dec 19, 2011
    • Peter Eisentraut's avatar
      Add support for privileges on types · 72920557
      Peter Eisentraut authored
      This adds support for the more or less SQL-conforming USAGE privilege
      on types and domains.  The intent is to be able restrict which users
      can create dependencies on types, which restricts the way in which
      owners can alter types.
      
      reviewed by Yeb Havinga
      72920557
  9. Dec 18, 2011
    • Tom Lane's avatar
      Replace simple constant pg_am.amcanreturn with an AM support function. · 3695a555
      Tom Lane authored
      The need for this was debated when we put in the index-only-scan feature,
      but at the time we had no near-term expectation of having AMs that could
      support such scans for only some indexes; so we kept it simple.  However,
      the SP-GiST AM forces the issue, so let's fix it.
      
      This patch only installs the new API; no behavior actually changes.
      3695a555
  10. Dec 07, 2011
    • Peter Eisentraut's avatar
      Add const qualifiers to node inspection functions · d5f23af6
      Peter Eisentraut authored
      Thomas Munro
      d5f23af6
    • Tom Lane's avatar
      Create a "sort support" interface API for faster sorting. · c6e3ac11
      Tom Lane authored
      This patch creates an API whereby a btree index opclass can optionally
      provide non-SQL-callable support functions for sorting.  In the initial
      patch, we only use this to provide a directly-callable comparator function,
      which can be invoked with a bit less overhead than the traditional
      SQL-callable comparator.  While that should be of value in itself, the real
      reason for doing this is to provide a datatype-extensible framework for
      more aggressive optimizations, as in Peter Geoghegan's recent work.
      
      Robert Haas and Tom Lane
      c6e3ac11
  11. Nov 28, 2011
    • Tom Lane's avatar
      Ensure that whole-row junk Vars are always of composite type. · dd3bab5f
      Tom Lane authored
      The EvalPlanQual machinery assumes that whole-row Vars generated for the
      outputs of non-table RTEs will be of composite types.  However, for the
      case where the RTE is a function call returning a scalar type, we were
      doing the wrong thing, as a result of sharing code with a parser case
      where the function's scalar output is wanted.  (Or at least, that's what
      that case has done historically; it does seem a bit inconsistent.)
      
      To fix, extend makeWholeRowVar's API so that it can support both use-cases.
      This fixes Belinda Cussen's report of crashes during concurrent execution
      of UPDATEs involving joins to the result of UNNEST() --- in READ COMMITTED
      mode, we'd run the EvalPlanQual machinery after a conflicting row update
      commits, and it was expecting to get a HeapTuple not a scalar datum from
      the "wholerowN" variable referencing the function RTE.
      
      Back-patch to 9.0 where the current EvalPlanQual implementation appeared.
      
      In 9.1 and up, this patch also fixes failure to attach the correct
      collation to the Var generated for a scalar-result case.  An example:
      regression=# select upper(x.*) from textcat('ab', 'cd') x;
      ERROR:  could not determine which collation to use for upper() function
      dd3bab5f
  12. Nov 25, 2011
    • Tom Lane's avatar
      Fix unsupported options in CREATE TABLE ... AS EXECUTE. · 9ed439a9
      Tom Lane authored
      The WITH [NO] DATA option was not supported, nor the ability to specify
      replacement column names; the former limitation wasn't even documented, as
      per recent complaint from Naoya Anzai.  Fix by moving the responsibility
      for supporting these options into the executor.  It actually takes less
      code this way ...
      
      catversion bump due to change in representation of IntoClause, which might
      affect stored rules.
      9ed439a9
  13. Nov 21, 2011
  14. Nov 18, 2011
    • Robert Haas's avatar
      Further consolidation of DROP statement handling. · fc6d1006
      Robert Haas authored
      This gets rid of an impressive amount of duplicative code, with only
      minimal behavior changes.  DROP FOREIGN DATA WRAPPER now requires object
      ownership rather than superuser privileges, matching the documentation
      we already have.  We also eliminate the historical warning about dropping
      a built-in function as unuseful.  All operations are now performed in the
      same order for all object types handled by dropcmds.c.
      
      KaiGai Kohei, with minor revisions by me
      fc6d1006
  15. Nov 03, 2011
    • Heikki Linnakangas's avatar
      Support range data types. · 4429f6a9
      Heikki Linnakangas authored
      Selectivity estimation functions are missing for some range type operators,
      which is a TODO.
      
      Jeff Davis
      4429f6a9
    • Tom Lane's avatar
      Fix handling of PlaceHolderVars in nestloop parameter management. · 7e3bf99b
      Tom Lane authored
      If we use a PlaceHolderVar from the outer relation in an inner indexscan,
      we need to reference the PlaceHolderVar as such as the value to be passed
      in from the outer relation.  The previous code effectively tried to
      reconstruct the PHV from its component expression, which doesn't work since
      (a) the Vars therein aren't necessarily bubbled up far enough, and (b) it
      would be the wrong semantics anyway because of the possibility that the PHV
      is supposed to have gone to null at some point before the current join.
      Point (a) led to "variable not found in subplan target list" planner
      errors, but point (b) would have led to silently wrong answers.
      Per report from Roger Niederland.
      7e3bf99b
  16. 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
  17. Oct 16, 2011
  18. 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
  19. Oct 11, 2011
    • 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
  20. Oct 08, 2011
    • 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
  21. Sep 22, 2011
    • Tom Lane's avatar
      Make EXPLAIN ANALYZE report the numbers of rows rejected by filter steps. · f1972723
      Tom Lane authored
      This provides information about the numbers of tuples that were visited
      but not returned by table scans, as well as the numbers of join tuples
      that were considered and discarded within a join plan node.
      
      There is still some discussion going on about the best way to report counts
      for outer-join situations, but I think most of what's in the patch would
      not change if we revise that, so I'm going to go ahead and commit it as-is.
      
      Documentation changes to follow (they weren't in the submitted patch
      either).
      
      Marko Tiikkaja, reviewed by Marc Cousin, somewhat revised by Tom
      f1972723
  22. Sep 16, 2011
    • Tom Lane's avatar
      Redesign the plancache mechanism for more flexibility and efficiency. · e6faf910
      Tom Lane authored
      Rewrite plancache.c so that a "cached plan" (which is rather a misnomer
      at this point) can support generation of custom, parameter-value-dependent
      plans, and can make an intelligent choice between using custom plans and
      the traditional generic-plan approach.  The specific choice algorithm
      implemented here can probably be improved in future, but this commit is
      all about getting the mechanism in place, not the policy.
      
      In addition, restructure the API to greatly reduce the amount of extraneous
      data copying needed.  The main compromise needed to make that possible was
      to split the initial creation of a CachedPlanSource into two steps.  It's
      worth noting in particular that SPI_saveplan is now deprecated in favor of
      SPI_keepplan, which accomplishes the same end result with zero data
      copying, and no need to then spend even more cycles throwing away the
      original SPIPlan.  The risk of long-term memory leaks while manipulating
      SPIPlans has also been greatly reduced.  Most of this improvement is based
      on use of the recently-added MemoryContextSetParent primitive.
      e6faf910
  23. Sep 11, 2011
    • Peter Eisentraut's avatar
      Remove many -Wcast-qual warnings · 1b81c2fe
      Peter Eisentraut authored
      This addresses only those cases that are easy to fix by adding or
      moving a const qualifier or removing an unnecessary cast.  There are
      many more complicated cases remaining.
      1b81c2fe
  24. Sep 03, 2011
    • Tom Lane's avatar
      Rearrange planner to save the whole PlannerInfo (subroot) for a subquery. · b3aaf908
      Tom Lane authored
      Formerly, set_subquery_pathlist and other creators of plans for subqueries
      saved only the rangetable and rowMarks lists from the lower-level
      PlannerInfo.  But there's no reason not to remember the whole PlannerInfo,
      and indeed this turns out to simplify matters in a number of places.
      
      The immediate reason for doing this was so that the subroot will still be
      accessible when we're trying to extract column statistics out of an
      already-planned subquery.  But now that I've done it, it seems like a good
      code-beautification effort in its own right.
      
      I also chose to get rid of the transient subrtable and subrowmark fields in
      SubqueryScan nodes, in favor of having setrefs.c look up the subquery's
      RelOptInfo.  That required changing all the APIs in setrefs.c to pass
      PlannerInfo not PlannerGlobal, which was a large but quite mechanical
      transformation.
      
      One side-effect not foreseen at the beginning is that this finally broke
      inheritance_planner's assumption that replanning the same subquery RTE N
      times would necessarily give interchangeable results each time.  That
      assumption was always pretty risky, but now we really have to make a
      separate RTE for each instance so that there's a place to carry the
      separate subroots.
      b3aaf908
  25. Sep 01, 2011
  26. Aug 22, 2011
    • Tom Lane's avatar
      Fix trigger WHEN conditions when both BEFORE and AFTER triggers exist. · b33f78df
      Tom Lane authored
      Due to tuple-slot mismanagement, evaluation of WHEN conditions for AFTER
      ROW UPDATE triggers could crash if there had been a BEFORE ROW trigger
      fired for the same update.  Fix by not trying to overload the use of
      estate->es_trig_tuple_slot.  Per report from Yoran Heling.
      
      Back-patch to 9.0, when trigger WHEN conditions were introduced.
      b33f78df
  27. Aug 17, 2011
    • Tom Lane's avatar
      Revise sinval code to remove no-longer-used tuple TID from inval messages. · b5282aa8
      Tom Lane authored
      This requires adjusting the API for syscache callback functions: they now
      get a hash value, not a TID, to identify the target tuple.  Most of them
      weren't paying any attention to that argument anyway, but plancache did
      require a small amount of fixing.
      
      Also, improve performance a trifle by avoiding sending duplicate inval
      messages when a heap_update isn't changing the catcache lookup columns.
      b5282aa8
  28. Aug 06, 2011
    • Tom Lane's avatar
      Clean up ill-advised attempt to invent a private set of Node tags. · 05e83968
      Tom Lane authored
      Somebody thought it'd be cute to invent a set of Node tag numbers that were
      defined independently of, and indeed conflicting with, the main tag-number
      list.  While this accidentally failed to fail so far, it would certainly
      lead to trouble as soon as anyone wanted to, say, apply copyObject to these
      node types.  Clang was already complaining about the use of makeNode on
      these tags, and I think quite rightly so.  Fix by pushing these node
      definitions into the mainstream, including putting replnodes.h where it
      belongs.
      05e83968
  29. Aug 05, 2011
  30. Jul 18, 2011
  31. Jul 04, 2011
  32. Jun 30, 2011
    • Alvaro Herrera's avatar
      Enable CHECK constraints to be declared NOT VALID · 89779524
      Alvaro Herrera authored
      This means that they can initially be added to a large existing table
      without checking its initial contents, but new tuples must comply to
      them; a separate pass invoked by ALTER TABLE / VALIDATE can verify
      existing data and ensure it complies with the constraint, at which point
      it is marked validated and becomes a normal part of the table ecosystem.
      
      An non-validated CHECK constraint is ignored in the planner for
      constraint_exclusion purposes; when validated, cached plans are
      recomputed so that partitioning starts working right away.
      
      This patch also enables domains to have unvalidated CHECK constraints
      attached to them as well by way of ALTER DOMAIN / ADD CONSTRAINT / NOT
      VALID, which can later be validated with ALTER DOMAIN / VALIDATE
      CONSTRAINT.
      
      Thanks to Thom Brown, Dean Rasheed and Jaime Casanova for the various
      reviews, and Robert Hass for documentation wording improvement
      suggestions.
      
      This patch was sponsored by Enova Financial.
      89779524
  33. Jun 16, 2011
    • Tom Lane's avatar
      Rework parsing of ConstraintAttributeSpec to improve NOT VALID handling. · e1ccaff6
      Tom Lane authored
      The initial commit of the ALTER TABLE ADD FOREIGN KEY NOT VALID feature
      failed to support labeling such constraints as deferrable.  The best fix
      for this seems to be to fold NOT VALID into ConstraintAttributeSpec.
      That's a bit more general than the documented syntax, but it allows
      better-targeted syntax error messages.
      
      In addition, do some mostly-but-not-entirely-cosmetic code review for
      the whole NOT VALID patch.
      e1ccaff6
  34. Jun 09, 2011
  35. May 21, 2011
    • Heikki Linnakangas's avatar
      Pull up isReset flag from AllocSetContext to MemoryContext struct. This · 30e98a7e
      Heikki Linnakangas authored
      avoids the overhead of one function call when calling MemoryContextReset(),
      and it seems like the isReset optimization would be applicable to any new
      memory context we might invent in the future anyway.
      
      This buys back the overhead I just added in previous patch to always call
      MemoryContextReset() in ExecScan, even when there's no quals or projections.
      30e98a7e
  36. Apr 25, 2011
    • Robert Haas's avatar
      Remove partial and undocumented GRANT .. FOREIGN TABLE support. · be90032e
      Robert Haas authored
      Instead, foreign tables are treated just like views: permissions can
      be granted using GRANT privilege ON [TABLE] foreign_table_name TO role,
      and revoked similarly.  GRANT/REVOKE .. FOREIGN TABLE is no longer
      supported, just as we don't support GRANT/REVOKE .. VIEW.  The set of
      accepted permissions for foreign tables is now identical to the set for
      regular tables, and views.
      
      Per report from Thom Brown, and subsequent discussion.
      be90032e
  37. Apr 24, 2011
    • Tom Lane's avatar
      Improve cost estimation for aggregates and window functions. · e6a30a8c
      Tom Lane authored
      The previous coding failed to account properly for the costs of evaluating
      the input expressions of aggregates and window functions, as seen in a
      recent gripe from Claudio Freire.  (I said at the time that it wasn't
      counting these costs at all; but on closer inspection, it was effectively
      charging these costs once per output tuple.  That is completely wrong for
      aggregates, and not exactly right for window functions either.)
      
      There was also a hard-wired assumption that aggregates and window functions
      had procost 1.0, which is now fixed to respect the actual cataloged costs.
      
      The costing of WindowAgg is still pretty bogus, since it doesn't try to
      estimate the effects of spilling data to disk, but that seems like a
      separate issue.
      e6a30a8c
  38. Apr 21, 2011
    • Robert Haas's avatar
      Allow ALTER TABLE name {OF type | NOT OF}. · 68739ba8
      Robert Haas authored
      This syntax allows a standalone table to be made into a typed table,
      or a typed table to be made standalone.  This is possibly a mildly
      useful feature in its own right, but the real motivation for this
      change is that we need it to make pg_upgrade work with typed tables.
      This doesn't actually fix that problem, but it's necessary
      infrastructure.
      
      Noah Misch
      68739ba8
Loading