Skip to content
Snippets Groups Projects
  1. Oct 18, 2012
    • Simon Riggs's avatar
      Isolation test for DROP INDEX CONCURRENTLY · 623e49c0
      Simon Riggs authored
      for recent concurrent changes.
      
      Abhijit Menon-Sen
      623e49c0
    • Simon Riggs's avatar
      Re-think guts of DROP INDEX CONCURRENTLY. · 5da1c4b7
      Simon Riggs authored
      Concurrent behaviour was flawed when using
      a two-step process, so add an additional
      phase of processing to ensure concurrency
      for both SELECTs and INSERT/UPDATE/DELETEs.
      
      Backpatch to 9.2
      
      Andres Freund, tweaked by me
      5da1c4b7
    • Tom Lane's avatar
      Fix planning of non-strict equivalence clauses above outer joins. · 0237b394
      Tom Lane authored
      If a potential equivalence clause references a variable from the nullable
      side of an outer join, the planner needs to take care that derived clauses
      are not pushed to below the outer join; else they may use the wrong value
      for the variable.  (The problem arises only with non-strict clauses, since
      if an upper clause can be proven strict then the outer join will get
      simplified to a plain join.)  The planner attempted to prevent this type
      of error by checking that potential equivalence clauses aren't
      outerjoin-delayed as a whole, but actually we have to check each side
      separately, since the two sides of the clause will get moved around
      separately if it's treated as an equivalence.  Bugs of this type can be
      demonstrated as far back as 7.4, even though releases before 8.3 had only
      a very ad-hoc notion of equivalence clauses.
      
      In addition, we neglected to account for the possibility that such clauses
      might have nonempty nullable_relids even when not outerjoin-delayed; so the
      equivalence-class machinery lacked logic to compute correct nullable_relids
      values for clauses it constructs.  This oversight was harmless before 9.2
      because we were only using RestrictInfo.nullable_relids for OR clauses;
      but as of 9.2 it could result in pushing constructed equivalence clauses
      to incorrect places.  (This accounts for bug #7604 from Bill MacArthur.)
      
      Fix the first problem by adding a new test check_equivalence_delay() in
      distribute_qual_to_rels, and fix the second one by adding code in
      equivclass.c and called functions to set correct nullable_relids for
      generated clauses.  Although I believe the second part of this is not
      currently necessary before 9.2, I chose to back-patch it anyway, partly to
      keep the logic similar across branches and partly because it seems possible
      we might find other reasons why we need valid values of nullable_relids in
      the older branches.
      
      Add regression tests illustrating these problems.  In 9.0 and up, also
      add test cases checking that we can push constants through outer joins,
      since we've broken that optimization before and I nearly broke it again
      with an overly simplistic patch for this problem.
      0237b394
    • Simon Riggs's avatar
      Revert tests for drop index concurrently. · 12609127
      Simon Riggs authored
      12609127
    • Simon Riggs's avatar
      Add isolation tests for DROP INDEX CONCURRENTLY. · d4412fa0
      Simon Riggs authored
      Backpatch to 9.2 to ensure bugs are fixed.
      
      Abhijit Menon-Sen
      d4412fa0
  2. Oct 17, 2012
    • Tom Lane's avatar
      Close un-owned SMgrRelations at transaction end. · d7598aee
      Tom Lane authored
      If an SMgrRelation is not "owned" by a relcache entry, don't allow it to
      live past transaction end.  This design allows the same SMgrRelation to be
      used for blind writes of multiple blocks during a transaction, but ensures
      that we don't hold onto such an SMgrRelation indefinitely.  Because an
      SMgrRelation typically corresponds to open file descriptors at the fd.c
      level, leaving it open when there's no corresponding relcache entry can
      mean that we prevent the kernel from reclaiming deleted disk space.
      (While CacheInvalidateSmgr messages usually fix that, there are cases
      where they're not issued, such as DROP DATABASE.  We might want to add
      some more sinval messaging for that, but I'd be inclined to keep this
      type of logic anyway, since allowing VFDs to accumulate indefinitely
      for blind-written relations doesn't seem like a good idea.)
      
      This code replaces a previous attempt towards the same goal that proved
      to be unreliable.  Back-patch to 9.1 where the previous patch was added.
      d7598aee
    • Tom Lane's avatar
      Revert "Use "transient" files for blind writes, take 2". · a1f064fc
      Tom Lane authored
      This reverts commit fba105b1.
      That approach had problems with the smgr-level state not tracking what
      we really want to happen, and with the VFD-level state not tracking the
      smgr-level state very well either.  In consequence, it was still possible
      to hold kernel file descriptors open for long-gone tables (as in recent
      report from Tore Halset), and yet there were also cases of FDs being closed
      undesirably soon.  A replacement implementation will follow.
      a1f064fc
    • Simon Riggs's avatar
      Fix typo in previous commit · 4be1d015
      Simon Riggs authored
      4be1d015
    • Simon Riggs's avatar
  3. Oct 15, 2012
    • Heikki Linnakangas's avatar
      Fix race condition in pg_ctl reading postmaster.pid. · 54037476
      Heikki Linnakangas authored
      If postmaster changed postmaster.pid while pg_ctl was reading it, pg_ctl
      could overrun the buffer it allocated for the file. Fix by reading the
      whole file to memory with one read() call.
      
      initdb contains an identical copy of the readfile() function, but the files
      that initdb reads are static, not modified concurrently. Nevertheless, add
      a simple bounds-check there, if only to silence static analysis tools.
      
      Per report from Dave Vitek. Backpatch to all supported branches.
      54037476
    • Tom Lane's avatar
      Split up process latch initialization for more-fail-soft behavior. · 4d4005cb
      Tom Lane authored
      In the previous coding, new backend processes would attempt to create their
      self-pipe during the OwnLatch call in InitProcess.  However, pipe creation
      could fail if the kernel is short of resources; and the system does not
      recover gracefully from a FATAL error right there, since we have armed the
      dead-man switch for this process and not yet set up the on_shmem_exit
      callback that would disarm it.  The postmaster then forces an unnecessary
      database-wide crash and restart, as reported by Sean Chittenden.
      
      There are various ways we could rearrange the code to fix this, but the
      simplest and sanest seems to be to split out creation of the self-pipe into
      a new function InitializeLatchSupport, which must be called from a place
      where failure is allowed.  For most processes that gets called in
      InitProcess or InitAuxiliaryProcess, but processes that don't call either
      but still use latches need their own calls.
      
      Back-patch to 9.1, which has only a part of the latch logic that 9.2 and
      HEAD have, but nonetheless includes this bug.
      4d4005cb
  4. Oct 12, 2012
    • Tom Lane's avatar
      Make equal() ignore CoercionForm fields for better planning with casts. · 0fbd4438
      Tom Lane authored
      This change ensures that the planner will see implicit and explicit casts
      as equivalent for all purposes, except in the minority of cases where
      there's actually a semantic difference (as reflected by having a 3-argument
      cast function).  In particular, this fixes cases where the EquivalenceClass
      machinery failed to consider two references to a varchar column as
      equivalent if one was implicitly cast to text but the other was explicitly
      cast to text, as seen in bug #7598 from Vaclav Juza.  We have had similar
      bugs before in other parts of the planner, so I think it's time to fix this
      problem at the core instead of continuing to band-aid around it.
      
      Remove set_coercionform_dontcare(), which represents the band-aid
      previously in use for allowing matching of index and constraint expressions
      with inconsistent cast labeling.  (We can probably get rid of
      COERCE_DONTCARE altogether, but I don't think removing that enum value in
      back branches would be wise; it's possible there's third party code
      referring to it.)
      
      Back-patch to 9.2.  We could go back further, and might want to once this
      has been tested more; but for the moment I won't risk destabilizing plan
      choices in long-since-stable branches.
      0fbd4438
  5. Oct 11, 2012
    • Tom Lane's avatar
      Fix cross-type case in partial row matching for hashed subplans. · a963c8b8
      Tom Lane authored
      When hashing a subplan like "WHERE (a, b) NOT IN (SELECT x, y FROM ...)",
      findPartialMatch() attempted to match rows using the hashtable's internal
      equality operators, which of course are for x and y's datatypes.  What we
      need to use are the potentially cross-type operators for a=x, b=y, etc.
      Failure to do that leads to wrong answers or even crashes.  The scope for
      problems is limited to cases where we have different types with compatible
      hash functions (else we'd not be using a hashed subplan), but for example
      int4 vs int8 can cause the problem.
      
      Per bug #7597 from Bo Jensen.  This has been wrong since the hashed-subplan
      code was written, so patch all the way back.
      a963c8b8
  6. Oct 10, 2012
  7. Oct 09, 2012
    • Tom Lane's avatar
      Fix lo_import and lo_export to return useful error messages more often. · c5b8daa0
      Tom Lane authored
      I found that these functions tend to return -1 while leaving an empty error
      message string in the PGconn, if they suffer some kind of I/O error on the
      file.  The reason is that lo_close, which thinks it's executed a perfectly
      fine SQL command, clears the errorMessage.  The minimum-change workaround
      is to reorder operations here so that we don't fill the errorMessage until
      after lo_close.
      c5b8daa0
    • Tom Lane's avatar
      Fix lo_export usage in example programs. · cf9d9929
      Tom Lane authored
      lo_export returns -1, not zero, on failure.
      cf9d9929
  8. Oct 08, 2012
  9. Oct 05, 2012
  10. Oct 04, 2012
  11. Oct 03, 2012
    • Tom Lane's avatar
      Avoid planner crash/Assert failure with joins to unflattened subqueries. · 49bf146b
      Tom Lane authored
      examine_simple_variable supposed that any RTE_SUBQUERY rel it gets pointed
      at must have been planned already.  However, this isn't a safe assumption
      because we must do selectivity estimation while generating indexscan paths,
      and that code might look at join clauses involving a rel that the loop in
      set_base_rel_sizes() hasn't reached yet.  The simplest fix is to play dumb
      in such a situation, that is give up trying to extract any stats for the
      Var.  This could possibly be improved by making a separate pass over the
      RTE list to plan each unflattened subquery before we start the main
      planning work --- but that would be pretty invasive and it doesn't seem
      worth it, for now at least.  (We couldn't just break set_base_rel_sizes()
      into two loops: the prescan would need to handle all subquery rels in the
      query, not only those in the current join subproblem.)
      
      This bug was introduced in commit 1cb108ef,
      although I think that subsequent changes may have exposed it more than it
      was originally.  Per bug #7580 from Maxim Boguk.
      49bf146b
    • Alvaro Herrera's avatar
      REASSIGN OWNED: consider grants on tablespaces, too · da24920a
      Alvaro Herrera authored
      Apparently this was considered in the original code (see commit
      cec3b0a9) but I failed to notice that such entries would always be
      skipped by the database check at the start of the loop.
      
      Per bugs #7578 by Nikolay, #6116 by tushar.qa@gmail.com.
      da24920a
    • Bruce Momjian's avatar
      In pg_upgrade, use full path name for analyze_new_cluster.sh script. · 03dfbce9
      Bruce Momjian authored
      Backpatch to 9.2.
      03dfbce9
  12. Oct 02, 2012
  13. Sep 29, 2012
    • Tom Lane's avatar
      Fix bugs in "restore.sql" script emitted in pg_dump tar output. · fab2ae0e
      Tom Lane authored
      The tar output module did some very ugly and ultimately incorrect hacking
      on COPY commands to try to get them to work in the context of restoring a
      deconstructed tar archive.  In particular, it would fail altogether for
      table names containing any upper-case characters, since it smashed the
      command string to lower-case before modifying it (and, just to add insult
      to injury, did that in a way that would fail in multibyte encodings).
      I don't see any particular value in being flexible about the case of the
      command keywords, since the string will just have been created by
      dumpTableData, so let's get rid of the whole case-folding thing.
      
      Also, it doesn't seem to meet the POLA for the script to restore data only
      in COPY mode, so add \i commands to make it have comparable behavior in
      --inserts mode.
      
      Noted while looking at the tar-output code in connection with Brian
      Weaver's patch.
      fab2ae0e
  14. Sep 28, 2012
    • Tom Lane's avatar
      Fix tar files emitted by pg_basebackup to be POSIX conformant. · 900d77fa
      Tom Lane authored
      Back-patch portions of commit 05b555d1.
      There doesn't seem to be any reason not to fix pg_basebackup fully, but
      we can't change pg_dump's "magic" string without breaking older versions
      of pg_restore.  Instead, just patch pg_restore to accept either version
      of the magic string, in hopes of avoiding compatibility problems when
      9.3 comes out.  I also fixed pg_dump to write the correct 2-block EOF
      marker, since that won't create a compatibility problem with pg_restore
      and it could help with some versions of tar.
      
      Brian Weaver and Tom Lane
      900d77fa
  15. Sep 27, 2012
    • Tom Lane's avatar
      Fix btmarkpos/btrestrpos to handle array keys. · f2366e58
      Tom Lane authored
      This fixes another error in commit 9e8da0f7.
      I neglected to make the mark/restore functionality save and restore the
      current set of array key values, which led to strange behavior if an
      IndexScan with ScalarArrayOpExpr quals was used as the inner side of a
      mergejoin.  Per bug #7570 from Melese Tesfaye.
      f2366e58
    • Alvaro Herrera's avatar
      Have pg_terminate/cancel_backend not ERROR on non-existent processes · 01546402
      Alvaro Herrera authored
      This worked fine for superusers, but not for ordinary users trying to
      cancel their own processes.  Tweak the order the checks are done in so
      that we correctly return SIGNAL_BACKEND_ERROR (which current callers
      know to ignore without erroring out) so that an ordinary user can loop
      through a resultset without fearing that a process might exit in the
      middle of said looping -- causing the remaining processes to go
      unsignalled.
      
      Incidentally, the last in-core caller of IsBackendPid() is now gone.
      However, the function is exported and must remain in place, because
      there are plenty of callers in external modules.
      
      Author: Josh Kupershmidt
      
      Reviewed by Noah Misch
      01546402
  16. Sep 25, 2012
    • Tom Lane's avatar
      Fix examples of how to use "su" while starting the server. · f7b836eb
      Tom Lane authored
      The syntax "su -c 'command' username" is not accepted by all versions of
      su, for example not OpenBSD's.  More portable is "su username -c
      'command'".  So change runtime.sgml to recommend that syntax.  Also,
      add a -D switch to the OpenBSD example script, for consistency with other
      examples.  Per Denis Lapshin and Gábor Hidvégi.
      f7b836eb
  17. Sep 24, 2012
Loading