1. 01 9月, 2011 6 次提交
    • H
      Fix MinGW build, broken by my previous patch to add a setlocale() wrapper · 65e899b2
      Heikki Linnakangas 提交于
      on Windows. ecpglib doesn't link with libpgport, but picks and compiles
      the .c files it needs individually. To cope with that, move the setlocale()
      wrapper from chklocale.c to a separate setlocale.c file, and include that
      in ecpglib.
      65e899b2
    • H
      setlocale() on Windows doesn't work correctly if the locale name contains · a88b6e4c
      Heikki Linnakangas 提交于
      dots. I previously worked around this in initdb, mapping the known
      problematic locale names to aliases that work, but Hiroshi Inoue pointed
      out that that's not enough because even if you use one of the aliases, like
      "Chinese_HKG", setlocale(LC_CTYPE, NULL) returns back the long form, ie.
      "Chinese_Hong Kong S.A.R.". When we try to restore an old locale value by
      passing that value back to setlocale(), it fails. Note that you are affected
      by this bug also if you use one of those short-form names manually, so just
      reverting the hack in initdb won't fix it.
      
      To work around that, move the locale name mapping from initdb to a wrapper
      around setlocale(), so that the mapping is invoked on every setlocale() call.
      
      Also, add a few checks for failed setlocale() calls in the backend. These
      calls shouldn't fail, and if they do there isn't much we can do about it,
      but at least you'll get a warning.
      
      Backpatch to 9.1, where the initdb hack was introduced. The Windows bug
      affects older versions too if you set locale manually to one of the aliases,
      but given the lack of complaints from the field, I'm hesitent to backpatch.
      a88b6e4c
    • H
      Move the line to undefine setlocale() macro on Win32 outside USE_REPL_SNPRINTF · 8ea02570
      Heikki Linnakangas 提交于
      ifdef block. It has nothing to do with whether the replacement snprintf
      function is used. It caused no live bug, because the replacement snprintf
      function is always used on Win32, but it was nevertheless misplaced.
      8ea02570
    • T
      Further repair of eqjoinsel ndistinct-clamping logic. · 0d3b231e
      Tom Lane 提交于
      Examination of examples provided by Mark Kirkwood and others has convinced
      me that actually commit 7f3eba30 was quite
      a few bricks shy of a load.  The useful part of that patch was clamping
      ndistinct for the inner side of a semi or anti join, and the reason why
      that's needed is that it's the only way that restriction clauses
      eliminating rows from the inner relation can affect the estimated size of
      the join result.  I had not clearly understood why the clamping was
      appropriate, and so mis-extrapolated to conclude that we should clamp
      ndistinct for the outer side too, as well as for both sides of regular
      joins.  These latter actions were all wrong, and are reverted with this
      patch.  In addition, the clamping logic is now made to affect the behavior
      of both paths in eqjoinsel_semi, with or without MCV lists to compare.
      When we have MCVs, we suppose that the most common values are the ones
      that are most likely to survive the decimation resulting from a lower
      restriction clause, so we think of the clamping as eliminating non-MCV
      values, or potentially even the least-common MCVs for the inner relation.
      
      Back-patch to 8.4, same as previous fixes in this area.
      0d3b231e
    • B
      Fix pg_upgrade to preserve toast relfrozenxids for old 8.3 servers. · 7971a57f
      Bruce Momjian 提交于
      This fixes a pg_upgrade bug that could lead to query errors when
      clog files are improperly removed.
      
      Backpatch to 8.4, 9.0, 9.1.
      7971a57f
    • T
      Improve eqjoinsel's ndistinct clamping to work for multiple levels of join. · 97930cf5
      Tom Lane 提交于
      This patch fixes an oversight in my commit
      7f3eba30 of 2008-10-23.  That patch
      accounted for baserel restriction clauses that reduced the number of rows
      coming out of a table (and hence the number of possibly-distinct values of
      a join variable), but not for join restriction clauses that might have been
      applied at a lower level of join.  To account for the latter, look up the
      sizes of the min_lefthand and min_righthand inputs of the current join,
      and clamp with those in the same way as for the base relations.
      
      Noted while investigating a complaint from Ben Chobot, although this in
      itself doesn't seem to explain his report.
      
      Back-patch to 8.4; previous versions used different estimation methods
      for which this heuristic isn't relevant.
      97930cf5
  2. 31 8月, 2011 8 次提交
  3. 30 8月, 2011 4 次提交
  4. 29 8月, 2011 5 次提交
    • R
      Improve spinlock performance for HP-UX, ia64, non-gcc. · c01c25fb
      Robert Haas 提交于
      At least on this architecture, it's very important to spin on a
      non-atomic instruction and only retry the atomic once it appears
      that it will succeed.  To fix this, split TAS() into two macros:
      TAS(), for trying to grab the lock the first time, and TAS_SPIN(),
      for spinning until we get it.  TAS_SPIN() defaults to same as TAS(),
      but we can override it when we know there's a better way.
      
      It's likely that some of the other cases in s_lock.h require
      similar treatment, but this is the only one we've got conclusive
      evidence for at present.
      c01c25fb
    • T
      Actually, all of parallel restore's limitations should be tested earlier. · 6e1f1fee
      Tom Lane 提交于
      On closer inspection, whining in restore_toc_entries_parallel is really
      much too late for any user-facing error case.  The right place to do it
      is at the start of RestoreArchive(), before we've done anything interesting
      (suh as trying to DROP all the targets ...)
      
      Back-patch to 8.4, where parallel restore was introduced.
      6e1f1fee
    • T
      Be more user-friendly about unsupported cases for parallel pg_restore. · d6e7abe4
      Tom Lane 提交于
      If we are unable to do a parallel restore because the input file is stdin
      or is otherwise unseekable, we should complain and fail immediately, not
      after having done some of the restore.  Complaining once per thread isn't
      so cool either, and the messages should be worded to make it clear this is
      an unsupported case not some weird race-condition bug.  Per complaint from
      Lonni Friedman.
      
      Back-patch to 8.4, where parallel restore was introduced.
      d6e7abe4
    • T
      Include $cc_string in the info reported by a configure run. · 2c5d6f1f
      Tom Lane 提交于
      Without this, it's not very easy to tell which compiler version a buildfarm
      animal is actually using at the moment.
      2c5d6f1f
    • B
      Modify pgrminclude -v to report include files that can't be compiled on · 94db6664
      Bruce Momjian 提交于
      their own.
      
      Avoid compile problems with defines being redefined after the removal of
      the #if blocks.
      
      Change script to use shell functions for simplicity.
      94db6664
  5. 28 8月, 2011 3 次提交
    • T
      Don't assume that "E" response to NEGOTIATE_SSL_CODE means pre-7.0 server. · a49fbaaf
      Tom Lane 提交于
      These days, such a response is far more likely to signify a server-side
      problem, such as fork failure.  Reporting "server does not support SSL"
      (in sslmode=require) could be quite misleading.  But the results could
      be even worse in sslmode=prefer: if the problem was transient and the
      next connection attempt succeeds, we'll have silently fallen back to
      protocol version 2.0, possibly disabling features the user needs.
      
      Hence, it seems best to just eliminate the assumption that backing off
      to non-SSL/2.0 protocol is the way to recover from an "E" response, and
      instead treat the server error the same as we would in non-SSL cases.
      
      I tested this change against a pre-7.0 server, and found that there
      was a second logic bug in the "prefer" path: the test to decide whether
      to make a fallback connection attempt assumed that we must have opened
      conn->ssl, which in fact does not happen given an "E" response.  After
      fixing that, the code does indeed connect successfully to pre-7.0,
      as long as you didn't set sslmode=require.  (If you did, you get
      "Unsupported frontend protocol", which isn't completely off base
      given the server certainly doesn't support SSL.)
      
      Since there seems no reason to believe that pre-7.0 servers exist anymore
      in the wild, back-patch to all supported branches.
      a49fbaaf
    • P
      f44d275b
    • T
      Ensure we discard unread/unsent data when abandoning a connection attempt. · 724e30c9
      Tom Lane 提交于
      There are assorted situations wherein PQconnectPoll() will abandon a
      connection attempt and try again with different parameters (eg, SSL versus
      not SSL).  However, the code forgot to discard any pending data in libpq's
      I/O buffers when doing this.  In at least one case (server returns E
      message during SSL negotiation), there is unread input data which bollixes
      the next connection attempt.  I have not checked to see whether this is
      possible in the other cases where we close the socket and retry, but it
      seems like a matter of good defensive programming to add explicit
      buffer-flushing code to all of them.
      
      This is one of several issues exposed by Daniel Farina's report of
      misbehavior after a server-side fork failure.
      
      This has been wrong since forever, so back-patch to all supported branches.
      724e30c9
  6. 27 8月, 2011 14 次提交