1. 18 2月, 2016 1 次提交
    • J
      Add new system view, pg_config · a5c43b88
      Joe Conway 提交于
      Move and refactor the underlying code for the pg_config client
      application to src/common in support of sharing it with a new
      system information SRF called pg_config() which makes the same
      information available via SQL. Additionally wrap the SRF with a
      new system view, as called pg_config.
      
      Patch by me with extensive input and review by Michael Paquier
      and additional review by Alvaro Herrera.
      a5c43b88
  2. 17 2月, 2016 4 次提交
    • R
      Reuse abbreviated keys in ordered [set] aggregates. · f1f5ec1e
      Robert Haas 提交于
      When processing ordered aggregates following a sort that could make use
      of the abbreviated key optimization, only call the equality operator to
      compare successive pairs of tuples when their abbreviated keys were not
      equal.
      
      Peter Geoghegan, reviewd by Andreas Karlsson and by me.
      f1f5ec1e
    • T
      Make plpython cope with funny characters in function names. · 66f50386
      Tom Lane 提交于
      A function name that's double-quoted in SQL can contain almost any
      characters, but we were using that name directly as part of the name
      generated for the Python-level function, and Python doesn't like
      anything that isn't pretty much a standard identifier.  To fix,
      replace anything that isn't an ASCII letter or digit with an underscore
      in the generated name.  This doesn't create any risk of duplicate Python
      function names because we were already appending the function OID to
      the generated name to ensure uniqueness.  Per bug #13960 from Jim Nasby.
      
      Patch by Jim Nasby, modified a bit by me.  Back-patch to all
      supported branches.
      66f50386
    • T
      Improve documentation about CREATE INDEX CONCURRENTLY. · a65313f2
      Tom Lane 提交于
      Clarify the description of which transactions will block a CREATE INDEX
      CONCURRENTLY command from proceeding, and mention that the index might
      still not be usable after CREATE INDEX completes.  (This happens if the
      index build detected broken HOT chains, so that pg_index.indcheckxmin gets
      set, and there are open old transactions preventing the xmin horizon from
      advancing past the index's initial creation.  I didn't want to explain what
      broken HOT chains are, though, so I omitted an explanation of exactly when
      old transactions prevent the index from being used.)
      
      Per discussion with Chris Travers.  Back-patch to all supported branches,
      since the same text appears in all of them.
      a65313f2
    • B
      release notes: fix 9.5 SGML comment about commit · ab0757c1
      Bruce Momjian 提交于
      Reported-by: Tatsuo Ishii
      
      Backpatch-through: 9.5
      ab0757c1
  3. 16 2月, 2016 11 次提交
    • M
      86889873
    • M
    • T
      Improve wording in the planner doc · bdc309c7
      Tatsuo Ishii 提交于
      Change "In this case" to "In the example above" to clarify what it
      actually refers to.
      bdc309c7
    • F
      Correct the formulas for System V IPC parameters SEMMNI and SEMMNS in docs. · 597f7e3a
      Fujii Masao 提交于
      In runtime.sgml, the old formulas for calculating the reasonable
      values of SEMMNI and SEMMNS were incorrect. They have forgotten to
      count the number of semaphores which both the checkpointer process
      (introduced in 9.2) and the background worker processes (introduced
      in 9.3) need.
      
      This commit fixes those formulas so that they count the number of
      semaphores which the checkpointer process and the background worker
      processes need.
      
      Report and patch by Kyotaro Horiguchi. Only the patch for 9.3 was
      modified by me. Back-patch to 9.2 where the checkpointer process was
      added and the number of needed semaphores was increased.
      
      Author: Kyotaro Horiguchi
      Reviewed-by: Fujii Masao
      Backpatch: 9.2
      Discussion: http://www.postgresql.org/message-id/20160203.125119.66820697.horiguchi.kyotaro@lab.ntt.co.jp
      597f7e3a
    • J
      Move DATA entry to correct position · 851636bf
      Joe Conway 提交于
      In commit 7b4bfc87 the DATA and DESCR entries for the new
      row_security_active() function were inadvertantly put after
      the PROVOLATILE defines, rather than before as they should
      have been placed. Move them up where they belong.
      
      Backpatch to 9.5 where the new entries were introduced.
      851636bf
    • A
      Allow the WAL writer to flush WAL at a reduced rate. · 7975c5e0
      Andres Freund 提交于
      Commit 4de82f7d increased the WAL flush rate, mainly to increase the
      likelihood that hint bits can be set quickly. More quickly set hint bits
      can reduce contention around the clog et al.  But unfortunately the
      increased flush rate can have a significant negative performance impact,
      I have measured up to a factor of ~4.  The reason for this slowdown is
      that if there are independent writes to the underlying devices, for
      example because shared buffers is a lot smaller than the hot data set,
      or because a checkpoint is ongoing, the fdatasync() calls force cache
      flushes to be emitted to the storage.
      
      This is achieved by flushing WAL only if the last flush was longer than
      wal_writer_delay ago, or if more than wal_writer_flush_after (new GUC)
      unflushed blocks are pending. Based on some tests the default for
      wal_writer_delay is 1MB, which seems to work well both on SSD and
      rotational media.
      
      To avoid negative performance impact due to 4de82f7d an earlier
      commit (db76b1ef) made SetHintBits() more likely to succeed; preventing
      performance regressions in the pgbench tests I performed.
      
      Discussion: 20160118163908.GW10941@awork2.anarazel.de
      7975c5e0
    • A
      pgbench: avoid FD_ISSET on an invalid file descriptor · 5df44d14
      Alvaro Herrera 提交于
      The original code wasn't careful to test the file descriptor returned by
      PQsocket() for an invalid socket.  If an invalid socket did turn up,
      that would amount to calling FD_ISSET with fd = -1, whereby undefined
      behavior can be invoked.
      
      To fix, test file descriptor for validity and stop further processing if
      that fails.
      
      Problem noticed by Coverity.
      
      There is an existing FD_ISSET callsite that does check for invalid
      sockets beforehand, but the error message reported by it was
      strerror(errno); in testing the aforementioned change, that turns out to
      result in "bad socket: Success" which isn't terribly helpful.  Instead
      use PQerrorMessage() in both places which is more likely to contain an
      useful error message.
      
      Backpatch-through: 9.1.
      5df44d14
    • T
      Suppress compiler warnings about useless comparison of unsigned to zero. · 8c95ae81
      Tom Lane 提交于
      Reportedly, some compilers warn about tests like "c < 0" if c is unsigned,
      and hence complain about the character range checks I added in commit
      3bb3f42f.  This is a bit of a pain since
      the regex library doesn't really want to assume that chr is unsigned.
      However, since any such reconfiguration would involve manual edits of
      regcustom.h anyway, we can put it on the shoulders of whoever wants to
      do that to adjust this new range-checking macro correctly.
      
      Per gripes from Coverity and Andres.
      8c95ae81
    • A
      Allow SetHintBits() to succeed if the buffer's LSN is new enough. · db76b1ef
      Andres Freund 提交于
      Previously we only allowed SetHintBits() to succeed if the commit LSN of
      the last transaction touching the page has already been flushed to
      disk. We can't generally change the LSN of the page, because we don't
      necessarily have the required locks on the page. But the required LSN
      interlock does not mean the commit record has to be flushed immediately,
      it just requires that the commit record will be flushed before the page is
      written out. Therefore if the buffer LSN is newer than the commit LSN,
      the hint bit can be safely set.
      
      In a number of scenarios (e.g. pgbench) this noticeably increases the
      number of hint bits are set. But more importantly it also keeps the
      success rate up when flushing WAL less frequently. That was the original
      reason for commit 4de82f7d, which has negative performance consequences
      in a number of scenarios. This will allow a followup commit to reduce
      the flush rate.
      
      Discussion: 20160118163908.GW10941@awork2.anarazel.de
      db76b1ef
    • J
      Correct Copyright year from 2015 to 2016 · cfafd8be
      Joe Conway 提交于
      Looks like this patch went in after Copyright messages
      were updated for 2016 and it missed the boat. Fixed.
      cfafd8be
    • F
      Make concurrent refresh check early that there is a unique index on matview. · 31b6606c
      Fujii Masao 提交于
      In REFRESH MATERIALIZED VIEW command, CONCURRENTLY option is only
      allowed if there is at least one unique index with no WHERE clause on
      one or more columns of the matview. Previously, concurrent refresh
      checked the existence of a unique index on the matview after filling
      the data to new snapshot, i.e., after calling refresh_matview_datafill().
      So, when there was no unique index, we could need to wait a long time
      before we detected that and got the error. It was a waste of time.
      
      To eliminate such wasting time, this commit changes concurrent refresh
      so that it checks the existence of a unique index at the beginning of
      the refresh operation, i.e., before starting any time-consuming jobs.
      If CONCURRENTLY option is not allowed due to lack of a unique index,
      concurrent refresh can immediately detect it and emit an error.
      
      Author: Masahiko Sawada
      Reviewed-by: Michael Paquier, Fujii Masao
      31b6606c
  4. 15 2月, 2016 2 次提交
  5. 14 2月, 2016 1 次提交
  6. 13 2月, 2016 12 次提交
    • B
      pg_upgrade: Add C comment about NextXID delimiter · 13a6fa36
      Bruce Momjian 提交于
      We don't test the catversion for the NextXID delimiter change, we just
      test the string contents;  explain why.
      
      Reported-by: Michael Paquier
      13a6fa36
    • J
      Change delimiter used for display of NextXID · 59a884e9
      Joe Conway 提交于
      NextXID has been rendered in the form of a pg_lsn even though it
      really is not. This can cause confusion, so change the format from
      %u/%u to %u:%u, per discussion on hackers.
      
      Complaint by me, patch by me and Bruce, reviewed by Michael Paquier
      and Alvaro. Applied to HEAD only.
      
      Author: Joe Conway, Bruce Momjian
      Reviewed-by: Michael Paquier, Alvaro Herrera
      Backpatch-through: master
      59a884e9
    • T
      Increase deadlock_timeout some more in the deadlock-hard isolation test. · e84e06d2
      Tom Lane 提交于
      The previous value of 5s is inadequate for the buildfarm's
      CLOBBER_CACHE_ALWAYS animals: they take long enough to do the is-it-waiting
      queries that the timeout expires, allowing the database state to change,
      before isolationtester is done looking.  Perhaps 10s will be enough.
      (If it isn't, I'm inclined to reduce the number of sessions involved.)
      e84e06d2
    • T
      Revert "isolationtester: don't repeat the is-it-waiting query when retrying a step." · dca36932
      Tom Lane 提交于
      This mostly reverts commit 9c9782f0.
      I left in the parts that rearranged removal of completed waiting steps;
      but the idea of not rechecking a step's blocked-ness isn't working.
      dca36932
    • T
      Revert "Still further tweaking of deadlock isolation tests." · 3992188c
      Tom Lane 提交于
      This reverts commit d03130d3.
      That was dependent on an isolationtester.c change that now proves
      to be broken; we will need to find another solution.
      3992188c
    • A
      pgbench: cleanup use of a "logfile" parameter · 34f13cc4
      Alvaro Herrera 提交于
      There is no reason to have the per-thread logfile file pointer as a
      separate parameter in various functions: it's much simpler to put it in
      the per-thread state struct instead, which is already being passed to
      all functions that need the log file anyway.  Change the callsites in
      which it was used as a boolean to test whether logging is active, so
      that they use the use_log global variable instead.
      
      No backpatch, even though this exists since commit a887c486 of March
      2010, because this is just for cleanliness' sake and the surrounding
      code has been modified a lot recently anyway.
      34f13cc4
    • A
      pgbench: fix segfault with empty sql file · db94419f
      Alvaro Herrera 提交于
      Commit 1d0c3b3f introduced a bug that causes pgbench to crash if an
      empty script file is specified.  Fix it by rejecting such files at
      startup, which is the historical and intended behavior.
      
      Reported-By: Jeff Janes
      Discussion: https://www.postgresql.org/message-id/CAMkU=1zxKUbLPOt9hQWFp14pTc=V0cGo2GQBbn2GsK2Pu+8ZfA@mail.gmail.com
      db94419f
    • T
      Still further tweaking of deadlock isolation tests. · d03130d3
      Tom Lane 提交于
      It turns out that there is a second race condition in the new deadlock-hard
      test: once the deadlock detector fires, it's uncertain whether step s7a8 or
      step s8a1 will report first, because killing s8's transaction unblocks s7.
      So far, s7 has only been seen to report first in CLOBBER_CACHE_ALWAYS
      builds, but it's pretty reproducible there, and in theory it should
      sometimes occur in normal builds too.  If s7 were a bit slower than usual,
      that could also break the test, since the existing expected-file assumes
      that we'll see s7a8 report the first time we check it after s8a1 completes.
      To fix, add a post-lock delay to s7a8.
      d03130d3
    • T
      isolationtester: don't repeat the is-it-waiting query when retrying a step. · 9c9782f0
      Tom Lane 提交于
      If we're retrying a step, then we already decided it was blocked on a lock,
      and there's no need to recheck that.  The original coding of commit
      38f8bdca resulted in a large number of
      is-it-waiting queries when dealing with multiple concurrently-blocked
      sessions, which is fairly pointless and also results in test failures in
      CLOBBER_CACHE_ALWAYS builds, where the is-it-waiting query is quite slow.
      
      This definition also permits appending pg_sleep() calls to steps where it's
      needed to control the order of finish of concurrent steps.  Before, that
      did not work nicely because we'd decide that a step performing a sleep was
      not blocked and hang up waiting for it to finish, rather than noticing the
      completion of the concurrent step we're supposed to notice first.
      
      In passing, revise handling of removal of completed waiting steps
      to make it a bit less messy.
      9c9782f0
    • T
      Re-pgindent isolationtester.c. · a3614908
      Tom Lane 提交于
      Need to do some more hacking on this, and got annoyed that it's not
      indent clean.
      a3614908
    • P
      Fix whitespace · 29b4b7bd
      Peter Eisentraut 提交于
      29b4b7bd
    • T
      Add missing "static" qualifier. · 99a9d6d5
      Tom Lane 提交于
      Per buildfarm member pademelon.
      99a9d6d5
  7. 12 2月, 2016 9 次提交
    • R
      Introduce extensible node types. · bcac23de
      Robert Haas 提交于
      An extensible node is always tagged T_Extensible, but the extnodename
      field identifies it more specifically; it may also include arbitrary
      private data.  Extensible nodes can be copied, tested for equality,
      serialized, and deserialized, but the core system doesn't know
      anything about them otherwise.  Some extensions may find it useful to
      include these nodes in fdw_private or custom_private lists in lieu of
      arm-wrestling their data into a format that the core code can
      understand.
      
      Along the way, so as not to burden the authors of such extensible
      node types too much, expose the functions for writing serialized
      tokens, and for serializing and deserializing bitmapsets.
      
      KaiGai Kohei, per a design suggested by me.  Reviewed by Andres Freund
      and by me, and further edited by me.
      bcac23de
    • R
      Make builtin lwlock tranche names consistent. · 63461a63
      Robert Haas 提交于
      Previously, we had a mix of styles.
      
      Amit Kapila
      63461a63
    • T
      Further tweaking of deadlock isolation tests. · caefc11e
      Tom Lane 提交于
      The new deadlock-soft-2 test has a timing dependency too: it supposes
      that isolationtester will detect step s1b as waiting before the deadlock
      detector runs and grants it the lock.  Adjust deadlock_timeout to ensure
      that that's true even in CLOBBER_CACHE_ALWAYS builds, where the wait
      detection query is quite slow.  Per buildfarm member jaguarundi.
      caefc11e
    • T
      Refactor check_functional_grouping() to use get_primary_key_attnos(). · f144f732
      Tom Lane 提交于
      If we ever get around to allowing functional dependency to be proven
      from other things besides simple primary keys, this code will need to
      be rethought, but that was true anyway.  In the meantime, we might as
      well not have two very-similar routines for scanning pg_constraint.
      
      David Rowley, reviewed by Julien Rouhaud
      f144f732
    • T
      Remove GROUP BY columns that are functionally dependent on other columns. · d4c3a156
      Tom Lane 提交于
      If a GROUP BY clause includes all columns of a non-deferred primary key,
      as well as other columns of the same relation, those other columns are
      redundant and can be dropped from the grouping; the pkey is enough to
      ensure that each row of the table corresponds to a separate group.
      Getting rid of the excess columns will reduce the cost of the sorting or
      hashing needed to implement GROUP BY, and can indeed remove the need for
      a sort step altogether.
      
      This seems worth testing for since many query authors are not aware of
      the GROUP-BY-primary-key exception to the rule about queries not being
      allowed to reference non-grouped-by columns in their targetlists or
      HAVING clauses.  Thus, redundant GROUP BY items are not uncommon.  Also,
      we can make the test pretty cheap in most queries where it won't help
      by not looking up a rel's primary key until we've found that at least
      two of its columns are in GROUP BY.
      
      David Rowley, reviewed by Julien Rouhaud
      d4c3a156
    • T
      Move pg_constraint.h function declarations to new file pg_constraint_fn.h. · 72eee410
      Tom Lane 提交于
      A pending patch requires exporting a function returning Bitmapset from
      catalog/pg_constraint.c.  As things stand, that would mean including
      nodes/bitmapset.h in pg_constraint.h, which might be hazardous for the
      client-side includability of that header.  It's not entirely clear whether
      any client-side code needs to include pg_constraint.h, but it seems prudent
      to assume that there is some such code somewhere.  Therefore, split off the
      function definitions into a new file pg_constraint_fn.h, similarly to what
      we've done for some other catalog header files.
      72eee410
    • T
      Fix typo in comment. · 2564be36
      Tom Lane 提交于
      2564be36
    • T
      Shift the responsibility for emitting "database system is shut down". · d18643c4
      Tom Lane 提交于
      Historically this message has been emitted at the end of ShutdownXLOG().
      That's not an insane place for it in a standalone backend, but in the
      postmaster environment we've grown a fair amount of stuff that happens
      later, including archiver/walsender shutdown, stats collector shutdown,
      etc.  Recent buildfarm experimentation showed that on slower machines
      there could be many seconds' delay between finishing ShutdownXLOG() and
      actual postmaster exit.  That's fairly confusing, both for testing
      purposes and for DBAs.  Hence, move the code that prints this message
      into UnlinkLockFiles(), so that it comes out just after we remove the
      postmaster's pidfile.  That is a more appropriate definition of "is shut
      down" from the point of view of "pg_ctl stop", for example.  In general,
      removing the pidfile should be the last externally-visible action of
      either a postmaster or a standalone backend; compare commit
      d73d14c2 for instance.  So this seems
      like a reasonably future-proof approach.
      d18643c4
    • R
      Use separate lwlock tranches for buffer, lock, and predicate lock managers. · c319991b
      Robert Haas 提交于
      This finishes the work - spread across many commits over the last
      several months - of putting each type of lock other than the named
      individual locks into a separate tranche.
      
      Amit Kapila
      c319991b