1. 18 7月, 2013 6 次提交
    • A
      Move checking an explicit VARIADIC "any" argument into the parser. · d26888bc
      Andrew Dunstan 提交于
      This is more efficient and simpler . It does mean that an untyped NULL
      can no longer be used in such cases, which should be mentioned in
      Release Notes, but doesn't seem a terrible loss. The workaround is to
      cast the NULL to some array type.
      
      Pavel Stehule, reviewed by Jeevan Chalke.
      d26888bc
    • T
      Fix direct access to Relation->rd_indpred. · 405a468b
      Tom Lane 提交于
      Should use RelationGetIndexPredicate(), since rd_indpred is just a cache
      that is not computed until/unless demanded.  Per buildfarm failure on
      CLOBBER_CACHE_ALWAYS animals; diagnosis and fix by Hitoshi Harada.
      405a468b
    • T
      Fix a few problems in barrier.h. · 89779bf2
      Tom Lane 提交于
      On HPPA, implement pg_memory_barrier() as pg_compiler_barrier(), which
      should be correct since this arch doesn't do memory access reordering,
      and is anyway better than the completely-nonfunctional-on-this-arch
      dummy_spinlock code.  (But note this patch only fixes things for gcc,
      not for builds with HP's compiler.)
      
      Also, fix incorrect default definition of pg_memory_barrier as a macro
      requiring an argument.
      
      Also, fix incorrect spelling of "#elif" as "#else if" in icc code path
      (spotted by pgindent).
      
      This doesn't come close to fixing all of the functional and stylistic
      deficiencies in barrier.h, but at least it un-breaks my personal build.
      Now that we're actually using barriers in the code, this file is going
      to need some serious attention.
      89779bf2
    • H
      Fix variable names mentioned in comment to match the code. · 107cbc90
      Heikki Linnakangas 提交于
      Also, in another comment, explain why holding an insertion slot is a
      critical section.
      
      Per review by Amit Kapila.
      107cbc90
    • H
      Fix assert failure at end of recovery, broken by XLogInsert scaling patch. · 59c02a36
      Heikki Linnakangas 提交于
      Initialization of the first XLOG buffer at end-of-recovery was broken for
      the case that the last read WAL record ended at a page boundary. Instead of
      trying to copy the last full xlog page to the buffer cache in that case,
      just set shared state so that the next page is initialized when the first
      WAL record after startup is inserted. (that's what we did in earlier
      version, too)
      
      To make the shared state required for that case less surprising, replace the
      XLogCtl->curridx variable, which was the index of the latest initialized
      buffer, with an XLogRecPtr of how far the buffers have been initialized.
      That also allows us to get rid of the XLogRecEndPtrToBufIdx macro.
      
      While we're at it, make a similar change for XLogCtl->Write.curridx, getting
      rid of that variable and calculating the next buffer to write from
      XLogCtl->LogwrtResult instead.
      59c02a36
    • H
      Fix end-of-loop optimization in pglz_find_match() function. · 3f2adace
      Heikki Linnakangas 提交于
      After the recent pglz optimization patch, the next/prev pointers in the
      hash table are never NULL, INVALID_ENTRY_PTR is used to represent invalid
      entries instead. The end-of-loop check in pglz_find_match() function didn't
      get the memo. The result was the same from a correctness point of view, but
      because the NULL-check would never fail, the tiny optimization turned into
      a pessimization.
      
      Reported by Stephen Frost, using Coverity scanner.
      3f2adace
  2. 17 7月, 2013 5 次提交
    • N
      Fix systable_recheck_tuple() for MVCC scan snapshots. · ffcf6545
      Noah Misch 提交于
      Since this function assumed non-MVCC snapshots, it broke when commit
      568d4138 switched its one caller from
      SnapshotNow scans to MVCC-snapshot scans.
      
      Reviewed by Robert Haas, Tom Lane and Andres Freund.
      ffcf6545
    • N
      Implement the FILTER clause for aggregate function calls. · b560ec1b
      Noah Misch 提交于
      This is SQL-standard with a few extensions, namely support for
      subqueries and outer references in clause expressions.
      
      catversion bump due to change in Aggref and WindowFunc.
      
      David Fetter, reviewed by Dean Rasheed.
      b560ec1b
    • N
      Comment on why planagg.c punts "MIN(x ORDER BY y)". · 7a8e9f29
      Noah Misch 提交于
      7a8e9f29
    • K
      Add support for REFRESH MATERIALIZED VIEW CONCURRENTLY. · cc1965a9
      Kevin Grittner 提交于
      This allows reads to continue without any blocking while a REFRESH
      runs.  The new data appears atomically as part of transaction
      commit.
      
      Review questioned the Assert that a matview was not a system
      relation.  This will be addressed separately.
      
      Reviewed by Hitoshi Harada, Robert Haas, Andres Freund.
      Merged after review with security patch f3ab5d46.
      cc1965a9
    • R
      Allow background workers to be started dynamically. · 7f7485a0
      Robert Haas 提交于
      There is a new API, RegisterDynamicBackgroundWorker, which allows
      an ordinary user backend to register a new background writer during
      normal running.  This means that it's no longer necessary for all
      background workers to be registered during processing of
      shared_preload_libraries, although the option of registering workers
      at that time remains available.
      
      When a background worker exits and will not be restarted, the
      slot previously used by that background worker is automatically
      released and becomes available for reuse.  Slots used by background
      workers that are configured for automatic restart can't (yet) be
      released without shutting down the system.
      
      This commit adds a new source file, bgworker.c, and moves some
      of the existing control logic for background workers there.
      Previously, there was little enough logic that it made sense to
      keep everything in postmaster.c, but not any more.
      
      This commit also makes the worker_spi contrib module into an
      extension and adds a new function, worker_spi_launch, which can
      be used to demonstrate the new facility.
      7f7485a0
  3. 16 7月, 2013 5 次提交
    • P
      Fix PQconninfoParse error message handling · 233bfe06
      Peter Eisentraut 提交于
      The returned error message already includes a newline, but the callers
      were adding their own when printing it out.
      233bfe06
    • S
      Check get_tle_by_resno() result before deref · 4ed22e89
      Stephen Frost 提交于
      When creating a sort to support a group by, we need to look up the
      target entry in the target list by the resno using get_tle_by_resno().
      This particular code-path didn't check the result prior to attempting
      to dereference it, while all other callers did.  While I can't see a
      way for this usage of get_tle_by_resno() to fail (you can't ask for
      a column to be sorted on which isn't included in the group by), it's
      probably best to check that we didn't end up with a NULL somehow
      anyway than risk the segfault.
      
      I'm willing to back-patch this if others feel it's necessary, but my
      guess is new features are what might tickle this rather than anything
      existing.
      
      Missing check spotted by the Coverity scanner.
      4ed22e89
    • R
      Tab completion for \lo_import · 4403a9d7
      Robert Haas 提交于
      Josh Kupershmidt
      4403a9d7
    • R
      Assert that syscache lookups don't happen outside transactions. · 42c80c69
      Robert Haas 提交于
      Andres Freund
      42c80c69
    • R
      Regression tests for LOCK TABLE. · ac33c7e2
      Robert Haas 提交于
      Robins Tharakan, reviewed by Szymon Guz, substantially revised by me.
      ac33c7e2
  4. 15 7月, 2013 8 次提交
    • S
      Correct off-by-one when reading from pipe · 03010366
      Stephen Frost 提交于
      In pg_basebackup.c:reached_end_position(), we're reading from an
      internal pipe with our own background process but we're possibly
      reading more bytes than will actually fit into our buffer due to
      an off-by-one error.  As we're reading from an internal pipe
      there's no real risk here, but it's good form to not depend on
      such convenient arrangements.
      
      Bug spotted by the Coverity scanner.
      
      Back-patch to 9.2 where this showed up.
      03010366
    • S
      Check version before allocating PQExpBuffer · 3355443f
      Stephen Frost 提交于
      In pg_dump.c:getEventTriggers, check what major version we are on
      before calling createPQExpBuffer() to avoid leaking that bit of
      memory.
      
      Leak discovered by the Coverity scanner.
      
      Back-patch to 9.3 where support for dumping event triggers was
      added.
      3355443f
    • S
      Fix resource leak in initdb -X option · 5461d36b
      Stephen Frost 提交于
      When creating the symlink for the xlog directory, free the string
      which stores the link location.  Not really an issue but it doesn't
      hurt to be good about this- prior cleanups have fixed similar
      issues.
      
      Leak found by the Coverity scanner.
      
      Not back-patching as I don't see it being worth the code churn.
      5461d36b
    • S
      Be sure to close() file descriptor on error case · cec62efd
      Stephen Frost 提交于
      In receivelog.c:writeTimeLineHistoryFile(), we were not properly
      closing the open'd file descriptor in error cases.  While this
      wouldn't matter much if we were about to exit due to such an
      error, that's not the case with pg_receivexlog as it can be a
      long-running process and these errors are non-fatal.
      
      This resource leak was found by the Coverity scanner.
      
      Back-patch to 9.3 where this issue first appeared.
      cec62efd
    • S
      Ensure 64bit arithmetic when calculating tapeSpace · 273dcd16
      Stephen Frost 提交于
      In tuplesort.c:inittapes(), we calculate tapeSpace by first figuring
      out how many 'tapes' we can use (maxTapes) and then multiplying the
      result by the tape buffer overhead for each.  Unfortunately, when
      we are on a system with an 8-byte long, we allow work_mem to be
      larger than 2GB and that allows maxTapes to be large enough that the
      32bit arithmetic can overflow when multiplied against the buffer
      overhead.
      
      When this overflow happens, we end up adding the overflow to the
      amount of space available, causing the amount of memory allocated to
      be larger than work_mem.
      
      Note that to reach this point, you have to set work mem to at least
      24GB and be sorting a set which is at least that size.  Given that a
      user who can set work_mem to 24GB could also set it even higher, if
      they were looking to run the system out of memory, this isn't
      considered a security issue.
      
      This overflow risk was found by the Coverity scanner.
      
      Back-patch to all supported branches, as this issue has existed
      since before 8.4.
      273dcd16
    • P
      pg_isready: Message improvement · 1f75a5f9
      Peter Eisentraut 提交于
      1f75a5f9
    • S
      pg_receivexlog - Exit on failure to parse · d368a301
      Stephen Frost 提交于
      In streamutil.c:GetConnection(), upgrade failure to parse the
      connection string to an exit(1) instead of simply returning NULL.
      Most callers already immediately exited, but pg_receivexlog would
      loop on this case, continually trying to re-parse the connection
      string (which can't be changed after pg_receivexlog has started).
      
      GetConnection() was already expected to exit(1) in some cases
      (eg: failure to allocate memory or if unable to determine the
      integer_datetimes flag), so this change shouldn't surprise anyone.
      
      Began looking at this due to the Coverity scanner complaining that
      we were leaking err_msg in this case- no longer an issue since we
      just exit(1) immediately.
      d368a301
    • S
      During parallel pg_dump, free commands from master · 234e4cf6
      Stephen Frost 提交于
      The command strings read by the child processes during parallel
      pg_dump, after being read and handled, were not being free'd.
      This patch corrects this relatively minor memory leak.
      
      Leak found by the Coverity scanner.
      
      Back patch to 9.3 where parallel pg_dump was introduced.
      234e4cf6
  5. 13 7月, 2013 3 次提交
    • P
      Add session_preload_libraries configuration parameter · 070518dd
      Peter Eisentraut 提交于
      This is like shared_preload_libraries except that it takes effect at
      backend start and can be changed without a full postmaster restart.  It
      is like local_preload_libraries except that it is still only settable by
      a superuser.  This can be a better way to load modules such as
      auto_explain.
      
      Since there are now three preload parameters, regroup the documentation
      a bit.  Put all parameters into one section, explain common
      functionality only once, update the descriptions to reflect current and
      future realities.
      Reviewed-by: NDimitri Fontaine <dimitri@2ndQuadrant.fr>
      070518dd
    • N
      Switch user ID to the object owner when populating a materialized view. · f3ab5d46
      Noah Misch 提交于
      This makes superuser-issued REFRESH MATERIALIZED VIEW safe regardless of
      the object's provenance.  REINDEX is an earlier example of this pattern.
      As a downside, functions called from materialized views must tolerate
      running in a security-restricted operation.  CREATE MATERIALIZED VIEW
      need not change user ID.  Nonetheless, avoid creation of materialized
      views that will invariably fail REFRESH by making it, too, start a
      security-restricted operation.
      
      Back-patch to 9.3 so materialized views have this from the beginning.
      
      Reviewed by Kevin Grittner.
      f3ab5d46
    • N
  6. 12 7月, 2013 1 次提交
  7. 10 7月, 2013 1 次提交
  8. 09 7月, 2013 3 次提交
  9. 08 7月, 2013 5 次提交
    • H
      Fix Windows build. · f489470f
      Heikki Linnakangas 提交于
      Was broken by my xloginsert scaling patch. XLogCtl global variable needs
      to be initialized in each process, as it's not inherited by fork() on
      Windows.
      f489470f
    • H
      Improve scalability of WAL insertions. · 9a20a9b2
      Heikki Linnakangas 提交于
      This patch replaces WALInsertLock with a number of WAL insertion slots,
      allowing multiple backends to insert WAL records to the WAL buffers
      concurrently. This is particularly useful for parallel loading large amounts
      of data on a system with many CPUs.
      
      This has one user-visible change: switching to a new WAL segment with
      pg_switch_xlog() now fills the remaining unused portion of the segment with
      zeros. This potentially adds some overhead, but it has been a very common
      practice by DBA's to clear the "tail" of the segment with an external
      pg_clearxlogtail utility anyway, to make the WAL files compress better.
      With this patch, it's no longer necessary to do that.
      
      This patch adds a new GUC, xloginsert_slots, to tune the number of WAL
      insertion slots. Performance testing suggests that the default, 8, works
      pretty well for all kinds of worklods, but I left the GUC in place to allow
      others with different hardware to test that easily. We might want to remove
      that before release.
      
      Reviewed by Andres Freund.
      9a20a9b2
    • T
      Fix planning of parameterized appendrel paths with expensive join quals. · 5372275b
      Tom Lane 提交于
      The code in set_append_rel_pathlist() for building parameterized paths
      for append relations (inheritance and UNION ALL combinations) supposed
      that the cheapest regular path for a child relation would still be cheapest
      when reparameterized.  Which might not be the case, particularly if the
      added join conditions are expensive to compute, as in a recent example from
      Jeff Janes.  Fix it to compare child path costs *after* reparameterizing.
      We can short-circuit that if the cheapest pre-existing path is already
      parameterized correctly, which seems likely to be true often enough to be
      worth checking for.
      
      Back-patch to 9.2 where parameterized paths were introduced.
      5372275b
    • P
    • P
      pg_resetxlog: Make --help consistent with man page · e714d031
      Peter Eisentraut 提交于
      Use "MXID" as placeholder for -m option, instead of just "XID".
      e714d031
  10. 07 7月, 2013 3 次提交