1. 22 Jul, 2013 1 commit
    • Robert Haas's avatar
      Add infrastructure for mapping relfilenodes to relation OIDs. · f01d1ae3
      Robert Haas authored
      Future patches are expected to introduce logical replication that
      works by decoding WAL.  WAL contains relfilenodes rather than relation
      OIDs, so this infrastructure will be needed to find the relation OID
      based on WAL contents.
      
      If logical replication does not make it into this release, we probably
      should consider reverting this, since it will add some overhead to DDL
      operations that create new relations.  One additional index insert per
      pg_class row is not a large overhead, but it's more than zero.
      Another way of meeting the needs of logical replication would be to
      the relation OID to WAL, but that would burden DML operations, not
      only DDL.
      
      Andres Freund, with some changes by me.  Design review, in earlier
      versions, by Álvaro Herrera.
      f01d1ae3
  2. 20 Jul, 2013 2 commits
    • Tom Lane's avatar
      Fix error handling in PLy_spi_execute_fetch_result(). · b3b10c39
      Tom Lane authored
      If an error is thrown out of the datatype I/O functions called by this
      function, we need to do subtransaction cleanup, which the previous coding
      entirely failed to do.  Fortunately, both existing callers of this function
      already have proper cleanup logic, so re-throwing the exception is enough.
      
      Also, postpone creation of the resultset tupdesc until after the I/O
      conversions are complete, so that we won't leak memory in TopMemoryContext
      when such an error happens.
      b3b10c39
    • Peter Eisentraut's avatar
      Clean up new JSON API typedefs · ff41a5de
      Peter Eisentraut authored
      The new JSON API uses a bit of an unusual typedef scheme, where for
      example OkeysState is a pointer to okeysState.  And that's not applied
      consistently either.  Change that to the more usual PostgreSQL style
      where struct typedefs are upper case, and use pointers explicitly.
      ff41a5de
  3. 19 Jul, 2013 5 commits
    • Alvaro Herrera's avatar
      Fix HeapTupleSatisfiesVacuum on aborted updater xacts · 6737aa72
      Alvaro Herrera authored
      By using only the macro that checks infomask bits
      HEAP_XMAX_IS_LOCKED_ONLY to verify whether a multixact is not an
      updater, and not the full HeapTupleHeaderIsOnlyLocked, it would come to
      the wrong result in case of a multixact containing an aborted update;
      therefore returning the wrong result code.  This would cause predicate.c
      to break completely (as in bug report #8273 from David Leverton), and
      certain index builds would misbehave.  As far as I can tell, other
      callers of the bogus routine would make harmless mistakes or not be
      affected by the difference at all; so this was a pretty narrow case.
      
      Also, no other user of the HEAP_XMAX_IS_LOCKED_ONLY macro is as
      careless; they all check specifically for the HEAP_XMAX_IS_MULTI case,
      and they all verify whether the updater is InvalidXid before concluding
      that it's a valid updater.  So there doesn't seem to be any similar bug.
      6737aa72
    • Robert Haas's avatar
      doc: Fix typos in conversion names. · c8fb821a
      Robert Haas authored
      David Christensen
      c8fb821a
    • Michael Meskes's avatar
      Initialize day of year value. · a2c1c330
      Michael Meskes authored
      There are cases where the day of year value in struct tm is used, but it never
      got calculated. Problem found by Coverity scan.
      a2c1c330
    • Tom Lane's avatar
      Add checks for valid multibyte character length in UtfToLocal, LocalToUtf. · d9f37e66
      Tom Lane authored
      This is mainly to suppress "uninitialized variable" warnings from very
      recent versions of gcc.  But it seems like a good robustness thing anyway,
      not to mention that we might someday decide to support 6-byte UTF8.
      
      Per report from Karol Trzcionka.  No back-patch since there's no reason
      at the moment to think this is more than cosmetic.
      d9f37e66
    • Tom Lane's avatar
      Fix regex match failures for backrefs combined with non-greedy quantifiers. · e2bd9049
      Tom Lane authored
      An ancient logic error in cfindloop() could cause the regex engine to fail
      to find matches that begin later than the start of the string.  This
      function is only used when the regex pattern contains a back reference,
      and so far as we can tell the error is only reachable if the pattern is
      non-greedy (i.e. its first quantifier uses the ? modifier).  Furthermore,
      the actual match must begin after some potential match that satisfies the
      DFA but then fails the back-reference's match test.
      
      Reported and fixed by Jeevan Chalke, with cosmetic adjustments by me.
      e2bd9049
  4. 18 Jul, 2013 5 commits
    • Stephen Frost's avatar
      WITH CHECK OPTION support for auto-updatable VIEWs · 4cbe3ac3
      Stephen Frost authored
      For simple views which are automatically updatable, this patch allows
      the user to specify what level of checking should be done on records
      being inserted or updated.  For 'LOCAL CHECK', new tuples are validated
      against the conditionals of the view they are being inserted into, while
      for 'CASCADED CHECK' the new tuples are validated against the
      conditionals for all views involved (from the top down).
      
      This option is part of the SQL specification.
      
      Dean Rasheed, reviewed by Pavel Stehule
      4cbe3ac3
    • Fujii Masao's avatar
      6f9e39bc
    • Fujii Masao's avatar
      Fix pgstattuple functions to use regclass-type as the argument. · 1dc11866
      Fujii Masao authored
      This allows us to specify the target relation with several expressions,
      'relname', 'schemaname.relname' and OID in all pgstattuple functions.
      pgstatindex() and pg_relpages() could not accept OID as the argument
      so far.
      
      Per discussion on -hackers, we decided to keep two types of interfaces,
      with regclass-type and TEXT-type argument, for each pgstattuple
      function because of the backward-compatibility issue. The functions
      which have TEXT-type argument will be deprecated in the future release.
      
      Patch by Satoshi Nagayasu, reviewed by Rushabh Lathia and Fujii Masao.
      1dc11866
    • Andrew Dunstan's avatar
      Move checking an explicit VARIADIC "any" argument into the parser. · d26888bc
      Andrew Dunstan authored
      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
    • Tom Lane's avatar
      Fix direct access to Relation->rd_indpred. · 405a468b
      Tom Lane authored
      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
  5. 17 Jul, 2013 10 commits
    • Peter Eisentraut's avatar
      doc: Remove tab from SGML file · e8b1d1be
      Peter Eisentraut authored
      e8b1d1be
    • Tom Lane's avatar
      Fix a few problems in barrier.h. · 89779bf2
      Tom Lane authored
      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
    • Heikki Linnakangas's avatar
      Fix variable names mentioned in comment to match the code. · 107cbc90
      Heikki Linnakangas authored
      Also, in another comment, explain why holding an insertion slot is a
      critical section.
      
      Per review by Amit Kapila.
      107cbc90
    • Heikki Linnakangas's avatar
      Fix assert failure at end of recovery, broken by XLogInsert scaling patch. · 59c02a36
      Heikki Linnakangas authored
      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
    • Heikki Linnakangas's avatar
      Fix end-of-loop optimization in pglz_find_match() function. · 3f2adace
      Heikki Linnakangas authored
      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
    • Fujii Masao's avatar
      750f4368
    • Stephen Frost's avatar
      Use correct parameter name for view_option_value · f2719f69
      Stephen Frost authored
      The documentation for ALTER VIEW had a minor copy-and-paste error in
      defining the parameters.  Noticed when reviewing the WITH CHECK OPTION
      patch.
      
      Backpatch to 9.2 where this was first introduced.
      f2719f69
    • Noah Misch's avatar
      Fix systable_recheck_tuple() for MVCC scan snapshots. · ffcf6545
      Noah Misch authored
      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
    • Noah Misch's avatar
      Implement the FILTER clause for aggregate function calls. · b560ec1b
      Noah Misch authored
      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
    • Noah Misch's avatar
      7a8e9f29
  6. 16 Jul, 2013 4 commits
    • Tatsuo Ishii's avatar
      Add --progress option to show progress report · 4a87f308
      Tatsuo Ishii authored
      Patch contributed by Fabien COELHO, reviewed by KONDO Mitsumasa.
      4a87f308
    • Kevin Grittner's avatar
      Add support for REFRESH MATERIALIZED VIEW CONCURRENTLY. · cc1965a9
      Kevin Grittner authored
      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
    • Robert Haas's avatar
      Allow background workers to be started dynamically. · 7f7485a0
      Robert Haas authored
      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
    • Peter Eisentraut's avatar
      Fix PQconninfoParse error message handling · 233bfe06
      Peter Eisentraut authored
      The returned error message already includes a newline, but the callers
      were adding their own when printing it out.
      233bfe06
  7. 15 Jul, 2013 7 commits
    • Stephen Frost's avatar
      Check get_tle_by_resno() result before deref · 4ed22e89
      Stephen Frost authored
      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
    • Robert Haas's avatar
      Tab completion for \lo_import · 4403a9d7
      Robert Haas authored
      Josh Kupershmidt
      4403a9d7
    • Robert Haas's avatar
      Assert that syscache lookups don't happen outside transactions. · 42c80c69
      Robert Haas authored
      Andres Freund
      42c80c69
    • Robert Haas's avatar
      Regression tests for LOCK TABLE. · ac33c7e2
      Robert Haas authored
      Robins Tharakan, reviewed by Szymon Guz, substantially revised by me.
      ac33c7e2
    • Robert Haas's avatar
      vacuumlo: Use a cursor to limit client-side memory usage. · 67ccbb08
      Robert Haas authored
      This prevents the client from gobbling up too much memory when the
      number of large objects to be removed is very large.
      
      Andrew Dunstan, reviewed by Josh Kupershmidt
      67ccbb08
    • Stephen Frost's avatar
      Correct off-by-one when reading from pipe · 03010366
      Stephen Frost authored
      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
    • Stephen Frost's avatar
      Check version before allocating PQExpBuffer · 3355443f
      Stephen Frost authored
      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
  8. 14 Jul, 2013 6 commits
    • Noah Misch's avatar
      Document the OVER keyword as being unreserved. · 01337d46
      Noah Misch authored
      It became so in commit 5893ffa7.
      
      David Fetter, extracted from a larger patch.
      01337d46
    • Stephen Frost's avatar
      Fix resource leak in initdb -X option · 5461d36b
      Stephen Frost authored
      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
    • Stephen Frost's avatar
      Be sure to close() file descriptor on error case · cec62efd
      Stephen Frost authored
      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
    • Stephen Frost's avatar
      Ensure 64bit arithmetic when calculating tapeSpace · 273dcd16
      Stephen Frost authored
      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
    • Peter Eisentraut's avatar
      pg_isready: Message improvement · 1f75a5f9
      Peter Eisentraut authored
      1f75a5f9
    • Stephen Frost's avatar
      pg_receivexlog - Exit on failure to parse · d368a301
      Stephen Frost authored
      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