Skip to content
Snippets Groups Projects
  1. Oct 17, 2012
  2. 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
  3. 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
  4. 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
  5. Oct 10, 2012
  6. 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
  7. Oct 08, 2012
  8. Oct 05, 2012
  9. Oct 04, 2012
  10. 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
  11. Oct 02, 2012
  12. 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
  13. 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
  14. 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
  15. 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
  16. Sep 24, 2012
  17. Sep 19, 2012
Loading