1. 07 Mar, 2014 3 commits
    • Heikki Linnakangas's avatar
      Avoid memcpy() with same source and destination address. · ad7b48ea
      Heikki Linnakangas authored
      The behavior of that is undefined, although unlikely to lead to problems in
      practice.
      
      Found by running regression tests with Valgrind.
      ad7b48ea
    • Heikki Linnakangas's avatar
      Fix name of syslog_ident GUC in docs. · 2b8483d6
      Heikki Linnakangas authored
      Michael Paquier
      2b8483d6
    • Tom Lane's avatar
      Avoid getting more than AccessShareLock when deparsing a query. · 7c318749
      Tom Lane authored
      In make_ruledef and get_query_def, we have long used AcquireRewriteLocks
      to ensure that the querytree we are about to deparse is up-to-date and
      the schemas of the underlying relations aren't changing.  Howwever, that
      function thinks the query is about to be executed, so it acquires locks
      that are stronger than necessary for the purpose of deparsing.  Thus for
      example, if pg_dump asks to deparse a rule that includes "INSERT INTO t",
      we'd acquire RowExclusiveLock on t.  That results in interference with
      concurrent transactions that might for example ask for ShareLock on t.
      Since pg_dump is documented as being purely read-only, this is unexpected.
      (Worse, it used to actually be read-only; this behavior dates back only
      to 8.1, cf commit ba420024.)
      
      Fix this by adding a parameter to AcquireRewriteLocks to tell it whether
      we want the "real" execution locks or only AccessShareLock.
      
      Report, diagnosis, and patch by Dean Rasheed.  Back-patch to all supported
      branches.
      7c318749
  2. 06 Mar, 2014 5 commits
    • Heikki Linnakangas's avatar
      isdigit() needs an unsigned char argument. · a0c2fa9b
      Heikki Linnakangas authored
      Per the C standard, the routine should be passed an int, with a value that's
      representable as an unsigned char or EOF. Passing a signed char is wrong,
      because a negative value is not representable as an unsigned char.
      Unfortunately no compiler warns about that.
      a0c2fa9b
    • Heikki Linnakangas's avatar
      Send keepalives from walsender even when busy sending WAL. · 94ae6ba7
      Heikki Linnakangas authored
      If walsender doesn't hear from the client for the time specified by
      wal_sender_timeout, it will conclude the connection or client is dead, and
      disconnect. When half of wal_sender_timeout has elapsed, it sends a ping
      to the client, leaving it the remainig half of wal_sender_timeout to
      respond. However, it only checked if half of wal_sender_timeout had elapsed
      when it was about to sleep, so if it was busy sending WAL to the client for
      long enough, it would not send the ping request in time. Then the client
      would not know it needs to send a reply, and the walsender will disconnect
      even though the client is still alive. Fix that.
      
      Andres Freund, reviewed by Robert Haas, and some further changes by me.
      Backpatch to 9.3. Earlier versions relied on the client to send the
      keepalives on its own, and hence didn't have this problem.
      94ae6ba7
    • Tom Lane's avatar
      Don't reject ROW_MARK_REFERENCE rowmarks for materialized views. · bf4052fa
      Tom Lane authored
      We should allow this so that matviews can be referenced in UPDATE/DELETE
      statements in READ COMMITTED isolation level.  The requirement for that
      is that a re-fetch by TID will see the same row version the query saw
      earlier, which is true of matviews, so there's no reason for the
      restriction.  Per bug #9398.
      
      Michael Paquier, after a suggestion by me
      bf4052fa
    • Bruce Momjian's avatar
      C comment update: relfilenode is only unique with a tablespace · 0024a3a3
      Bruce Momjian authored
      Report from Antonin Houska
      0024a3a3
    • Bruce Momjian's avatar
      docs: to_timestamp and to_date do minimal range checking · e2224faf
      Bruce Momjian authored
      Initial patch from Steve Crawford
      e2224faf
  3. 05 Mar, 2014 13 commits
  4. 04 Mar, 2014 6 commits
  5. 03 Mar, 2014 10 commits
    • Robert Haas's avatar
      Introduce logical decoding. · b89e1510
      Robert Haas authored
      This feature, building on previous commits, allows the write-ahead log
      stream to be decoded into a series of logical changes; that is,
      inserts, updates, and deletes and the transactions which contain them.
      It is capable of handling decoding even across changes to the schema
      of the effected tables.  The output format is controlled by a
      so-called "output plugin"; an example is included.  To make use of
      this in a real replication system, the output plugin will need to be
      modified to produce output in the format appropriate to that system,
      and to perform filtering.
      
      Currently, information can be extracted from the logical decoding
      system only via SQL; future commits will add the ability to stream
      changes via walsender.
      
      Andres Freund, with review and other contributions from many other
      people, including Álvaro Herrera, Abhijit Menon-Sen, Peter Gheogegan,
      Kevin Grittner, Robert Haas, Heikki Linnakangas, Fujii Masao, Abhijit
      Menon-Sen, Michael Paquier, Simon Riggs, Craig Ringer, and Steve
      Singer.
      b89e1510
    • Peter Eisentraut's avatar
      Fix whitespace · de94b47c
      Peter Eisentraut authored
      de94b47c
    • Heikki Linnakangas's avatar
      Rename huge_tlb_pages to huge_pages, and improve docs. · f8ce16d0
      Heikki Linnakangas authored
      Christian Kruse
      f8ce16d0
    • Alvaro Herrera's avatar
      pg_dump et al: Add --if-exists option · 9067310c
      Alvaro Herrera authored
      This option makes pg_dump, pg_dumpall and pg_restore inject an IF EXISTS
      clause to each DROP command they emit.  (In pg_dumpall, the clause is
      not added to individual objects drops, but rather to the CREATE DATABASE
      commands, as well as CREATE ROLE and CREATE TABLESPACE.)
      
      This allows for a better user dump experience when using --clean in case
      some objects do not already exist.  Per bug #7873 by Dave Rolsky.
      
      Author: Pavel Stěhule
      Reviewed-by: Jeevan Chalke, Álvaro Herrera, Josh Kupershmidt
      9067310c
    • Robert Haas's avatar
      Use a longer buffer in libpqrcv_startstreaming. · 34c6d961
      Robert Haas authored
      Because of the new SLOT clause in the START_REPLICATION command, it's
      possible for the command to end up too long for the old maximum buffer
      length.
      
      Andres Freund
      34c6d961
    • Robert Haas's avatar
      Bump catversion. · a8e9b86b
      Robert Haas authored
      The previous patch should have entailed a catversion bump, but I
      forgot.
      a8e9b86b
    • Robert Haas's avatar
      Corrections to replication slots code and documentation. · d83ee622
      Robert Haas authored
      Andres Freund, per a report from Vik Faering
      d83ee622
    • Robert Haas's avatar
      pageinspect: Use new pg_lsn datatype. · 45ffeb7e
      Robert Haas authored
      Michael Paquier, with slight comment changes by me
      45ffeb7e
    • Robert Haas's avatar
      Define LSNOID in pg_type.h. · ae95f5f7
      Robert Haas authored
      Most other built-in types have a similarly-named constant, so this
      type should probably have one, too.
      
      Michael Paquier
      ae95f5f7
    • Stephen Frost's avatar
      Another round of Coverity fixes · 5592ebac
      Stephen Frost authored
      Additional non-security issues/improvements spotted by Coverity.
      
      In backend/libpq, no sense trying to protect against port->hba being
      NULL after we've already dereferenced it in the switch() statement.
      
      Prevent against possible overflow due to 32bit arithmitic in
      basebackup throttling (not yet released, so no security concern).
      
      Remove nonsensical check of array pointer against NULL in procarray.c,
      looks to be a holdover from 9.1 and earlier when there were pointers
      being used but now it's just an array.
      
      Remove pointer check-against-NULL in tsearch/spell.c as we had already
      dereferenced it above (in the strcmp()).
      
      Remove dead code from adt/orderedsetaggs.c, isnull is checked
      immediately after each tuplesort_getdatum() call and if true we return,
      so no point checking it again down at the bottom.
      
      Remove recently added minor error-condition memory leak in pg_regress.
      5592ebac
  6. 02 Mar, 2014 1 commit
    • Stephen Frost's avatar
      Various Coverity-spotted fixes · b1aebbb6
      Stephen Frost authored
      A number of issues were identified by the Coverity scanner and are
      addressed in this patch.  None of these appear to be security issues
      and many are mostly cosmetic changes.
      
      Short comments for each of the changes follows.
      
      Correct the semi-colon placement in be-secure.c regarding SSL retries.
      Remove a useless comparison-to-NULL in proc.c (value is dereferenced
        prior to this check and therefore can't be NULL).
      Add checking of chmod() return values to initdb.
      Fix a couple minor memory leaks in initdb.
      Fix memory leak in pg_ctl- involves free'ing the config file contents.
      Use an int to capture fgetc() return instead of an enum in pg_dump.
      Fix minor memory leaks in pg_dump.
        (note minor change to convertOperatorReference()'s API)
      Check fclose()/remove() return codes in psql.
      Check fstat(), find_my_exec() return codes in psql.
      Various ECPG memory leak fixes.
      Check find_my_exec() return in ECPG.
      Explicitly ignore pqFlush return in libpq error-path.
      Change PQfnumber() to avoid doing an strdup() when no changes required.
      Remove a few useless check-against-NULL's (value deref'd beforehand).
      Check rmtree(), malloc() results in pg_regress.
      Also check get_alternative_expectfile() return in pg_regress.
      b1aebbb6
  7. 01 Mar, 2014 1 commit
    • Tom Lane's avatar
      Allow regex operations to be terminated early by query cancel requests. · 9662143f
      Tom Lane authored
      The regex code didn't have any provision for query cancel; which is
      unsurprising given its non-Postgres origin, but still problematic since
      some operations can take a long time.  Introduce a callback function to
      check for a pending query cancel or session termination request, and
      call it in a couple of strategic spots where we can make the regex code
      exit with an error indicator.
      
      If we ever actually split out the regex code as a standalone library,
      some additional work will be needed to let the cancel callback function
      be specified externally to the library.  But that's straightforward
      (certainly so by comparison to putting the locale-dependent character
      classification logic on a similar arms-length basis), and there seems
      no need to do it right now.
      
      A bigger issue is that there may be more places than these two where
      we need to check for cancels.  We can always add more checks later,
      now that the infrastructure is in place.
      
      Since there are known examples of not-terribly-long regexes that can
      lock up a backend for a long time, back-patch to all supported branches.
      I have hopes of fixing the known performance problems later, but adding
      query cancel ability seems like a good idea even if they were all fixed.
      9662143f
  8. 28 Feb, 2014 1 commit
    • Heikki Linnakangas's avatar
      Remove bogus while-loop. · d8a42b15
      Heikki Linnakangas authored
      Commit abf5c5c9 added a bogus while-
      statement after the for(;;)-loop. It went unnoticed in testing, because
      it was dead code.
      
      Report by KONDO Mitsumasa. Backpatch to 9.3. The commit that introduced
      this was also applied to 9.2, but not the bogus while-loop part, because
      the code in 9.2 looks quite different.
      d8a42b15