1. 25 1月, 2015 2 次提交
    • T
      Replace a bunch more uses of strncpy() with safer coding. · 586dd5d6
      Tom Lane 提交于
      strncpy() has a well-deserved reputation for being unsafe, so make an
      effort to get rid of nearly all occurrences in HEAD.
      
      A large fraction of the remaining uses were passing length less than or
      equal to the known strlen() of the source, in which case no null-padding
      can occur and the behavior is equivalent to memcpy(), though doubtless
      slower and certainly harder to reason about.  So just use memcpy() in
      these cases.
      
      In other cases, use either StrNCpy() or strlcpy() as appropriate (depending
      on whether padding to the full length of the destination buffer seems
      useful).
      
      I left a few strncpy() calls alone in the src/timezone/ code, to keep it
      in sync with upstream (the IANA tzcode distribution).  There are also a
      few such calls in ecpg that could possibly do with more analysis.
      
      AFAICT, none of these changes are more than cosmetic, except for the four
      occurrences in fe-secure-openssl.c, which are in fact buggy: an overlength
      source leads to a non-null-terminated destination buffer and ensuing
      misbehavior.  These don't seem like security issues, first because no stack
      clobber is possible and second because if your values of sslcert etc are
      coming from untrusted sources then you've got problems way worse than this.
      Still, it's undesirable to have unpredictable behavior for overlength
      inputs, so back-patch those four changes to all active branches.
      586dd5d6
    • T
      Remove no-longer-referenced src/port/gethostname.c. · 9222cd84
      Tom Lane 提交于
      This file hasn't been part of any build since 2005, and even before that
      wasn't used unless you configured --with-krb4 (and had a machine without
      gethostname(2), obviously).  What's more, we haven't actually called
      gethostname anywhere since then, either (except in thread_test.c, whose
      testing of this function is probably pointless).  So we don't need it.
      9222cd84
  2. 24 1月, 2015 5 次提交
    • A
      Fix assignment operator thinko · f2789ab8
      Alvaro Herrera 提交于
      Pointed out by Michael Paquier
      f2789ab8
    • R
      Fix typos, update README. · d1747571
      Robert Haas 提交于
      Peter Geoghegan
      d1747571
    • A
      vacuumdb: enable parallel mode · a1792320
      Alvaro Herrera 提交于
      This mode allows vacuumdb to open several server connections to vacuum
      or analyze several tables simultaneously.
      
      Author: Dilip Kumar.  Some reworking by Álvaro Herrera
      Reviewed by: Jeff Janes, Amit Kapila, Magnus Hagander, Andres Freund
      a1792320
    • R
      Don't use abbreviated keys for the final merge pass. · 5cefbf5a
      Robert Haas 提交于
      When we write tuples out to disk and read them back in, the abbreviated
      keys become non-abbreviated, because the readtup routines don't know
      anything about abbreviation.  But without this fix, the rest of the
      code still thinks the abbreviation-aware compartor should be used,
      so chaos ensues.
      
      Report by Andrew Gierth; patch by Peter Geoghegan.
      5cefbf5a
    • R
      Add an explicit cast to Size to hyperloglog.c · 6a3c6ba0
      Robert Haas 提交于
      MSVC generates a warning here; we hope this will make it happy.
      
      Report by Michael Paquier.  Patch by David Rowley.
      6a3c6ba0
  3. 23 1月, 2015 7 次提交
    • T
      Prevent duplicate escape-string warnings when using pg_stat_statements. · eb213acf
      Tom Lane 提交于
      contrib/pg_stat_statements will sometimes run the core lexer a second time
      on submitted statements.  Formerly, if you had standard_conforming_strings
      turned off, this led to sometimes getting two copies of any warnings
      enabled by escape_string_warning.  While this is probably no longer a big
      deal in the field, it's a pain for regression testing.
      
      To fix, change the lexer so it doesn't consult the escape_string_warning
      GUC variable directly, but looks at a copy in the core_yy_extra_type state
      struct.  Then, pg_stat_statements can change that copy to disable warnings
      while it's redoing the lexing.
      
      It seemed like a good idea to make this happen for all three of the GUCs
      consulted by the lexer, not just escape_string_warning.  There's not an
      immediate use-case for callers to adjust the other two AFAIK, but making
      it possible is easy enough and seems like good future-proofing.
      
      Arguably this is a bug fix, but there doesn't seem to be enough interest to
      justify a back-patch.  We'd not be able to back-patch exactly as-is anyway,
      for fear of breaking ABI compatibility of the struct.  (We could perhaps
      back-patch the addition of only escape_string_warning by adding it at the
      end of the struct, where there's currently alignment padding space.)
      eb213acf
    • P
      Fix whitespace · f5f2c2de
      Peter Eisentraut 提交于
      f5f2c2de
    • A
      Tweak BRIN minmax operator class · 972bf7d6
      Alvaro Herrera 提交于
      In the union support proc, we were not checking the hasnulls flag of
      value A early enough, so it could be skipped if the "allnulls" flag in
      value B is set.  Also, a check on the allnulls flag of value "B" was
      redundant, so remove it.
      
      Also change inet_minmax_ops to not be the default opclass for type inet,
      as a future inclusion operator class would be more useful and it's
      pretty difficult to change default opclass for a datatype later on.
      (There is no catversion bump for this catalog change; this shouldn't be
      a problem.)
      
      Extracted from a larger patch to add an "inclusion" operator class.
      
      Author: Emre Hasegeli
      972bf7d6
    • B
      docs: update libpq's PQputCopyData and PQputCopyEnd · b04d6916
      Bruce Momjian 提交于
      Clarify the meaning of libpq return values for PQputCopyData and
      PQputCopyEnd, particularly in non-blocking mode.
      
      Report by Robert Haas
      b04d6916
    • R
      Repair brain fade in commit b181a919. · d060e07f
      Robert Haas 提交于
      The split between which things need to happen in the C-locale case and
      which needed to happen in the locale-aware case was a few bricks short
      of a load.  Try to fix that.
      d060e07f
    • B
      adjust ACL owners for REASSIGN and ALTER OWNER TO · 59367fdf
      Bruce Momjian 提交于
      When REASSIGN and ALTER OWNER TO are used, both the object owner and ACL
      list should be changed from the old owner to the new owner. This patch
      fixes types, foreign data wrappers, and foreign servers to change their
      ACL list properly;  they already changed owners properly.
      
      BACKWARD INCOMPATIBILITY?
      
      Report by Alexey Bashtanov
      59367fdf
    • R
      More fixes for abbreviated keys infrastructure. · b181a919
      Robert Haas 提交于
      First, when LC_COLLATE = C, bttext_abbrev_convert should use memcpy()
      rather than strxfrm() to construct the abbreviated key, because the
      authoritative comparator uses memcpy().  If we do anything else here,
      we might get inconsistent answers, and the buildfarm says this risk
      is not theoretical.  It should be faster this way, too.
      
      Second, while I'm looking at bttext_abbrev_convert, convert a needless
      use of goto into the loop it's trying to implement into an actual
      loop.
      
      Both of the above problems date to the original commit of abbreviated
      keys, commit 4ea51cdf.
      
      Third, fix a bogus assignment to tss->locale before tss is set up.
      That's a new goof in commit b529b65d.
      b181a919
  4. 22 1月, 2015 2 次提交
    • R
      Heavily refactor btsortsupport_worker. · b529b65d
      Robert Haas 提交于
      Prior to commit 4ea51cdf, this function
      only had one job, which was to decide whether we could avoid trampolining
      through the fmgr layer when performing sort comparisons.  As of that
      commit, it has a second job, which is to decide whether we can use
      abbreviated keys.  Unfortunately, those two tasks are somewhat intertwined
      in the existing coding, which is likely why neither Peter Geoghegan nor
      I noticed prior to commit that this calls pg_newlocale_from_collation() in
      cases where it didn't previously.  The buildfarm noticed, though.
      
      To fix, rewrite the logic so that the decision as to which comparator to
      use is more cleanly separated from the decision about abbreviation.
      b529b65d
    • A
      reinit.h: Fix typo in identification comment · 813ffc0e
      Alvaro Herrera 提交于
      Author: Sawada Masahiko
      813ffc0e
  5. 21 1月, 2015 2 次提交
    • R
      Disable abbreviated keys on Windows. · 1be4eb1b
      Robert Haas 提交于
      Most of the Windows buildfarm members (bowerbird, hamerkop, currawong,
      jacana, brolga) are unhappy with yesterday's abbreviated keys patch,
      although there are some (narwhal, frogmouth) that seem OK with it.
      Since there's no obvious pattern to explain why some are working and
      others are failing, just disable this across-the-board on Windows for
      now.  This is a bit unfortunate since the optimization will be a big
      win in some cases, but we can't leave the buildfarm broken.
      1be4eb1b
    • B
      tools/ccsym: update for modern versions of gcc · f259e71d
      Bruce Momjian 提交于
      This dumps the predefined preprocessor macros
      f259e71d
  6. 20 1月, 2015 6 次提交
    • R
      Add strxfrm_l to list of functions where Windows adds an underscore. · f32a1fa4
      Robert Haas 提交于
      Per buildfarm failure on bowerbird after last night's commit
      4ea51cdf.
      
      Peter Geoghegan
      f32a1fa4
    • T
      In pg_regress, remove the temporary installation upon successful exit. · aa719391
      Tom Lane 提交于
      This results in a very substantial reduction in disk space usage during
      "make check-world", since that sequence involves creation of numerous
      temporary installations.  It should also help a bit in the buildfarm, even
      though the buildfarm script doesn't create as many temp installations,
      because the current script misses deleting some of them; and anyway it
      seems better to do this once in one place rather than expecting that
      script to get it right every time.
      
      In 9.4 and HEAD, also undo the unwise choice in commit b1aebbb6
      to report strerror(errno) after a rmtree() failure.  rmtree has already
      reported that, possibly for multiple failures with distinct errnos; and
      what's more, by the time it returns there is no good reason to assume
      that errno still reflects the last reportable error.  So reporting errno
      here is at best redundant and at worst badly misleading.
      
      Back-patch to all supported branches, so that future revisions of the
      buildfarm script can rely on this behavior.
      aa719391
    • T
      Adjust "pgstat wait timeout" message to be a translatable LOG message. · 75b48e1f
      Tom Lane 提交于
      Per discussion, change the log level of this message to be LOG not WARNING.
      The main point of this change is to avoid causing buildfarm run failures
      when the stats collector is exceptionally slow to respond, which it not
      infrequently is on some of the smaller/slower buildfarm members.
      
      This change does lose notice to an interactive user when his stats query
      is looking at out-of-date stats, but the majority opinion (not necessarily
      that of yours truly) is that WARNING messages would probably not get
      noticed anyway on heavily loaded production systems.  A LOG message at
      least ensures that the problem is recorded somewhere where bulk auditing
      for the issue is possible.
      
      Also, instead of an untranslated "pgstat wait timeout" message, provide
      a translatable and hopefully more understandable message "using stale
      statistics instead of current ones because stats collector is not
      responding".  The original text was written hastily under the assumption
      that it would never really happen in practice, which we now know to be
      unduly optimistic.
      
      Back-patch to all active branches, since we've seen the buildfarm issue
      in all branches.
      75b48e1f
    • A
      Fix various shortcomings of the new PrivateRefCount infrastructure. · 2d115e47
      Andres Freund 提交于
      As noted by Tom Lane the improvements in 4b4b680c had the problem
      that in some situations we searched, entered and modified entries in
      the private refcount hash while holding a spinlock. I had tried to
      keep the logic entirely local to PinBuffer_Locked(), but that's not
      really possible given it's called with a spinlock held...
      
      Besides being disadvantageous from a performance point of view, this
      also has problems with error handling safety. If we failed inserting
      an entry into the hashtable due to an out of memory error, we'd error
      out with a held spinlock. Not good.
      
      Change the way private refcounts are manipulated: Before a buffer can
      be tracked an entry has to be reserved using
      ReservePrivateRefCountEntry(); then, if a entry is not found using
      GetPrivateRefCountEntry(), it can be entered with
      NewPrivateRefCountEntry().
      
      Also take advantage of the fact that PinBuffer_Locked() currently is
      never called for buffers that already have been pinned by the current
      backend and don't search the private refcount entries for preexisting
      local pins. That results in a small, but measurable, performance
      improvement.
      
      Additionally make ReleaseBuffer() always call UnpinBuffer() for shared
      buffers. That avoids duplicating work in an eventual UnpinBuffer()
      call that already has been done in ReleaseBuffer() and also saves some
      code.
      
      Per discussion with Tom Lane.
      
      Discussion: 15028.1418772313@sss.pgh.pa.us
      2d115e47
    • R
      Use abbreviated keys for faster sorting of text datums. · 4ea51cdf
      Robert Haas 提交于
      This commit extends the SortSupport infrastructure to allow operator
      classes the option to provide abbreviated representations of Datums;
      in the case of text, we abbreviate by taking the first few characters
      of the strxfrm() blob.  If the abbreviated comparison is insufficent
      to resolve the comparison, we fall back on the normal comparator.
      This can be much faster than the old way of doing sorting if the
      first few bytes of the string are usually sufficient to resolve the
      comparison.
      
      There is the potential for a performance regression if all of the
      strings to be sorted are identical for the first 8+ characters and
      differ only in later positions; therefore, the SortSupport machinery
      now provides an infrastructure to abort the use of abbreviation if
      it appears that abbreviation is producing comparatively few distinct
      keys.  HyperLogLog, a streaming cardinality estimator, is included in
      this commit and used to make that determination for text.
      
      Peter Geoghegan, reviewed by me.
      4ea51cdf
    • R
      Typo fix. · 1605291b
      Robert Haas 提交于
      Etsuro Fujita
      1605291b
  7. 19 1月, 2015 5 次提交
  8. 18 1月, 2015 1 次提交
  9. 17 1月, 2015 5 次提交
    • A
      Replace walsender's latch with the general shared latch. · ff44fba4
      Andres Freund 提交于
      Relying on the normal shared latch simplifies interrupt/signal
      handling because we can rely on all signal handlers setting the proc
      latch. That in turn allows us to avoid the use of
      ImmediateInterruptOK, which arguably isn't correct because
      WaitLatchOrSocket isn't declared to be immediately interruptible.
      
      Also change sections that wait on the walsender's latch to notice
      interrupts quicker/more reliably and make them more consistent with
      each other.
      
      This is part of a larger "get rid of ImmediateInterruptOK" series.
      
      Discussion: 20150115020335.GZ5245@awork2.anarazel.de
      ff44fba4
    • T
      Show sort ordering options in EXPLAIN output. · 20af53d7
      Tom Lane 提交于
      Up to now, EXPLAIN has contented itself with printing the sort expressions
      in a Sort or Merge Append plan node.  This patch improves that by
      annotating the sort keys with COLLATE, DESC, USING, and/or NULLS FIRST/LAST
      whenever nondefault sort ordering options are used.  The output is now a
      reasonably close approximation of an ORDER BY clause equivalent to the
      plan's ordering.
      
      Marius Timmer, Lukas Kreft, and Arne Scheffer; reviewed by Mike Blackwell.
      Some additional hacking by me.
      20af53d7
    • H
      Advance backend's advertised xmin more aggressively. · 94028691
      Heikki Linnakangas 提交于
      Currently, a backend will reset it's PGXACT->xmin value when it doesn't
      have any registered snapshots left. That covered the common case that a
      transaction in read committed mode runs several queries, one after each
      other, as there would be no snapshots active between those queries.
      However, if you hold cursors across each of the query, we didn't get a
      chance to reset xmin.
      
      To make that better, keep all the registered snapshots in a pairing heap,
      ordered by xmin so that it's always quick to find the snapshot with the
      smallest xmin. That allows us to advance PGXACT->xmin whenever the oldest
      snapshot is deregistered, even if there are others still active.
      
      Per discussion originally started by Jeff Davis back in 2009 and more
      recently by Robert Haas.
      94028691
    • T
      Improve new caching logic in tbm_add_tuples(). · 779fdcde
      Tom Lane 提交于
      For no significant extra complexity, we can cache knowledge that the
      target page is lossy, and save a hash_search per iteration in that
      case as well.  This probably makes little difference, since the extra
      rechecks that must occur when pages are lossy are way more expensive
      than anything we can save here ... but we might as well do it if we're
      going to cache anything.
      779fdcde
    • A
      Make tbm_add_tuples more efficient by caching the last acccessed page. · f5ae3ba4
      Andres Freund 提交于
      When adding a large number of tuples to a TID bitmap using
      tbm_add_tuples() sometimes a lot of time was spent looking up a page's
      entry in the bitmap's internal hashtable.
      
      Improve efficiency by caching the last accessed page, while iterating
      over the passed in tuples, hoping consecutive tuples will often be on
      the same page.  In many cases that's a good bet, and in the rest the
      added overhead isn't big.
      
      Discussion: 54479A85.8060309@sigaev.ru
      
      Author: Teodor Sigaev
      Reviewed-By: David Rowley
      f5ae3ba4
  10. 16 1月, 2015 5 次提交
    • H
      Another attempt at fixing Windows Norwegian locale. · aa1d2fc5
      Heikki Linnakangas 提交于
      Previous fix mapped "Norwegian (Bokmål)" locale, which contains a non-ASCII
      character, to the pure ASCII alias "norwegian-bokmal". However, it turns
      out that more recent versions of the CRT library, in particular MSVCR110
      (Visual Studio 2012), changed the behaviour of setlocale() so that if
      you pass "norwegian-bokmal" to setlocale, it returns "Norwegian_Norway".
      
      That meant trouble, when setlocale(..., NULL) first returned
      "Norwegian (Bokmål)_Norway", which we mapped to "norwegian-bokmal_Norway",
      but another call to setlocale(..., "norwegian-bokmal_Norway") returned
      "Norwegian_Norway". That caused PostgreSQL to think that they are different
      locales, and therefore not compatible. That caused initdb to fail at
      CREATE DATABASE.
      
      Older CRT versions seem to accept "Norwegian_Norway" too, so change the
      mapping to return "Norwegian_Norway" instead of "norwegian-bokmal".
      
      Backpatch to 9.2 like the previous attempt. We haven't made a release that
      includes the previous fix yet, so we don't need to worry about changing the
      locale of existing clusters from "norwegian-bokmal" to "Norwegian_Norway".
      (Doing any mapping like this at all requires changing the locale of
      existing databases; the release notes need to include instructions for
      that).
      aa1d2fc5
    • N
      Update "pg_regress --no-locale" for Darwin and Windows. · 28df6a0d
      Noah Misch 提交于
      Commit 894459e5 revealed this option to
      be broken for NLS builds on Darwin, but "make -C contrib/unaccent check"
      and the buildfarm client rely on it.  Fix that configuration by
      redefining the option to imply LANG=C on Darwin.  In passing, use LANG=C
      instead of LANG=en on Windows; since only postmaster startup uses that
      value, testers are unlikely to notice the change.  Back-patch to 9.0,
      like the predecessor commit.
      28df6a0d
    • T
      Fix use-of-already-freed-memory problem in EvalPlanQual processing. · c480cb9d
      Tom Lane 提交于
      Up to now, the "child" executor state trees generated for EvalPlanQual
      rechecks have simply shared the ResultRelInfo arrays used for the original
      execution tree.  However, this leads to dangling-pointer problems, because
      ExecInitModifyTable() is all too willing to scribble on some fields of the
      ResultRelInfo(s) even when it's being run in one of those child trees.
      This trashes those fields from the perspective of the parent tree, because
      even if the generated subtree is logically identical to what was in use in
      the parent, it's in a memory context that will go away when we're done
      with the child state tree.
      
      We do however want to share information in the direction from the parent
      down to the children; in particular, fields such as es_instrument *must*
      be shared or we'll lose the stats arising from execution of the children.
      So the simplest fix is to make a copy of the parent's ResultRelInfo array,
      but not copy any fields back at end of child execution.
      
      Per report from Manuel Kniep.  The added isolation test is based on his
      example.  In an unpatched memory-clobber-enabled build it will reliably
      fail with "ctid is NULL" errors in all branches back to 9.1, as a
      consequence of junkfilter->jf_junkAttNo being overwritten with $7f7f.
      This test cannot be run as-is before that for lack of WITH syntax; but
      I have no doubt that some variant of this problem can arise in older
      branches, so apply the code change all the way back.
      c480cb9d
    • H
      Fix thinko in re-setting wal_log_hints flag from a parameter-change record. · 49b04188
      Heikki Linnakangas 提交于
      The flag is supposed to be copied from the record. Same issue with
      track_commit_timestamps, but that's master-only.
      
      Report and fix by Petr Jalinek. Backpatch to 9.4, where wal_log_hints was
      added.
      49b04188
    • T
      Rearrange explain.c's API so callers need not embed sizeof(ExplainState). · 8e166e16
      Tom Lane 提交于
      The folly of the previous arrangement was just demonstrated: there's no
      convenient way to add fields to ExplainState without breaking ABI, even
      if callers have no need to touch those fields.  Since we might well need
      to do that again someday in back branches, let's change things so that
      only explain.c has to have sizeof(ExplainState) compiled into it.  This
      costs one extra palloc() per EXPLAIN operation, which is surely pretty
      negligible.
      8e166e16