1. 20 8月, 2008 1 次提交
    • B
      TODO done: · 2aaca8e3
      Bruce Momjian 提交于
      !       o Allow an existing index to be marked as a table's primary key
      2aaca8e3
  2. 19 8月, 2008 2 次提交
  3. 18 8月, 2008 3 次提交
    • B
      Add to TODO: · 48a9d921
      Bruce Momjian 提交于
      >
      > * Fix all set-returning system functions so they support a wildcard
      >   target list
      >
      >   SELECT * FROM pg_get_keywords() works but SELECT * FROM
      >   pg_show_all_settings() does not.
      48a9d921
    • M
    • T
      Add some defenses against constant-FALSE outer join conditions. Since · 719012e0
      Tom Lane 提交于
      eval_const_expressions will generally throw away anything that's ANDed with
      constant FALSE, what we're left with given an example like
      
      select * from tenk1 a where (unique1,0) in (select unique2,1 from tenk1 b);
      
      is a cartesian product computation, which is really not acceptable.
      This is a regression in CVS HEAD compared to previous releases, which were
      able to notice the impossible join condition in this case --- though not in
      some related cases that are also improved by this patch, such as
      
      select * from tenk1 a left join tenk1 b on (a.unique1=b.unique2 and 0=1);
      
      Fix by skipping evaluation of the appropriate side of the outer join in
      cases where it's demonstrably unnecessary.
      719012e0
  4. 17 8月, 2008 3 次提交
    • T
      Remove prohibition against SubLinks in the WHERE clause of an EXISTS subquery · f2689e42
      Tom Lane 提交于
      that we're considering pulling up.  I hadn't wanted to think through whether
      that could work during the first pass at this stuff.  However, on closer
      inspection it seems to be safe enough.
      f2689e42
    • T
      Improve sublink pullup code to handle ANY/EXISTS sublinks that are at top · 19e34b62
      Tom Lane 提交于
      level of a JOIN/ON clause, not only at top level of WHERE.  (However, we
      can't do this in an outer join's ON clause, unless the ANY/EXISTS refers
      only to the nullable side of the outer join, so that it can effectively
      be pushed down into the nullable side.)  Per request from Kevin Grittner.
      
      In passing, fix a bug in the initial implementation of EXISTS pullup:
      it would Assert if the EXIST's WHERE clause used a join alias variable.
      Since we haven't yet flattened join aliases when this transformation
      happens, it's necessary to include join relids in the computed set of
      RHS relids.
      19e34b62
    • B
      Update instructions on generating TODO.html. · 909346ef
      Bruce Momjian 提交于
      909346ef
  5. 16 8月, 2008 11 次提交
    • M
      19c1e68e
    • B
      Add URL for: · 58e8f963
      Bruce Momjian 提交于
      * Improve ability to modify views via ALTER TABLE
      <
      >   http://archives.postgresql.org/pgsql-hackers/2008-08/msg00300.php
      58e8f963
    • T
      Fix pg_dump/pg_restore's ExecuteSqlCommand() to behave suitably if PQexec · 7ee27d49
      Tom Lane 提交于
      returns NULL instead of a PGresult.  The former coding would fail, which
      is OK, but it neglected to give you the PQerrorMessage that might tell
      you why.  In the oldest branches, there was another problem: it'd sometimes
      report PQerrorMessage from the wrong connection.
      7ee27d49
    • B
      Add to TODO: · ef270fb9
      Bruce Momjian 提交于
      >
      > * Prevent query cancel packets from being replayed by an attacker,
      >   especially when using SSL
      >
      >   http://archives.postgresql.org/pgsql-hackers/2008-08/msg00345.php
      >
      ef270fb9
    • B
    • T
      Fix a couple of places where psql might fail to report a suitable error · 63c3b990
      Tom Lane 提交于
      if PQexec returns NULL.  These don't seem significant enough to be worth
      back-patching, but they ought to get fixed ...
      63c3b990
    • B
      Update Russian FAQ. · b9984ade
      Bruce Momjian 提交于
      corochoone@gmail.com
      b9984ade
    • B
      Add new SQL training web site to FAQ: · 10c93552
      Bruce Momjian 提交于
          <LI><A href=
          "http://sqlzoo.net">http://sqlzoo.net</A>
          </LI>
      10c93552
    • B
      Fix version warning bug in recently applied adjustments to psql startup. · 21cf022f
      Bruce Momjian 提交于
      Gregory Stark
      21cf022f
    • T
      Clean up the loose ends in selectivity estimation left by my patch for semi · d4af2a64
      Tom Lane 提交于
      and anti joins.  To do this, pass the SpecialJoinInfo struct for the current
      join as an additional optional argument to operator join selectivity
      estimation functions.  This allows the estimator to tell not only what kind
      of join is being formed, but which variable is on which side of the join;
      a requirement long recognized but not dealt with till now.  This also leaves
      the door open for future improvements in the estimators, such as accounting
      for the null-insertion effects of lower outer joins.  I didn't do anything
      about that in the current patch but the information is in principle deducible
      from what's passed.
      
      The patch also clarifies the definition of join selectivity for semi/anti
      joins: it's the fraction of the left input that has (at least one) match
      in the right input.  This allows getting rid of some very fuzzy thinking
      that I had committed in the original 7.4-era IN-optimization patch.
      There's probably room to estimate this better than the present patch does,
      but at least we know what to estimate.
      
      Since I had to touch CREATE OPERATOR anyway to allow a variant signature
      for join estimator functions, I took the opportunity to add a couple of
      additional checks that were missing, per my recent message to -hackers:
      * Check that estimator functions return float8;
      * Require execute permission at the time of CREATE OPERATOR on the
      operator's function as well as the estimator functions;
      * Require ownership of any pre-existing operator that's modified by
      the command.
      I also moved the lookup of the functions out of OperatorCreate() and
      into operatorcmds.c, since that seemed more consistent with most of
      the other catalog object creation processes, eg CREATE TYPE.
      d4af2a64
    • T
      Performance fix for new anti-join code in nodeMergejoin.c: after finding a · 11846111
      Tom Lane 提交于
      match in antijoin mode, we should advance to next outer tuple not next inner.
      We know we don't want to return this outer tuple, and there is no point in
      advancing over matching inner tuples now, because we'd just have to do it
      again if the next outer tuple has the same merge key.  This makes a noticeable
      difference if there are lots of duplicate keys in both inputs.
      
      Similarly, after finding a match in semijoin mode, arrange to advance to
      the next outer tuple after returning the current match; or immediately,
      if it fails the extra quals.  The rationale is the same.  (This is a
      performance bug in existing releases; perhaps worth back-patching?  The
      planner tries to avoid using mergejoin with lots of duplicates, so it may
      not be a big issue in practice.)
      
      Nestloop and hash got this right to start with, but I made some cosmetic
      adjustments there to make the corresponding bits of logic look more similar.
      11846111
  6. 15 8月, 2008 3 次提交
    • M
      Make the temporary directory for pgstat files configurable by the GUC · 5b8eb2b4
      Magnus Hagander 提交于
      variable stats_temp_directory, instead of requiring the admin to
      mount/symlink the pg_stat_tmp directory manually.
      
      For now the config variable is PGC_POSTMASTER. Room for further improvment
      that would allow it to be changed on-the-fly.
      5b8eb2b4
    • H
      Fix pull_up_simple_union_all to copy all rtable entries from child subquery to · f24f233f
      Heikki Linnakangas 提交于
      parent, not only those with RangeTblRefs. We need them in ExecCheckRTPerms.
      
      Report by Brendan O'Shea. Back-patch to 8.2, where pull_up_simple_union_all
      was introduced.
      f24f233f
    • T
      Implement SEMI and ANTI joins in the planner and executor. (Semijoins replace · e006a24a
      Tom Lane 提交于
      the old JOIN_IN code, but antijoins are new functionality.)  Teach the planner
      to convert appropriate EXISTS and NOT EXISTS subqueries into semi and anti
      joins respectively.  Also, LEFT JOINs with suitable upper-level IS NULL
      filters are recognized as being anti joins.  Unify the InClauseInfo and
      OuterJoinInfo infrastructure into "SpecialJoinInfo".  With that change,
      it becomes possible to associate a SpecialJoinInfo with every join attempt,
      which permits some cleanup of join selectivity estimation.  That needs to be
      taken much further than this patch does, but the next step is to change the
      API for oprjoin selectivity functions, which seems like material for a
      separate patch.  So for the moment the output size estimates for semi and
      especially anti joins are quite bogus.
      e006a24a
  7. 14 8月, 2008 2 次提交
  8. 13 8月, 2008 1 次提交
  9. 12 8月, 2008 2 次提交
  10. 11 8月, 2008 3 次提交
    • H
      Relation forks patch requires a catversion bump due to changes in the format · a879443e
      Heikki Linnakangas 提交于
      of some WAL records, and two-phase state files, which I forgot.
      a879443e
    • H
      Introduce the concept of relation forks. An smgr relation can now consist · 3f0e808c
      Heikki Linnakangas 提交于
      of multiple forks, and each fork can be created and grown separately.
      
      The bulk of this patch is about changing the smgr API to include an extra
      ForkNumber argument in every smgr function. Also, smgrscheduleunlink and
      smgrdounlink no longer implicitly call smgrclose, because other forks might
      still exist after unlinking one. The callers of those functions have been
      modified to call smgrclose instead.
      
      This patch in itself doesn't have any user-visible effect, but provides the
      infrastructure needed for upcoming patches. The additional forks envisioned
      are a rewritten FSM implementation that doesn't rely on a fixed-size shared
      memory block, and a visibility map to allow skipping portions of a table in
      VACUUM that have no dead tuples.
      3f0e808c
    • T
      Fix corner-case bug introduced with HOT: if REINDEX TABLE pg_class (or a · eca13886
      Tom Lane 提交于
      REINDEX DATABASE including same) is done before a session has done any other
      update on pg_class, the pg_class relcache entry was left with an incorrect
      setting of rd_indexattr, because the indexed-attributes set would be first
      demanded at a time when we'd forced a partial list of indexes into the
      pg_class entry, and it would remain cached after that.  This could result
      in incorrect decisions about HOT-update safety later in the same session.
      In practice, since only pg_class_relname_nsp_index would be missed out,
      only ALTER TABLE RENAME and ALTER TABLE SET SCHEMA could trigger a problem.
      Per report and test case from Ondrej Jirman.
      eca13886
  11. 09 8月, 2008 1 次提交
    • T
      Install checks in executor startup to ensure that the tuples produced by an · 30fd8ec7
      Tom Lane 提交于
      INSERT or UPDATE will match the target table's current rowtype.  In pre-8.3
      releases inconsistency can arise with stale cached plans, as reported by
      Merlin Moncure.  (We patched the equivalent hazard on the SELECT side in Feb
      2007; I'm not sure why we thought there was no risk on the insertion side.)
      In 8.3 and HEAD this problem should be impossible due to plan cache
      invalidation management, but it seems prudent to make the check anyway.
      
      Back-patch as far as 8.0.  7.x versions lack ALTER COLUMN TYPE, so there
      seems no way to abuse a stale plan comparably.
      30fd8ec7
  12. 08 8月, 2008 1 次提交
    • T
      Improve INTERSECT/EXCEPT hashing by realizing that we don't need to make any · af95d7aa
      Tom Lane 提交于
      hashtable entries for tuples that are found only in the second input: they
      can never contribute to the output.  Furthermore, this implies that the
      planner should endeavor to put first the smaller (in number of groups) input
      relation for an INTERSECT.  Implement that, and upgrade prepunion's estimation
      of the number of rows returned by setops so that there's some amount of sanity
      in the estimate of which one is smaller.
      af95d7aa
  13. 07 8月, 2008 2 次提交
    • T
      Support hashing for duplicate-elimination in INTERSECT and EXCEPT queries. · 368df304
      Tom Lane 提交于
      This completes my project of improving usage of hashing for duplicate
      elimination (aggregate functions with DISTINCT remain undone, but that's
      for some other day).
      
      As with the previous patches, this means we can INTERSECT/EXCEPT on datatypes
      that can hash but not sort, and it means that INTERSECT/EXCEPT without ORDER
      BY are no longer certain to produce sorted output.
      368df304
    • T
      Teach the system how to use hashing for UNION. (INTERSECT/EXCEPT will follow, · 2d1d96b1
      Tom Lane 提交于
      but seem like a separate patch since most of the remaining work is on the
      executor side.)  I took the opportunity to push selection of the grouping
      operators for set operations into the parser where it belongs.  Otherwise this
      is just a small exercise in making prepunion.c consider both alternatives.
      
      As with the recent DISTINCT patch, this means we can UNION on datatypes that
      can hash but not sort, and it means that UNION without ORDER BY is no longer
      certain to produce sorted output.
      2d1d96b1
  14. 06 8月, 2008 2 次提交
    • T
      Do not allow Unique nodes to be scanned backwards. The code claimed that it · 3d40d5e7
      Tom Lane 提交于
      would work, but in fact it didn't return the same rows when moving backwards
      as when moving forwards.  This would have no visible effect in a DISTINCT
      query (at least assuming the column datatypes use a strong definition of
      equality), but it gave entirely wrong answers for DISTINCT ON queries.
      3d40d5e7
    • T
      Department of second thoughts: fix newly-added code in planner.c to make real · c78248c9
      Tom Lane 提交于
      sure that DISTINCT ON does what it's supposed to, ie, sort by the full ORDER
      BY list before unique-ifying.  The error seems masked in simple cases by the
      fact that query_planner won't return query pathkeys that only partially match
      the requested sort order, but I wouldn't want to bet that it couldn't be
      exposed in some way or other.
      c78248c9
  15. 05 8月, 2008 3 次提交