1. 14 Oct, 2017 1 commit
    • Peter Eisentraut's avatar
      Reinstate genhtml --prefix option for non-vpath builds · 5f340cb3
      Peter Eisentraut authored
      In c3d9a660, the genhtml --prefix option
      was removed to get slightly better behavior for vpath builds.  genhtml
      would then automatically pick a suitable prefix.  However, for non-vpath
      builds, this makes the coverage output dependent on the length of the
      path where the source code happens to be, leading to confusingly
      arbitrary results.  So put the --prefix option back for non-vpath
      builds.
      5f340cb3
  2. 13 Oct, 2017 10 commits
    • Joe Conway's avatar
      Add missing options to pg_regress help() output · b81eba6a
      Joe Conway authored
      A few command line options accepted by pg_regress were not being output
      by help(), including --help itself. Add that one, as well as --version
      and --bindir, and the corresponding short options for the first two.
      
      We could consider this for backpatching, but it did not seem worthwhile
      and no one else advocated for it, so apply only to master for now.
      
      Author: Joe Conway
      Reviewed-By: Tom Lane
      Discussion: https://postgr.es/m/dd519469-06d7-2662-83ef-c926f6c4f0f1%40joeconway.com
      b81eba6a
    • Andres Freund's avatar
      Improve sys/catcache performance. · 141fd1b6
      Andres Freund authored
      The following are the individual improvements:
      1) Avoidance of FunctionCallInfo based function calls, replaced by
         more efficient functions with a native C argument interface.
      2) Don't extract columns from a cache entry's tuple whenever matching
         entries - instead store them as a Datum array. This also allows to
         get rid of having to build dummy tuples for negative & list
         entries, and of a hack for dealing with cstring vs. text weirdness.
      3) Reorder members of catcache.h struct, so imortant entries are more
         likely to be on one cacheline.
      4) Allowing the compiler to specialize critical SearchCatCache for a
         specific number of attributes allows to unroll loops and avoid
         other nkeys dependant initialization.
      5) Only initializing the ScanKey when necessary, i.e. catcache misses,
         greatly reduces cache unnecessary cpu cache misses.
      6) Split of the cache-miss case from the hash lookup, reducing stack
         allocations etc in the common case.
      7) CatCTup and their corresponding heaptuple are allocated in one
         piece.
      
      This results in making cache lookups themselves roughly three times as
      fast - full-system benchmarks obviously improve less than that.
      
      I've also evaluated further techniques:
      - replace open coded hash with simplehash - the list walk right now
        shows up in profiles. Unfortunately it's not easy to do so safely as
        an entry's memory location can change at various times, which
        doesn't work well with the refcounting and cache invalidation.
      - Cacheline-aligning CatCTup entries - helps some with performance,
        but the win isn't big and the code for it is ugly, because the
        tuples have to be freed as well.
      - add more proper functions, rather than macros for
        SearchSysCacheCopyN etc., but right now they don't show up in
        profiles.
      
      The reason the macro wrapper for syscache.c/h have to be changed,
      rather than just catcache, is that doing otherwise would require
      exposing the SysCache array to the outside.  That might be a good idea
      anyway, but it's for another day.
      
      Author: Andres Freund
      Reviewed-By: Robert Haas
      Discussion: https://postgr.es/m/20170914061207.zxotvyopetm7lrrp@alap3.anarazel.de
      141fd1b6
    • Andres Freund's avatar
      Add pg_noinline macro to c.h. · a0247e7a
      Andres Freund authored
      Forcing a function not to be inlined can be useful if it's the
      slow-path of a performance critical function, or should be visible in
      profiles to allow for proper cost attribution.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20170914061207.zxotvyopetm7lrrp@alap3.anarazel.de
      a0247e7a
    • Andres Freund's avatar
      Force "restrict" not to be used when compiling with xlc. · d133982d
      Andres Freund authored
      Per buildfarm animal Hornet and followup manual testing by Noah Misch,
      it appears xlc miscompiles code using "restrict" in at least some
      cases. Allow disabling restrict usage with FORCE_DISABLE_RESTRICT=yes
      in template files, and do so for aix/xlc.
      
      Author: Andres Freund and Tom Lane
      Discussion: https://postgr.es/m/1820.1507918762@sss.pgh.pa.us
      d133982d
    • Robert Haas's avatar
      Fix possible crash with Parallel Bitmap Heap Scan. · 6393613b
      Robert Haas authored
      If a Parallel Bitmap Heap scan's chain of leftmost descendents
      includes a BitmapOr whose first child is a BitmapAnd, the prior coding
      would mistakenly create a non-shared TIDBitmap and then try to perform
      shared iteration.
      
      Report by Tomas Vondra.  Patch by Dilip Kumar.
      
      Discussion: http://postgr.es/m/50e89684-8ad9-dead-8767-c9545bafd3b6@2ndquadrant.com
      6393613b
    • Tom Lane's avatar
      Improve implementation of CRE-stack-flattening in map_variable_attnos(). · 73937119
      Tom Lane authored
      I (tgl) objected to the obscure implementation introduced in commit
      1c497fa7.  This one seems a bit less action-at-a-distance-y, at the
      price of repeating a few lines of code.
      
      Improve the comments about what the function is doing, too.
      
      Amit Khandekar, whacked around a bit more by me
      
      Discussion: https://postgr.es/m/CAJ3gD9egYTyHUH0nTMxm8-1m3RvdqEbaTyGC-CUNtYf7tKNDaQ@mail.gmail.com
      73937119
    • Tom Lane's avatar
      Rely on sizeof(typename) rather than sizeof(variable) in pqformat.h. · 5229db6c
      Tom Lane authored
      In each of the pq_writeintN functions, the three uses of sizeof() should
      surely all be consistent.  I started out to make them all sizeof(ni),
      but on reflection let's make them sizeof(typename) instead.  That's more
      like our usual style elsewhere, and it's just barely possible that the
      failures buildfarm member hornet has shown since 4c119fbc went in are
      caused by the compiler getting confused about sizeof() a parameter that
      it's optimizing away.
      
      In passing, improve a couple of comments.
      
      Discussion: https://postgr.es/m/E1e2RML-0002do-Lc@gemulon.postgresql.org
      5229db6c
    • Peter Eisentraut's avatar
      Attempt to fix LDAP build · 7d1b8e75
      Peter Eisentraut authored
      Apparently, an older spelling of LDAP_OPT_DIAGNOSTIC_MESSAGE is
      LDAP_OPT_ERROR_STRING, so fall back to that one.
      7d1b8e75
    • Peter Eisentraut's avatar
      Log diagnostic messages if errors occur during LDAP auth. · cf1238cd
      Peter Eisentraut authored
      Diagnostic messages seem likely to help users diagnose root
      causes more easily, so let's report them as errdetail.
      
      Author: Thomas Munro
      Reviewed-By: Ashutosh Bapat, Christoph Berg, Alvaro Herrera, Peter Eisentraut
      Discussion: https://postgr.es/m/CAEepm=2_dA-SYpFdmNVwvKsEBXOUj=K4ooKovHmvj6jnMdt8dw@mail.gmail.com
      cf1238cd
    • Peter Eisentraut's avatar
      Improve LDAP cleanup code in error paths. · 1feff99f
      Peter Eisentraut authored
      After calling ldap_unbind_s() we probably shouldn't try to use the LDAP
      connection again to call ldap_get_option(), even if it failed.  The OpenLDAP
      man page for ldap_unbind[_s] says "Once it is called, the connection to the
      LDAP server is closed, and the ld structure is invalid."  Otherwise, as a
      general rule we should probably call ldap_unbind() before returning in all
      paths to avoid leaking resources.  It is unlikely there is any practical
      leak problem since failure to authenticate currently results in the backend
      exiting soon afterwards.
      
      Author: Thomas Munro
      Reviewed-By: Alvaro Herrera, Peter Eisentraut
      Discussion: https://postgr.es/m/20170914141205.eup4kxzlkagtmfac%40alvherre.pgsql
      1feff99f
  3. 12 Oct, 2017 13 commits
  4. 11 Oct, 2017 12 commits
    • Robert Haas's avatar
      pg_stat_statements: Widen query IDs from 32 bits to 64 bits. · cff440d3
      Robert Haas authored
      This takes advantage of the infrastructure introduced by commit
      81c5e46c to greatly reduce the
      likelihood that two different queries will end up with the same query
      ID.  It's still possible, of course, but whereas before it the chances
      of a collision reached 25% around 50,000 queries, it will now take
      more than 3 billion queries.
      
      Backward incompatibility: Because the type exposed at the SQL level is
      int8, users may now see negative query IDs in the pg_stat_statements
      view (and also, query IDs more than 4 billion, which was the old
      limit).
      
      Patch by me, reviewed by Michael Paquier and Peter Geoghegan.
      
      Discussion: http://postgr.es/m/CA+TgmobG_Kp4cBKFmsznUAaM1GWW6hhRNiZC0KjRMOOeYnz5Yw@mail.gmail.com
      cff440d3
    • Andres Freund's avatar
      Use one stringbuffer for all rows printed in printtup.c. · f2dec34e
      Andres Freund authored
      This avoids newly allocating, and then possibly growing, the
      stringbuffer for every row. For wide rows this can substantially
      reduce memory allocator overhead, at the price of not immediately
      reducing memory usage after outputting an especially wide row.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20170914063418.sckdzgjfrsbekae4@alap3.anarazel.de
      f2dec34e
    • Andres Freund's avatar
      Add more efficient functions to pqformat API. · 1de09ad8
      Andres Freund authored
      There's three prongs to achieve greater efficiency here:
      
      1) Allow reusing a stringbuffer across pq_beginmessage/endmessage,
         with the new pq_beginmessage_reuse/endmessage_reuse. This can be
         beneficial both because it avoids allocating the initial buffer,
         and because it's more likely to already have an correctly sized
         buffer.
      
      2) Replacing pq_sendint() with pq_sendint$width() inline
         functions. Previously unnecessary and unpredictable branches in
         pq_sendint() were needed. Additionally the replacement functions
         are implemented more efficiently.  pq_sendint is now deprecated, a
         separate commit will convert all in-tree callers.
      
      3) Add pq_writeint$width(), pq_writestring(). These rely on sufficient
         space in the StringInfo's buffer, avoiding individual space checks
         & potential individual resizing.  To allow this to be used for
         strings, expose mbutil.c's MAX_CONVERSION_GROWTH.
      
      Followup commits will make use of these facilities.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20170914063418.sckdzgjfrsbekae4@alap3.anarazel.de
      1de09ad8
    • Andres Freund's avatar
      Allow to avoid NUL-byte management for stringinfos and use in format.c. · 70c2d1be
      Andres Freund authored
      In a lot of the places having appendBinaryStringInfo() maintain a
      trailing NUL byte wasn't actually meaningful, e.g. when appending an
      integer which can contain 0 in one of its bytes.
      
      Removing this yields some small speedup, but more importantly will be
      more consistent when providing faster variants of pq_sendint etc.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20170914063418.sckdzgjfrsbekae4@alap3.anarazel.de
      70c2d1be
    • Andres Freund's avatar
      Add configure infrastructure to detect support for C99's restrict. · 0b974dba
      Andres Freund authored
      Will be used in later commits improving performance for a few key
      routines where information about aliasing allows for significantly
      better code generation.
      
      This allows to use the C99 'restrict' keyword without breaking C89, or
      for that matter C++, compilers. If not supported it's defined to be
      empty.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20170914063418.sckdzgjfrsbekae4@alap3.anarazel.de
      0b974dba
    • Tom Lane's avatar
      Remove unnecessary PG_TRY overhead for CurrentResourceOwner changes. · 5fa6b0d1
      Tom Lane authored
      resowner/README contained advice to use a PG_TRY block to restore the
      old CurrentResourceOwner value anywhere that that variable is transiently
      changed.  That advice was only inconsistently followed, however, and
      on reflection it seems like unnecessary overhead.  We don't bother
      with such a convention for transient CurrentMemoryContext changes,
      on the grounds that any (sub)transaction abort will start out by
      resetting CurrentMemoryContext to what it wants.  But the same is
      true of CurrentResourceOwner, so there seems no need to treat it
      differently.
      
      Hence, remove PG_TRY blocks that exist only to restore CurrentResourceOwner
      before re-throwing the error.  There are a couple of places that restore
      it along with some other actions, and I left those alone; the restore is
      probably unnecessary but no noticeable gain will result from removing it.
      
      Discussion: https://postgr.es/m/5236.1507583529@sss.pgh.pa.us
      5fa6b0d1
    • Andres Freund's avatar
      Prevent idle in transaction session timeout from sometimes being ignored. · f6766166
      Andres Freund authored
      The previous coding in ProcessInterrupts() could lead to
      idle_in_transaction_session_timeout being ignored, when
      statement_timeout occurred earlier.
      
      The problem was that ProcessInterrupts() would return before
      processing the transaction timeout if QueryCancelPending was set while
      QueryCancelHoldoffCount != 0 - which is the case when reading new
      commands from the client. Ergo when the idle transaction timeout would
      hit.
      
      Fix that by removing the early return. Alternatively the transaction
      timeout code could have been moved up, but that early return seems
      like an issue that could hit other cases too.
      
      Author: Lukas Fittl
      Bug: #14821
      Discussion:
          https://www.postgresql.org/message-id/20170921010956.17345.61461%40wrigleys.postgresql.org
          https://www.postgresql.org/message-id/CAP53PkxQnv3OWJpyNPGJYT62uY=n1=2CF_Lpc6gVOFnc0-gazw@mail.gmail.com
      Backpatch: 9.6-, where idle_in_transaction_session_timeout was introduced.
      f6766166
    • Tom Lane's avatar
      Doc: fix missing explanation of default object privileges. · 28605968
      Tom Lane authored
      The GRANT reference page, which lists the default privileges for new
      objects, failed to mention that USAGE is granted by default for data
      types and domains.  As a lesser sin, it also did not specify anything
      about the initial privileges for sequences, FDWs, foreign servers,
      or large objects.  Fix that, and add a comment to acldefault() in the
      probably vain hope of getting people to maintain this list in future.
      
      Noted by Laurenz Albe, though I editorialized on the wording a bit.
      Back-patch to all supported branches, since they all have this behavior.
      
      Discussion: https://postgr.es/m/1507620895.4152.1.camel@cybertec.at
      28605968
    • Robert Haas's avatar
    • Tom Lane's avatar
      Fix low-probability loss of NOTIFY messages due to XID wraparound. · 118e99c3
      Tom Lane authored
      Up to now async.c has used TransactionIdIsInProgress() to detect whether
      a notify message's source transaction is still running.  However, that
      function has a quick-exit path that reports that XIDs before RecentXmin
      are no longer running.  If a listening backend is doing nothing but
      listening, and not running any queries, there is nothing that will advance
      its value of RecentXmin.  Once 2 billion transactions elapse, the
      RecentXmin check causes active transactions to be reported as not running.
      If they aren't committed yet according to CLOG, async.c decides they
      aborted and discards their messages.  The timing for that is a bit tight
      but it can happen when multiple backends are sending notifies concurrently.
      The net symptom therefore is that a sufficiently-long-surviving
      listen-only backend starts to miss some fraction of NOTIFY traffic,
      but only under heavy load.
      
      The only function that updates RecentXmin is GetSnapshotData().
      A brute-force fix would therefore be to take a snapshot before
      processing incoming notify messages.  But that would add cycles,
      as well as contention for the ProcArrayLock.  We can be smarter:
      having taken the snapshot, let's use that to check for running
      XIDs, and not call TransactionIdIsInProgress() at all.  In this
      way we reduce the number of ProcArrayLock acquisitions from one
      per message to one per notify interrupt; that's the same under
      light load but should be a benefit under heavy load.  Light testing
      says that this change is a wash performance-wise for normal loads.
      
      I looked around for other callers of TransactionIdIsInProgress()
      that might be at similar risk, and didn't find any; all of them
      are inside transactions that presumably have already taken a
      snapshot.
      
      Problem report and diagnosis by Marko Tiikkaja, patch by me.
      Back-patch to all supported branches, since it's been like this
      since 9.0.
      
      Discussion: https://postgr.es/m/20170926182935.14128.65278@wrigleys.postgresql.org
      118e99c3
    • Tom Lane's avatar
      Add port/strnlen support to libpq and ecpg Makefiles. · 46912d9b
      Tom Lane authored
      In the wake of fffd651e, any makefile that pulls in snprintf.c
      from src/port/ needs to be prepared to pull in strnlen.c as well.
      Per buildfarm.
      46912d9b
    • Peter Eisentraut's avatar
      Fix whitespace · e9e0f78b
      Peter Eisentraut authored
      e9e0f78b
  5. 10 Oct, 2017 4 commits