Simon Riggs [Wed, 28 Mar 2018 04:21:00 +0000 (05:21 +0100)]     Use pg_stat_get_xact* functions within xacts
  Resolve build farm failures from 
c203d6cf81b4d7e43,
 diagnosed by Tom Lane. 
 The output of pg_stat_get_xact_tuples_hot_updated() and friends
 is not guaranteed to show anything after the transaction completes.
 Data is flushed slowly to stats collector, so using them can
 give timing issues.  
  Andres Freund [Wed, 28 Mar 2018 04:03:10 +0000 (21:03 -0700)]     Quick adaption of JIT tuple deforming to the fast default patch.
  Instead using memset to set tts_isnull, call the new
 slot_getmissingattrs(). 
 Also fix a bug (= instead of >=) in the code generation. Normally = is
 correct, but when repeatedly deforming fields not in a
 tuple (e.g. deform up to natts + 1 and then natts + 2) >= is needed. 
 Discussion: https://postgr.es/m/
20180328010053.i2qvsuuusst4lgmc@alap3.anarazel.de  
  Andres Freund [Wed, 28 Mar 2018 02:07:39 +0000 (19:07 -0700)]     Add catversion bump missed in 
16828d5c0. 
 Given that pg_attribute changed its layout...  
  Andrew Dunstan [Wed, 28 Mar 2018 00:13:52 +0000 (10:43 +1030)]     Fast ALTER TABLE ADD COLUMN with a non-NULL default
  Currently adding a column to a table with a non-NULL default results in
 a rewrite of the table. For large tables this can be both expensive and
 disruptive. This patch removes the need for the rewrite as long as the
 default value is not volatile. The default expression is evaluated at
 the time of the ALTER TABLE and the result stored in a new column
 (attmissingval) in pg_attribute, and a new column (atthasmissing) is set
 to true. Any existing row when fetched will be supplied with the
 attmissingval. New rows will have the supplied value or the default and
 so will never need the attmissingval. 
 Any time the table is rewritten all the atthasmissing and attmissingval
 settings for the attributes are cleared, as they are no longer needed. 
 The most visible code change from this is in heap_attisnull, which
 acquires a third TupleDesc argument, allowing it to detect a missing
 value if there is one. In many cases where it is known that there will
 not be any (e.g.  catalog relations) NULL can be passed for this
 argument. 
 Andrew Dunstan, heavily modified from an original patch from Serge
 Rielau.
 Reviewed by Tom Lane, Andres Freund, Tomas Vondra and David Rowley. 
 Discussion: https://postgr.es/m/
31e2e921-7002-4c27-59f5-
51f08404c858@2ndQuadrant.com  
  Tom Lane [Tue, 27 Mar 2018 22:15:39 +0000 (18:15 -0400)]     Update pgindent's typedefs blacklist, and make it easier to adjust.
  It seems that all buildfarm members are now using the <stdbool.h> code
 path, so that none of them report "bool" as a typedef.  We still need it
 to be treated that way, so adjust pgindent to force that whether or not
 it's in the given list. 
 Also, the recent introduction of LLVM infrastructure has caused the
 appearance of some typedef names that we definitely *don't* want
 treated as typedefs, such as "string" and "abs".  Extend the existing
 blacklist to include these.  (Additions based on comparing v10's
 typedefs list to what the buildfarm is currently emitting.) 
 Rearrange the code so that the lists of whitelisted/blacklisted
 names are a bit easier to find and modify. 
 Andrew Dunstan and Tom Lane 
 Discussion: https://postgr.es/m/28690.
1521912334@sss.pgh.pa.us  
  Tom Lane [Tue, 27 Mar 2018 20:46:47 +0000 (16:46 -0400)]     Allow memory contexts to have both fixed and variable ident strings.
  Originally, we treated memory context names as potentially variable in
 all cases, and therefore always copied them into the context header.
 Commit 
9fa6f00b1 rethought this a little bit and invented a distinction
 between fixed and variable names, skipping the copy step for the former.
 But we can make things both simpler and more useful by instead allowing
 there to be two parts to a context's identification, a fixed "name" and
 an optional, variable "ident".  The name supplied in the context create
 call is now required to be a compile-time-constant string in all cases,
 as it is never copied but just pointed to.  The "ident" string, if
 wanted, is supplied later.  This is needed because typically we want
 the ident to be stored inside the context so that it's cleaned up
 automatically on context deletion; that means it has to be copied into
 the context before we can set the pointer. 
 The cost of this approach is basically just an additional pointer field
 in struct MemoryContextData, which isn't much overhead, and is bought
 back entirely in the AllocSet case by not needing a headerSize field
 anymore, since we no longer have to cope with variable header length.
 In addition, we can simplify the internal interfaces for memory context
 creation still further, saving a few cycles there.  And it's no longer
 true that a custom identifier disqualifies a context from participating
 in aset.c's freelist scheme, so possibly there's some win on that end. 
 All the places that were using non-compile-time-constant context names
 are adjusted to put the variable info into the "ident" instead.  This
 allows more effective identification of those contexts in many cases;
 for example, subsidary contexts of relcache entries are now identified
 by both type (e.g. "index info") and relname, where before you got only
 one or the other.  Contexts associated with PL function cache entries
 are now identified more fully and uniformly, too. 
 I also arranged for plancache contexts to use the query source string
 as their identifier.  This is basically free for CachedPlanSources, as
 they contained a copy of that string already.  We pay an extra pstrdup
 to do it for CachedPlans.  That could perhaps be avoided, but it would
 make things more fragile (since the CachedPlanSource is sometimes
 destroyed first).  I suspect future improvements in error reporting will
 require CachedPlans to have a copy of that string anyway, so it's not
 clear that it's worth moving mountains to avoid it now. 
 This also changes the APIs for context statistics routines so that the
 context-specific routines no longer assume that output goes straight
 to stderr, nor do they know all details of the output format.  This
 is useful immediately to reduce code duplication, and it also allows
 for external code to do something with stats output that's different
 from printing to stderr. 
 The reason for pushing this now rather than waiting for v12 is that
 it rethinks some of the API changes made by commit 
9fa6f00b1.  Seems
 better for extension authors to endure just one round of API changes
 not two. 
 Discussion: https://postgr.es/m/CAB=Je-FdtmFZ9y9REHD7VsSrnCkiBhsA4mdsLKSPauwXtQBeNA@mail.gmail.com  
  Simon Riggs [Tue, 27 Mar 2018 18:57:02 +0000 (19:57 +0100)]     Allow HOT updates for some expression indexes
 
 If the value of an index expression is unchanged after UPDATE,
 allow HOT updates where previously we disallowed them, giving
 a significant performance boost in those cases.
 
 Particularly useful for indexes such as JSON->>field where the
 JSON value changes but the indexed value does not.
 
 Submitted as "surjective indexes" patch, now enabled by use
 of new "recheck_on_update" parameter.
 
 Author: Konstantin Knizhnik
 Reviewer: Simon Riggs, with much wordsmithing and some cleanup
 
 
    Peter Eisentraut [Tue, 27 Mar 2018 16:31:34 +0000 (12:31 -0400)]     libpq: PQhost to return active connected host or hostaddr
 
 Previously, PQhost didn't return the connected host details when the
 connection type was CHT_HOST_ADDRESS (i.e., via hostaddr).  Instead, it
 returned the complete host connection parameter (which could contain
 multiple hosts) or the default host details, which was confusing and
 arguably incorrect.
 
 Change this to return the actually connected host or hostaddr
 irrespective of the connection type.  When hostaddr but no host was
 specified, hostaddr is now returned.  Never return the original host
 connection parameter, and document that PQhost cannot be relied on
 before the connection is established.
 
 PQport is similarly changed to always return the active connection port
 and never the original connection parameter.
 
 Author: Hari Babu <kommi.haribabu@gmail.com>
 Reviewed-by: Michael Paquier <michael@paquier.xyz>
 Reviewed-by: Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp>
 Reviewed-by: David G. Johnston <david.g.johnston@gmail.com>
 
    Teodor Sigaev [Tue, 27 Mar 2018 14:40:56 +0000 (17:40 +0300)]     Fix count of skipped test of basebackup on Windows
  Commit 
920a5e500a119b03356fb1fb64a677eb1aa5fc6f add tests which should be
 skipped on Windows boxes, but patch doesn't contain right count of them. 
 David Steel  
  Teodor Sigaev [Tue, 27 Mar 2018 13:14:40 +0000 (16:14 +0300)]     Skip temp tables from basebackup.
  Do not store temp tables in basebackup, they will not be visible anyway, so,
 there are not reasons to store them. 
 Author: David Steel
 Reviewed by: me
 Discussion: https://www.postgresql.org/message-id/flat/
5ea4d26a-a453-c1b7-eff9-
5a3ef8f8aceb@pgmasters.net  
  Teodor Sigaev [Tue, 27 Mar 2018 12:43:19 +0000 (15:43 +0300)]     Add predicate locking for GiST
 
 Add page-level predicate locking, due to gist's code organization, patch seems
 close to trivial: add check before page changing, add predicate lock before page
 scanning.  Although choosing right place to check is not simple: it should not
 be called during index build, it should support insertion of new downlink and so
 on.
 
 Author: Shubham Barai with editorization by me and Alexander Korotkov
 Reviewed by: Alexander Korotkov, Andrey Borodin, me
 Discussion: https://www.postgresql.org/message-id/flat/CALxAEPtdcANpw5ePU3LvnTP8HCENFw6wygupQAyNBgD-sG3h0g@mail.gmail.com
 
 
    Andres Freund [Mon, 26 Mar 2018 22:55:16 +0000 (15:55 -0700)]     Adapt to LLVM 7+ Orc API changes.
 
 This is mostly done to be able to validate features and fixes
 submitted to LLVM. Given the size of these changes that seems
 acceptable.
 
 Author: Andres Freund
 
 
    Andres Freund [Mon, 26 Mar 2018 23:04:39 +0000 (16:04 -0700)]     LLVMJIT: Free created module in LLVM < 5.
 
 Due to the differing APIs between versions, I forgot to deallocate the
 generated module in older LLVM versions, leading to a memory leak.
 
 Author: Andres Freund
 
 
    Andres Freund [Mon, 26 Mar 2018 21:59:37 +0000 (14:59 -0700)]     Make new regression  indpendent of max_parallel_workers_per_gather.
  The tests in 
e2f1eb0ee30d1 ("Implement partition-wise
 grouping/aggregation.") weren't independent of the server's
 max_parallel_workers_per_gather setting.  I (Andres) find it useful to
 locally run with that disabled, and the aforementioned patch broke
 this. 
 Author: Jeevan Chalke
 Discussion:
     https://postgr.es/m/
20180322210703.qmga3vsxqmiiypci@alap3.anarazel.de
     https://postgr.es/m/CAM2+6=UNWGKTgh9aOn4=SQ72HfFzbVFseh9=5N54bD6KB+D9OQ@mail.gmail.com  
  Andres Freund [Mon, 26 Mar 2018 19:58:17 +0000 (12:58 -0700)]     Correct some typos in the new JIT code.
 
 Author: Thomas Munro
 
 
    Andres Freund [Mon, 26 Mar 2018 19:57:19 +0000 (12:57 -0700)]     JIT tuple deforming in LLVM JIT provider.
  Performing JIT compilation for deforming gains performance benefits
 over unJITed deforming from compile-time knowledge of the tuple
 descriptor. Fixed column widths, NOT NULLness, etc can be taken
 advantage of. 
 Right now the JITed deforming is only used when deforming tuples as
 part of expression evaluation (and obviously only if the descriptor is
 known). It's likely to be beneficial in other cases, too. 
 By default tuple deforming is JITed whenever an expression is JIT
 compiled. There's a separate boolean GUC controlling it, but that's
 expected to be primarily useful for development and benchmarking. 
 Docs will follow in a later commit containing docs for the whole JIT
 feature. 
 Author: Andres Freund
 Discussion: https://postgr.es/m/
20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de  
  Teodor Sigaev [Mon, 26 Mar 2018 15:26:27 +0000 (18:26 +0300)]     Set random seed for pgbench.
  Setting random could increase reproducibility of test in some cases. Patch
 suggests three providers for seed: time (default), strong random
 generator (if available) and unsigned constant. Seed could be set from
 command line or enviroment variable. 
 Author: Fabien Coelho
 Reviewed by: Chapman Flack
 Discussion: https://www.postgresql.org/message-id/flat/
20160407082711.q7iq3ykffqxcszkv@alap3.anarazel.de  
  Alvaro Herrera [Mon, 26 Mar 2018 15:00:25 +0000 (12:00 -0300)]     Fix thinko in comment
  The listed numbers disagreed with the ones being used in the symbols;
 but instead of just fixing the numbers in the comment, use the symbolic
 name instead, which seems clearer. 
 This has been wrong all along, so apply back to 9.5 where BRIN was
 introduced.  
Reported-by: Tomas Vondra Discussion: https://postgr.es/m/
5ff514f2-8b1e-6366-b11c-
8e2ed442562d@2ndquadrant.com  
  Alvaro Herrera [Mon, 26 Mar 2018 14:45:58 +0000 (11:45 -0300)]     Fix test impredictability
 
 Test 'triggers' fails when another one creates triggers concurrently at
 some precise time, because of a missing WHERE clause.
 
 Per buildfarm members snapper, desmoxytes.
 
 
    Alvaro Herrera [Mon, 26 Mar 2018 13:43:54 +0000 (10:43 -0300)]     Handle INSERT .. ON CONFLICT with partitioned tables
  Commit 
eb7ed3f30634 enabled unique constraints on partitioned tables,
 but one thing that was not working properly is INSERT/ON CONFLICT.
 This commit introduces a new node keeps state related to the ON CONFLICT
 clause per partition, and fills it when that partition is about to be
 used for tuple routing. 
 Author: Amit Langote, Álvaro Herrera 
Reviewed-by: Etsuro Fujita, Pavan Deolasee Discussion: https://postgr.es/m/
20180228004602.cwdyralmg5ejdqkq@alvherre.pgsql  
  Alvaro Herrera [Mon, 26 Mar 2018 12:55:42 +0000 (09:55 -0300)]     Fix typo
 
 
    Andrew Dunstan [Mon, 26 Mar 2018 12:23:02 +0000 (22:53 +1030)]     Remove two tests inadvertently added in 
2b27273435    Andrew Dunstan [Mon, 26 Mar 2018 12:09:24 +0000 (22:39 +1030)]     Optimize btree insertions for common case of increasing values
 
 Remember the last page of an index insert if it's the rightmost leaf
 page. If the next entry belongs on and can fit in the remembered page,
 insert the new entry there as long as we can get a lock on the page.
 Otherwise, fall back on the more expensive method of searching for
 the right place to insert the entry.
 
 This provides a performance improvement for the common case where an
 index entry is for monotonically increasing or nearly monotonically
 increasing value such as an identity field or a current timestamp.
 
 Pavan Deolasee
 Reviewed by Claudio Freire, Simon Riggs and Peter Geoghegan
 
 Discussion: https://postgr.es/m/CABOikdM9DrupjyKZZFM5k8-0RCDs1wk6JzEkg7UgSW6QzOwMZw@mail.gmail.com
 
 
    Tom Lane [Sun, 25 Mar 2018 20:15:15 +0000 (16:15 -0400)]     Doc: add example of type resolution in nested UNIONs.
  Section 10.5 didn't say explicitly that multiple UNIONs are resolved
 pairwise.  Since the resolution algorithm is described as taking any
 number of inputs, readers might well think that a query like
 "select x union select y union select z" would be resolved by
 considering x, y, and z in one resolution step.  But that's not what
 happens (and I think that behavior is per SQL spec).  Add an example
 clarifying this point. 
 Per bug #15129 from Philippe Beaudoin. 
 Discussion: https://postgr.es/m/
152196085023.32649.
9916472370480121694@wrigleys.postgresql.org  
  Tom Lane [Sun, 25 Mar 2018 19:15:32 +0000 (15:15 -0400)]     Fix unsafe extraction of the OID part of a relation filename.
  Commit 
8694cc96b did this randomly differently from other callers of
 parse_filename_for_nontemp_relation().  Perhaps unsurprisingly,
 the randomly different way is wrong; it fails to ensure the
 extracted string is null-terminated.  Per buildfarm member skink. 
 Discussion: https://postgr.es/m/14453.
1522001792@sss.pgh.pa.us  
  Peter Eisentraut [Sun, 25 Mar 2018 18:58:49 +0000 (14:58 -0400)]     pg_resetwal: Allow users to change the WAL segment size
 
 This adds a new option --wal-segsize (analogous to initdb) that changes
 the WAL segment size in pg_control.
 
 Author: Nathan Bossart <bossartn@amazon.com>
 
 
    Peter Eisentraut [Sun, 25 Mar 2018 13:17:07 +0000 (09:17 -0400)]     initdb: Further polishing of --wal-segsize option
 
 Extend documentation.  Improve option parsing in case no argument was
 specified.
 
 
    Tom Lane [Sun, 25 Mar 2018 18:54:16 +0000 (14:54 -0400)]     Remove useless if-test.
  Coverity complained that this check is pointless, and it's right.
 There is no case where we'd call ExecutorStart with a null plannedstmt,
 and if we did, it'd have crashed before here.  Thinko in commit 
cc415a56d.  
  Tom Lane [Sun, 25 Mar 2018 16:38:21 +0000 (12:38 -0400)]     Doc: remove extra comma in syntax summary for array_fill().
  Noted by Scott Ure.  Back-patch to all supported branches. 
 Discussion: https://postgr.es/m/
152199346794.4544.
1888397173908716912@wrigleys.postgresql.org  
  Peter Eisentraut [Sun, 25 Mar 2018 13:09:04 +0000 (09:09 -0400)]     pg_resetwal: Fix logical typo in code
  introduced in 
f1a074b146c900bd439b6ef1953866f41b61a669    Tom Lane [Sun, 25 Mar 2018 04:46:43 +0000 (00:46 -0400)]     Add #includes missed in commit 
e22b27f0cb3ee03ee300d431997f5944ccf2d7b3. 
 Leaving out getopt_long.h works on some platforms, but not all.
 Per buildfarm. 
 Discussion: https://postgr.es/m/
20180325030552.f462zqmohs6cqekg@alap3.anarazel.de  
  Tom Lane [Sun, 25 Mar 2018 04:09:26 +0000 (00:09 -0400)]     Stabilize regression test result.
  If random() returns a result sufficiently close to zero, float8out
 switches to scientific notation, breaking this test case's expectation
 that the output should look like '0.xxxxxxxxx'.  Casting to numeric
 should fix that.  Per buildfarm member pogona. 
 Discussion: https://postgr.es/m/
20180324212502.wt4serghfidge2on@alap3.anarazel.de  
  Tom Lane [Sun, 25 Mar 2018 03:44:01 +0000 (23:44 -0400)]     Mop-up for commit 
feb8254518752b2cb4a8964c374dd82d49ef0e0d. 
 Missed these occurrences of some of the adjusted error messages.
 Per buildfarm member pademelon.  
  Peter Eisentraut [Sun, 25 Mar 2018 01:14:20 +0000 (21:14 -0400)]     Add long options to pg_resetwal and pg_controldata
 
 We were running out of good single-letter options for some upcoming
 pg_resetwal functionality, so add long options to create more
 possibilities.  Add to pg_controldata as well for symmetry.
 
 based on patch by Bossart, Nathan <bossartn@amazon.com>
 
 
    Peter Eisentraut [Sat, 24 Mar 2018 19:40:21 +0000 (15:40 -0400)]     initdb: Improve --wal-segsize handling
 
 Give separate error messages for when the argument is not a number and
 when it is not the right kind of number.
 
 Fix wording in the help message.
 
 
    Peter Eisentraut [Sat, 24 Mar 2018 19:38:57 +0000 (15:38 -0400)]     Improve pg_resetwal documentation
 
 Clarify that the -l option takes a file name, not an "address", and that
 that might be different from the LSN if nondefault WAL segment sizes are
 used.
 
 
    Noah Misch [Sat, 24 Mar 2018 03:31:03 +0000 (20:31 -0700)]     Don't qualify type pg_catalog.text in extend-extensions-example.
 
 Extension scripts begin execution with pg_catalog at the front of the
 search path, so type names reliably refer to pg_catalog.  Remove these
 superfluous qualifications.  Earlier <programlisting> of this <sect1>
 already omitted them.  Back-patch to 9.3 (all supported versions).
 
 
    Peter Eisentraut [Fri, 23 Mar 2018 21:18:22 +0000 (17:18 -0400)]     Small refactoring
 
 Put the "atomic" argument of ExecuteDoStmt() and ExecuteCallStmt() into
 a variable instead of repeating the formula.
 
 
    Peter Eisentraut [Fri, 23 Mar 2018 20:31:49 +0000 (16:31 -0400)]     Further fix interaction of Perl and stdbool.h
 
 In the case that PostgreSQL uses stdbool.h but Perl doesn't, we need to
 prevent Perl from defining bool, to prevent compiler warnings about
 redefinition.
 
 
    Tom Lane [Fri, 23 Mar 2018 17:45:37 +0000 (13:45 -0400)]     Fix make rules that generate multiple output files.
  For years, our makefiles have correctly observed that "there is no correct
 way to write a rule that generates two files".  However, what we did is to
 provide empty rules that "generate" the secondary output files from the
 primary one, and that's not right either.  Depending on the details of
 the creating process, the primary file might end up timestamped later than
 one or more secondary files, causing subsequent make runs to consider the
 secondary file(s) out of date.  That's harmless in a plain build, since
 make will just re-execute the empty rule and nothing happens.  But it's
 fatal in a VPATH build, since make will expect the secondary file to be
 rebuilt in the build directory.  This would manifest as "file not found"
 failures during VPATH builds from tarballs, if we were ever unlucky enough
 to ship a tarball with apparently out-of-date secondary files.  (It's not
 clear whether that has ever actually happened, but it definitely could.) 
 To ensure that secondary output files have timestamps >= their primary's,
 change our makefile convention to be that we provide a "touch $@" action
 not an empty rule.  Also, make sure that this rule actually gets invoked
 during a distprep run, else the hazard remains. 
 It's been like this a long time, so back-patch to all supported branches. 
 In HEAD, I skipped the changes in src/backend/catalog/Makefile, because
 those rules are due to get replaced soon in the bootstrap data format
 patch, and there seems no need to create a merge issue for that patch.
 If for some reason we fail to land that patch in v11, we'll need to
 back-fill the changes in that one makefile from v10. 
 Discussion: https://postgr.es/m/18556.
1521668179@sss.pgh.pa.us  
  Teodor Sigaev [Fri, 23 Mar 2018 16:14:12 +0000 (19:14 +0300)]     Exclude unlogged tables from base backups
  Exclude unlogged tables from base backup entirely except init fork which marks
 created unlogged table. The next question is do not backup temp table but
 it's a story for separate patch. 
 Author: David Steele
 Review by: Adam Brightwell, Masahiko Sawada
 Discussion: https://www.postgresql.org/message-id/flat/
04791bab-cb04-ba43-e9c0-
664a4c1ffb2c@pgmasters.net  
  Peter Eisentraut [Fri, 23 Mar 2018 14:31:10 +0000 (10:31 -0400)]     Fix interaction of Perl and stdbool.h
  Revert the PL/Perl-specific change in 
9a95a77d9d5d3003d2d67121f2731b6e5fc37336.  We must not prevent Perl from
 using stdbool.h when it has been built to do so, even if it uses an
 incompatible size.  Otherwise, we would be imposing our bool on Perl,
 which will lead to crashes because of the size mismatch. 
 Instead, we undef bool after including the Perl headers, as we did
 previously, but now only if we are not using stdbool.h ourselves.
 Record that choice in c.h as USE_STDBOOL.  This will also make it easier
 to apply that coding pattern elsewhere if necessary.  
  Peter Eisentraut [Fri, 23 Mar 2018 14:10:49 +0000 (10:10 -0400)]     pg_resetwal: Prevent division-by-zero errors
  Handle the case where the pg_control file specifies a WAL segment size
 of 0 bytes.  This would previously have led to a division by zero error.
 Change this to assume the whole file is corrupt and go to guess
 everything. 
 Discussion: https://www.postgresql.org/message-id/
a6163ad7-cc99-fdd1-dfad-
25df73032ab8%402ndquadrant.com  
  Alvaro Herrera [Fri, 23 Mar 2018 13:48:22 +0000 (10:48 -0300)]     Allow FOR EACH ROW triggers on partitioned tables
  Previously, FOR EACH ROW triggers were not allowed in partitioned
 tables.  Now we allow AFTER triggers on them, and on trigger creation we
 cascade to create an identical trigger in each partition.  We also clone
 the triggers to each partition that is created or attached later. 
 This means that deferred unique keys are allowed on partitioned tables,
 too. 
 Author: Álvaro Herrera 
Reviewed-by: Peter Eisentraut, Simon Riggs, Amit Langote, Robert Haas,	Thomas Munro
 Discussion: https://postgr.es/m/
20171229225319.ajltgss2ojkfd3kp@alvherre.pgsql  
  Peter Eisentraut [Fri, 23 Mar 2018 12:42:25 +0000 (08:42 -0400)]     pg_resetwal: Add simple test suite
 
 Some subsequent patches will add to this, but to avoid conflicts, set up
 the basics separately.
 
 
    Andres Freund [Fri, 23 Mar 2018 05:15:51 +0000 (22:15 -0700)]     Adapt expression JIT to stdbool.h introduction.
  The LLVM JIT provider uses clang to synchronize types between normal C
 code and runtime generated code. Clang represents stdbool.h style
 booleans in return values & parameters differently from booleans
 stored in variables. 
 Thus the expression compilation code from 
2a0faed9d needs to be
 adapted to 
9a95a77d9. Instead of hardcoding i8 as the type for
 booleans (which already was wrong on some edge case platforms!), use
 postgres' notion of a boolean as used for storage and for parameters. 
 Per buildfarm animal xenodermus. 
 Author: Andres Freund  
  Peter Eisentraut [Fri, 23 Mar 2018 02:36:17 +0000 (22:36 -0400)]     Fix whitespace
 
 
    Peter Eisentraut [Fri, 23 Mar 2018 01:59:28 +0000 (21:59 -0400)]     Remove stdbool workaround in sepgsql
 
 Since we now use stdbool.h in c.h, this workaround breaks the build and
 is no longer necessary, so remove it.  (Technically, there could be
 platforms with a 4-byte bool in stdbool.h, in which case we would not
 include stdbool.h in c.h, and so the old problem that caused this
 workaround would reappear.  But this combination is not known to happen
 on the range of platforms where sepgsql can be built.)
 
 
    Peter Eisentraut [Fri, 23 Mar 2018 00:42:25 +0000 (20:42 -0400)]     Use stdbool.h if suitable
  Using the standard bool type provided by C allows some recent compilers
 and debuggers to give better diagnostics.  Also, some extension code and
 third-party headers are increasingly pulling in stdbool.h, so it's
 probably saner if everyone uses the same definition. 
 But PostgreSQL code is not prepared to handle bool of a size other than
 1, so we keep our own old definition if we encounter a stdbool.h with a
 bool of a different size.  (Among current build farm members, this only
 applies to old macOS versions on PowerPC.) 
 To check that the used bool is of the right size, add a static
 assertions about size of GinTernaryValue vs bool.  This is currently the
 only place that assumes that bool and char are of the same size. 
 Discussion: https://www.postgresql.org/message-id/flat/
3a0fe7e1-5ed1-414b-9230-
53bbc0ed1f49@2ndquadrant.com  
  Andres Freund [Tue, 20 Mar 2018 09:20:46 +0000 (02:20 -0700)]     Add expression compilation support to LLVM JIT provider.
  In addition to the interpretation of expressions (which back
 evaluation of WHERE clauses, target list projection, aggregates
 transition values etc) support compiling expressions to native code,
 using the infrastructure added in earlier commits. 
 To avoid duplicating a lot of code, only support emitting code for
 cases that are likely to be performance critical. For expression steps
 that aren't deemed that, use the existing interpreter. 
 The generated code isn't great - some architectural changes are
 required to address that. But this already yields a significant
 speedup for some analytics queries, particularly with WHERE clauses
 filtering a lot, or computing multiple aggregates. 
 Author: Andres Freund 
Tested-By: Thomas Munro Discussion: https://postgr.es/m/
20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de 
 Disable JITing for VALUES() nodes. 
 VALUES() nodes are only ever executed once. This is primarily helpful
 for debugging, when forcing JITing even for cheap queries. 
 Author: Andres Freund
 Discussion: https://postgr.es/m/
20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de  
  Andres Freund [Wed, 24 Jan 2018 07:20:02 +0000 (23:20 -0800)]     Add FIELDNO_* macro designating offset into structs required for JIT.
  For any interesting JIT target, fields inside structs need to be
 accessed. 
b96d550e contains infrastructure for syncing the definition
 of types between postgres C code and runtime code generation with
 LLVM. But that doesn't sync the number or names of fields inside
 structs, just the types (including padding etc). 
 One option would be to hardcode the offset numbers in the JIT code,
 but that'd be hard to keep in sync. Instead add macros indicating the
 field offset to the fields that need to be accessed. Not pretty, but
 manageable. 
 Author: Andres Freund
 Discussion: https://postgr.es/m/
20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de  
  Andres Freund [Mon, 5 Feb 2018 17:09:28 +0000 (09:09 -0800)]     Expand list of synchronized types and functions in LLVM JIT provider.
  Author: Andres Freund
 Discussion: https://postgr.es/m/
20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de  
  Tom Lane [Thu, 22 Mar 2018 21:33:10 +0000 (17:33 -0400)]     Improve style guideline compliance of assorted error-report messages.
  Per the project style guide, details and hints should have leading
 capitalization and end with a period.  On the other hand, errcontext should
 not be capitalized and should not end with a period.  To support well
 formatted error contexts in dblink, extend dblink_res_error() to take a
 format+arguments rather than a hardcoded string. 
 Daniel Gustafsson 
 Discussion: https://postgr.es/m/
B3C002C8-21A0-4F53-A06E-
8CAB29FCF295@yesql.se  
  Robert Haas [Thu, 22 Mar 2018 20:09:28 +0000 (16:09 -0400)]     Consider Parallel Append of partial paths for UNION [ALL].
 
 Without this patch, we can implement a UNION or UNION ALL as an
 Append where Gather appears beneath one or more of the Append
 branches, but this lets us put the Gather node on top, with
 a partial path for each relation underneath.
 
 There is considerably more work that could be done to improve
 planning in this area, but that will probably need to wait
 for a future release.
 
 Patch by me, reviewed and tested by Ashutosh Bapat and Rajkumar
 Raghuwanshi.
 
 Discussion: http://postgr.es/m/CA+TgmoaLRAOqHmMZx=ESM3VDEPceg+-XXZsRXQ8GtFJO_zbMSw@mail.gmail.com
 
 
    Tom Lane [Thu, 22 Mar 2018 19:47:29 +0000 (15:47 -0400)]     Sync up our various ways of estimating pg_class.reltuples.
  VACUUM thought that reltuples represents the total number of tuples in
 the relation, while ANALYZE counted only live tuples.  This can cause
 "flapping" in the value when background vacuums and analyzes happen
 separately.  The planner's use of reltuples essentially assumes that
 it's the count of live (visible) tuples, so let's standardize on having
 it mean live tuples. 
 Another issue is that the definition of "live tuple" isn't totally clear;
 what should be done with INSERT_IN_PROGRESS or DELETE_IN_PROGRESS tuples?
 ANALYZE's choices in this regard are made on the assumption that if the
 originating transaction commits at all, it will happen after ANALYZE
 finishes, so we should ignore the effects of the in-progress transaction
 --- unless it is our own transaction, and then we should count it.
 Let's propagate this definition into VACUUM, too. 
 Likewise propagate this definition into CREATE INDEX, and into
 contrib/pgstattuple's pgstattuple_approx() function. 
 Tomas Vondra, reviewed by Haribabu Kommi, some corrections by me 
 Discussion: https://postgr.es/m/
16db4468-edfa-830a-f921-
39a50498e77e@2ndquadrant.com  
  Andres Freund [Thu, 22 Mar 2018 18:45:07 +0000 (11:45 -0700)]     Basic planner and executor integration for JIT.
  This adds simple cost based plan time decision about whether JIT
 should be performed. jit_above_cost, jit_optimize_above_cost are
 compared with the total cost of a plan, and if the cost is above them
 JIT is performed / optimization is performed respectively. 
 For that PlannedStmt and EState have a jitFlags (es_jit_flags) field
 that stores information about what JIT operations should be performed. 
 EState now also has a new es_jit field, which can store a
 JitContext. When there are no errors the context is released in
 standard_ExecutorEnd(). 
 It is likely that the default values for jit_[optimize_]above_cost
 will need to be adapted further, but in my test these values seem to
 work reasonably. 
 Author: Andres Freund, with feedback by Peter Eisentraut
 Discussion: https://postgr.es/m/
20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de  
  Andres Freund [Thu, 22 Mar 2018 18:10:33 +0000 (11:10 -0700)]     Add helpers for emitting LLVM IR.
  These basically just help to make code a bit more concise and pgindent
 proof. 
 Author: Andres Freund
 Discussion: https://postgr.es/m/
20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de  
  Andres Freund [Thu, 22 Mar 2018 18:07:55 +0000 (11:07 -0700)]     Debugging and profiling support for LLVM JIT provider.
  This currently requires patches to the LLVM codebase to be
 effective (submitted upstream), the GUCs are available without those
 patches however. 
 Author: Andres Freund
 Discussion: https://postgr.es/m/
20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de  
  Andres Freund [Thu, 22 Mar 2018 18:05:22 +0000 (11:05 -0700)]     Support for optimizing and emitting code in LLVM JIT provider.
  This commit introduces the ability to actually generate code using
 LLVM. In particular, this adds: 
 - Ability to emit code both in heavily optimized and largely
   unoptimized fashion
 - Batching facility to allow functions to be defined in small
   increments, but optimized and emitted in executable form in larger
   batches (for performance and memory efficiency)
 - Type and function declaration synchronization between runtime
   generated code and normal postgres code. This is critical to be able
   to access struct fields etc.
 - Developer oriented jit_dump_bitcode GUC, for inspecting / debugging
   the generated code.
 - per JitContext statistics of number of functions, time spent
   generating code, optimizing, and emitting it.  This will later be
   employed for EXPLAIN support. 
 This commit doesn't yet contain any code actually generating
 functions. That'll follow in later commits. 
 Documentation for GUCs added, and for JIT in general, will be added in
 later commits. 
 Author: Andres Freund, with contributions by Pierre Ducroquet 
Testing-By: Thomas Munro, Peter Eisentraut Discussion: https://postgr.es/m/
20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de  
  Robert Haas [Thu, 22 Mar 2018 17:49:38 +0000 (13:49 -0400)]     Avoid creating a TOAST table for a partitioned table.
  It's useless. 
 Amit Langote 
 Discussion: http://postgr.es/m/
b4c9dee6-d134-49b8-79c4-
07fbd7c3b898@lab.ntt.co.jp  
  Robert Haas [Thu, 22 Mar 2018 17:36:14 +0000 (13:36 -0400)]     Fix typo in comment.
  Michael Paquier 
 Discussion: http://postgr.es/m/
20180205071404.GB17337@paquier.xyz  
  Robert Haas [Thu, 22 Mar 2018 17:25:59 +0000 (13:25 -0400)]     doc: Update parallel join documentation for Parallel Shared Hash.
 
 Thomas Munro
 
 Discussion: http://postgr.es/m/CAEepm=3XdL=+bn3=WQVCCT5wwfAEv-4onKpk+XQZdwDXv6etzA@mail.gmail.com
 
 
    Tom Lane [Thu, 22 Mar 2018 17:23:47 +0000 (13:23 -0400)]     Fix tuple counting in SP-GiST index build.
  Count the number of tuples in the index honestly, instead of assuming
 that it's the same as the number of tuples in the heap.  (It might be
 different if the index is partial.) 
 Back-patch to all supported versions. 
 Tomas Vondra 
 Discussion: https://postgr.es/m/
3b3d8eac-c709-0d25-088e-
b98339a1b28a@2ndquadrant.com  
  Robert Haas [Thu, 22 Mar 2018 17:15:03 +0000 (13:15 -0400)]     Call pgstat_report_activity() in parallel CREATE INDEX workers.
  Also set debug_query_string. 
 Oversight in commit 
9da0cc35284bdbe8d442d732963303ff0e0a40bc  Peter Geoghegan, per a report by Phil Florent. 
 Discussion: https://postgr.es/m/CAH2-Wzmf-34hD4n40uTuE-ZY9P5c%2BmvhFbCdQfN%3DKrKiVm3j3A%40mail.gmail.com  
  Tom Lane [Thu, 22 Mar 2018 17:13:58 +0000 (13:13 -0400)]     Fix errors in contrib/bloom index build.
  Count the number of tuples in the index honestly, instead of assuming
 that it's the same as the number of tuples in the heap.  (It might be
 different if the index is partial.) 
 Fix counting of tuples in current index page, too.  This error would
 have led to failing to write out the final page of the index if it
 contained exactly one tuple, so that the last tuple of the relation
 would not get indexed. 
 Back-patch to 9.6 where contrib/bloom was added. 
 Tomas Vondra and Tom Lane 
 Discussion: https://postgr.es/m/
3b3d8eac-c709-0d25-088e-
b98339a1b28a@2ndquadrant.com  
  Robert Haas [Thu, 22 Mar 2018 16:49:48 +0000 (12:49 -0400)]     Implement partition-wise grouping/aggregation.
 
 If the partition keys of input relation are part of the GROUP BY
 clause, all the rows belonging to a given group come from a single
 partition.  This allows aggregation/grouping over a partitioned
 relation to be broken down * into aggregation/grouping on each
 partition.  This should be no worse, and often better, than the normal
 approach.
 
 If the GROUP BY clause does not contain all the partition keys, we can
 still perform partial aggregation for each partition and then finalize
 aggregation after appending the partial results.  This is less certain
 to be a win, but it's still useful.
 
 Jeevan Chalke, Ashutosh Bapat, Robert Haas.  The larger patch series
 of which this patch is a part was also reviewed and tested by Antonin
 Houska, Rajkumar Raghuwanshi, David Rowley, Dilip Kumar, Konstantin
 Knizhnik, Pascal Legrand, and Rafia Sabih.
 
 Discussion: http://postgr.es/m/CAM2+6=V64_xhstVHie0Rz=KPEQnLJMZt_e314P0jaT_oJ9MR8A@mail.gmail.com
 
 
    Teodor Sigaev [Thu, 22 Mar 2018 16:45:34 +0000 (19:45 +0300)]     Add conditional.c to libpgfeutils for MSVC build
  conditional.c was moved in 
f67b113ac62777d18cd20d3c4d05be964301b936 commit
 but forgotten to add to Windows build system. 
 I don't have a Windows box, so blind attempt.  
  Teodor Sigaev [Thu, 22 Mar 2018 16:38:54 +0000 (19:38 +0300)]     UINT64CONST'fy long constants in pgbench
  In commit 
e51a04840a1c45db101686bef0b7025d5014c74b it was missed 64-bit
 constants, wrap them with UINT64CONST(). 
 Per buildfarm member dromedary and gripe from Tom Lane  
  Teodor Sigaev [Thu, 22 Mar 2018 14:42:03 +0000 (17:42 +0300)]     Add \if support to pgbench
  Patch adds \if to pgbench as it done for psql. Implementation shares condition
 stack code with psql, so, this code is moved to fe_utils directory. 
 Author: Fabien COELHO with minor editorization by me
 Review by: Vik Fearing, Fedor Sigaev
 Discussion: https://www.postgresql.org/message-id/flat/alpine.DEB.2.20.
1711252200190.28523@lancre  
  Dean Rasheed [Thu, 22 Mar 2018 09:37:36 +0000 (09:37 +0000)]     Improve ANALYZE's strategy for finding MCVs.
 
 Previously, a value was included in the MCV list if its frequency was
 25% larger than the estimated average frequency of all nonnull values
 in the table.  For uniform distributions, that can lead to values
 being included in the MCV list and significantly overestimated on the
 basis of relatively few (sometimes just 2) instances being seen in the
 sample.  For non-uniform distributions, it can lead to too few values
 being included in the MCV list, since the overall average frequency
 may be dominated by a small number of very common values, while the
 remaining values may still have a large spread of frequencies, causing
 both substantial overestimation and underestimation of the remaining
 values.  Furthermore, increasing the statistics target may have little
 effect because the overall average frequency will remain relatively
 unchanged.
 
 Instead, populate the MCV list with the largest set of common values
 that are statistically significantly more common than the average
 frequency of the remaining values.  This takes into account the
 variance of the sample counts, which depends on the counts themselves
 and on the proportion of the table that was sampled.  As a result, it
 constrains the relative standard error of estimates based on the
 frequencies of values in the list, reducing the chances of too many
 values being included.  At the same time, it allows more values to be
 included, since the MCVs need only be more common than the remaining
 non-MCVs, rather than the overall average.  Thus it tends to produce
 fewer MCVs than the previous code for uniform distributions, and more
 for non-uniform distributions, reducing estimation errors in both
 cases.  In addition, the algorithm responds better to increasing the
 statistics target, allowing more values to be included in the MCV list
 when more of the table is sampled.
 
 Jeff Janes, substantially modified by me. Reviewed by John Naylor and
 Tomas Vondra.
 
 Discussion: https://postgr.es/m/CAMkU=1yvdGvW9TmiLAhz2erFnvnPFYHbOZuO+a=4DVkzpuQ2tw@mail.gmail.com
 
 
    Andres Freund [Thu, 22 Mar 2018 02:44:17 +0000 (19:44 -0700)]     Add file containing extensions of the LLVM C API.
  Author: Andres Freund
 Discussion: https://postgr.es/m/
20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de  
  Andres Freund [Thu, 22 Mar 2018 02:28:28 +0000 (19:28 -0700)]     Basic JIT provider and error handling infrastructure.
  This commit introduces: 
 1) JIT provider abstraction, which allows JIT functionality to be
    implemented in separate shared libraries. That's desirable because
    it allows to install JIT support as a separate package, and because
    it allows experimentation with different forms of JITing.
 2) JITContexts which can be, using functions introduced in follow up
    commits, used to emit JITed functions, and have them be cleaned up
    on error.
 3) The outline of a LLVM JIT provider, which will be fleshed out in
    subsequent commits. 
 Documentation for GUCs added, and for JIT in general, will be added in
 later commits. 
 Author: Andres Freund, with architectural input from Jeff Davis
 Discussion: https://postgr.es/m/
20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de  
  Andres Freund [Thu, 22 Mar 2018 01:41:08 +0000 (18:41 -0700)]     Fix typo in BITCODE_CXXFLAGS assignment.
  Typoed-In: 
5b2526c83832e Reported-By: Catalin Iacob   Andres Freund [Thu, 22 Mar 2018 01:40:23 +0000 (18:40 -0700)]     Empty CXXFLAGS inherited from autoconf.
  We do the same for CFLAGS.  This was an omission in 
6869b4f25.  
Reported-By: Catalin Iacob   Tom Lane [Thu, 22 Mar 2018 00:11:07 +0000 (20:11 -0400)]     Prevent extensions from creating custom GUCs that are GUC_LIST_QUOTE.
  Pending some solution for the problems noted in commit 
742869946,
 disallow dynamic creation of GUC_LIST_QUOTE variables. 
 If there are any extensions out there using this feature, they'd not
 be happy for us to start enforcing this rule in minor releases, so
 this is a HEAD-only change.  The previous commit didn't make things
 any worse than they already were for such cases. 
 Discussion: https://postgr.es/m/
20180111064900.GA51030@paquier.xyz  
  Tom Lane [Thu, 22 Mar 2018 00:03:28 +0000 (20:03 -0400)]     Fix mishandling of quoted-list GUC values in pg_dump and ruleutils.c.
  Code that prints out the contents of setconfig or proconfig arrays in
 SQL format needs to handle GUC_LIST_QUOTE variables differently from
 other ones, because for those variables, flatten_set_variable_args()
 already applied a layer of quoting.  The value can therefore safely
 be printed as-is, and indeed must be, or flatten_set_variable_args()
 will muck it up completely on reload.  For all other GUC variables,
 it's necessary and sufficient to quote the value as a SQL literal. 
 We'd recognized the need for this long ago, but mis-analyzed the
 need slightly, thinking that all GUC_LIST_INPUT variables needed
 the special treatment.  That's actually wrong, since a valid value
 of a LIST variable might include characters that need quoting,
 although no existing variables accept such values. 
 More to the point, we hadn't made any particular effort to keep the
 various places that deal with this up-to-date with the set of variables
 that actually need special treatment, meaning that we'd do the wrong
 thing with, for example, temp_tablespaces values.  This affects dumping
 of SET clauses attached to functions, as well as ALTER DATABASE/ROLE SET
 commands. 
 In ruleutils.c we can fix it reasonably honestly by exporting a guc.c
 function that allows discovering the flags for a given GUC variable.
 But pg_dump doesn't have easy access to that, so continue the old method
 of having a hard-wired list of affected variable names.  At least we can
 fix it to have just one list not two, and update the list to match
 current reality. 
 A remaining problem with this is that it only works for built-in
 GUC variables.  pg_dump's list obvious knows nothing of third-party
 extensions, and even the "ask guc.c" method isn't bulletproof since
 the relevant extension might not be loaded.  There's no obvious
 solution to that, so for now, we'll just have to discourage extension
 authors from inventing custom GUCs that need GUC_LIST_QUOTE. 
 This has been busted for a long time, so back-patch to all supported
 branches. 
 Michael Paquier and Tom Lane, reviewed by Kyotaro Horiguchi and
 Pavel Stehule 
 Discussion: https://postgr.es/m/
20180111064900.GA51030@paquier.xyz  
  Tom Lane [Wed, 21 Mar 2018 22:30:46 +0000 (18:30 -0400)]     Improve predtest.c's handling of cases with NULL-constant inputs.
  Currently, if operator_predicate_proof() is given an operator clause like
 "something op NULL", it just throws up its hands and reports it can't prove
 anything.  But we can often do better than that, if the operator is strict,
 because then we know that the clause returns NULL overall.  Depending on
 whether we're trying to prove or refute something, and whether we need
 weak or strong semantics for NULL, this may be enough to prove the
 implication, especially when we rely on the standard rule that "false
 implies anything".  In particular, this lets us do something useful with
 questions like "does X IN (1,3,5,NULL) imply X <= 5?"  The null entry
 in the IN list can effectively be ignored for this purpose, but the
 proof rules were not previously smart enough to deduce that. 
 This patch is by me, but it owes something to previous work by
 Amit Langote to try to solve problems of the form mentioned.
 Thanks also to Emre Hasegeli and Ashutosh Bapat for review. 
 Discussion: https://postgr.es/m/
3bad48fc-f257-c445-feeb-
8a2b2fb622ba@lab.ntt.co.jp  
  Tom Lane [Wed, 21 Mar 2018 18:57:12 +0000 (14:57 -0400)]     Change oddly-chosen OID allocation.
  I noticed while fooling with John Naylor's bootstrap-data patch that we had
 one high-numbered manually assigned OID, 8888, which evidently came from a
 submission that the committer didn't bother to bring into line with usual
 OID allocation practices before committing.  That's a bad idea, because it
 creates a hazard for other patches that may be temporarily using high OID
 numbers.  Change it to something more in line with what we usually do. 
 This evidently dates to commit 
abb173392.  It's too late to change it
 in released branches, but we can fix it in HEAD.  
  Peter Eisentraut [Wed, 21 Mar 2018 16:14:53 +0000 (12:14 -0400)]     pg_controldata: Prevent division-by-zero errors
 
 If the control file is corrupted and specifies the WAL segment size
 to be 0 bytes, calculating the latest checkpoint's REDO WAL file
 will fail with a division-by-zero error.  Show it as "???" instead.
 
 Also reword the warning message a bit and send it to stdout, like the
 other pre-existing warning messages.
 
 Add some tests for dealing with a corrupted pg_control file.
 
 Author: Nathan Bossart <bossartn@amazon.com>, tests by me
 
 
    Alvaro Herrera [Wed, 21 Mar 2018 15:03:35 +0000 (12:03 -0300)]     Fix relcache handling of the 'default' partition
  My commit 
4dba331cb3dc that moved around CommandCounterIncrement calls
 in partitioning DDL code unearthed a problem with the relcache handling
 for the 'default' partition: the construction of a correct relcache
 entry for the partitioned table was at the mercy of lack of CCI calls in
 non-trivial amounts of code.  This was prone to creating problems later
 on, as the code develops.  This was visible as a test failure in a
 compile with RELCACHE_FORCE_RELASE (buildfarm member prion). 
 The problem is that after the mentioned commit it was possible to create
 a relcache entry that had incomplete information regarding the default
 partition because I introduced a CCI between adding the catalog entries
 for the default partition (StorePartitionBound) and the update of
 pg_partitioned_table entry for its parent partitioned table
 (update_default_partition_oid).  It seems the best fix is to move the
 latter so that it occurs inside the former; the purposeful lack of
 intervening CCI should be more obvious, and harder to break. 
 I also remove a check in RelationBuildPartitionDesc that returns NULL if
 the key is not set.  I couldn't find any place that needs this hack
 anymore; probably it was required because of bugs that have since been
 fixed. 
 Fix a few typos I noticed while reviewing the code involved. 
 Discussion: https://postgr.es/m/
20180320182659.nyzn3vqtjbbtfgwq@alvherre.pgsql  
  Teodor Sigaev [Wed, 21 Mar 2018 15:01:23 +0000 (18:01 +0300)]     Add general purpose hasing functions to pgbench.
  Hashing function is useful for simulating real-world workload in test like
 WEB workload, as an example - YCSB benchmarks. 
 Author: Ildar Musin with minor editorization by me
 Reviewed by: Fabien Coelho, me
 Discussion: https://www.postgresql.org/message-id/flat/
0e8bd39e-dfcd-2879-f88f-
272799ad7ef2@postgrespro.ru  
  Tatsuo Ishii [Wed, 21 Mar 2018 14:08:43 +0000 (23:08 +0900)]     Fix typo.
 
 Patch by me.
 
 
    Peter Eisentraut [Wed, 21 Mar 2018 13:13:24 +0000 (09:13 -0400)]     Handle heap rewrites even better in logical decoding
  Logical decoding should not publish anything about tables created as
 part of a heap rewrite during DDL.  Those tables don't exist externally,
 so consumers of logical decoding cannot do anything sensible with that
 information.  In 
ab28feae2bd3d4629bd73ae3548e671c57d785f0, we worked
 around this for built-in logical replication, but that was hack. 
 This is a more proper fix: We mark such transient heaps using the new
 field pg_class.relwrite, linking to the original relation OID.  By
 default, we ignore them in logical decoding before they get to the
 output plugin.  Optionally, a plugin can register their interest in
 getting such changes, if they handle DDL specially, in which case the
 new field will help them get information about the actual table.  
Reviewed-by: Craig Ringer <craig@2ndquadrant.com>   Teodor Sigaev [Wed, 21 Mar 2018 11:57:42 +0000 (14:57 +0300)]     Add strict_word_similarity to pg_trgm module
 
 strict_word_similarity is similar to existing word_similarity function but
 it takes into account word boundaries to compute similarity.
 
 Author: Alexander Korotkov
 Review by: David Steele, Liudmila Mantrova, me
 Discussion: https://www.postgresql.org/message-id/flat/CY4PR17MB13207ED8310F847CF117EED0D85A0@CY4PR17MB1320.namprd17.prod.outlook.com
 
 
    Peter Eisentraut [Wed, 21 Mar 2018 11:43:29 +0000 (07:43 -0400)]     Add configure tests for stdbool.h and sizeof bool
  This will allow us to assess how many platforms have bool with a size
 other than 1, which will help us decide how to go forward with using
 stdbool.h. 
 Discussion: https://www.postgresql.org/message-id/flat/
3a0fe7e1-5ed1-414b-9230-
53bbc0ed1f49@2ndquadrant.com  
  Andrew Gierth [Wed, 21 Mar 2018 10:42:04 +0000 (10:42 +0000)]     Repair crash with unsortable grouping sets.
 
 If there were multiple grouping sets, none of them empty, all of which
 were unsortable, then an oversight in consider_groupingsets_paths led
 to a null pointer dereference. Fix, and add a regression test for this
 case.
 
 Per report from Dang Minh Huong, though I didn't use their patch.
 
 Backpatch to 10.x where hashed grouping sets were added.
 
 
    Teodor Sigaev [Wed, 21 Mar 2018 11:35:56 +0000 (14:35 +0300)]     Rework word_similarity documentation, make it close to actual algorithm.
  word_similarity before claimed as returning similarity of closest word in
 string, but, actually it returns similarity of substring. Also fix mistyped
 comments. 
 Author: Alexander Korotkov
 Review by: David Steele, Liudmila Mantrova
 Discussionis:
 https://www.postgresql.org/message-id/flat/CY4PR17MB13207ED8310F847CF117EED0D85A0@CY4PR17MB1320.namprd17.prod.outlook.com
 https://www.postgresql.org/message-id/flat/
f43b242d-000c-f4c8-cb8b-
d37e9752cd93%40postgrespro.ru  
  Peter Eisentraut [Wed, 21 Mar 2018 11:27:26 +0000 (07:27 -0400)]     doc: Small wording improvement
 
 
    Andres Freund [Wed, 21 Mar 2018 00:32:21 +0000 (17:32 -0700)]     Handle EEOP_FUNCEXPR_[STRICT_]FUSAGE out of line.
 
 This isn't a very common op, and it doesn't seem worth duplicating for
 JIT.
 
 Author: Andres Freund
 
 
    Andres Freund [Wed, 21 Mar 2018 00:26:25 +0000 (17:26 -0700)]     Add configure infrastructure (--with-llvm) to enable LLVM support.
  LLVM will be used for *optional* Just-in-time compilation
 support. This commit just adds the configure infrastructure that
 detects LLVM. 
 No documentation has been added for the --with-llvm flag, that'll be
 added after the actual supporting code has been added. 
 Author: Andres Freund
 Discussion: https://postgr.es/m/
20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de  
  Andres Freund [Tue, 20 Mar 2018 22:41:15 +0000 (15:41 -0700)]     Add C++ support to configure.
  This is an optional dependency. It'll be used for the upcoming LLVM
 based just in time compilation support, which needs to wrap a few LLVM
 C++ APIs so they're accessible from C.. 
 For now test for C++ compilers unconditionally, without failing if not
 present, to ensure wide buildfarm coverage. If we're bothered by the
 additional test times (which are quite short) or verbosity, we can
 later make the tests conditional on --with-llvm. 
 Author: Andres Freund
 Discussion: https://postgr.es/m/
20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de  
  Peter Eisentraut [Tue, 20 Mar 2018 20:44:52 +0000 (16:44 -0400)]     Attempt to fix build with unusual OpenSSL versions
  Since 
e3bdb2d92600ed45bd46aaf48309a436a9628218, libpq failed to build on
 some platforms because they did not have SSL_clear_options().  Although
 mainline OpenSSL introduced SSL_clear_options() after
 SSL_OP_NO_COMPRESSION, so the code should have built fine, at least an
 old NetBSD version (build farm "coypu" NetBSD 5.1 gcc 4.1.3 PR-
20080704 powerpc) has SSL_OP_NO_COMPRESSION but no SSL_clear_options(). 
 So add a configure check for SSL_clear_options().  If we don't find it,
 skip the call.  That means on such a platform one cannot *enable* SSL
 compression if the built-in default is off, but that seems an unlikely
 combination anyway and not very interesting in practice.  
  Andres Freund [Tue, 20 Mar 2018 19:58:08 +0000 (12:58 -0700)]     Add PGAC_PROG_VARCC_VARFLAGS_OPT autoconf macro.
  The new macro allows to test flags for different compilers and to
 store them in different CFLAG like variables.  The existing
 PGAC_PROG_CC_CFLAGS_OPT and PGAC_PROG_CC_VAR_OPT are changed to be
 just wrappers around the new function. 
 This'll be used by the upcoming LLVM support, to separately detect
 capabilities used by clang, when generating bitcode. 
 Author: Andres Freund
 Discussion: https://postgr.es/m/
20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de  
  Tom Lane [Tue, 20 Mar 2018 19:16:16 +0000 (15:16 -0400)]     Make configure check for a couple more Perl modules for --enable-tap-tests.
  Red Hat's notion of a basic Perl installation doesn't include Test::More
 or Time::HiRes, and reportedly some Debian installs also omit Time::HiRes.
 Check for those during configure to spare the user the pain of digging
 through check-world output to find out what went wrong.  While we're at it,
 we should also check the version of Test::More, since TestLib.pm requires
 at least 0.87. 
 In principle this could be back-patched, but it's probably not necessary. 
 Discussion: https://postgr.es/m/516.
1521475003@sss.pgh.pa.us  
  Robert Haas [Tue, 20 Mar 2018 15:33:44 +0000 (11:33 -0400)]     Don't pass the grouping target around unnecessarily.
  Since commit 
4f15e5d09de276fb77326be5567dd9796008ca2e made grouped_rel
 set reltarget, a variety of other functions can just get it from
 grouped_rel instead of having to pass it around explicitly.  Simplify
 accordingly. 
 Patch by me, reviewed by Ashutosh Bapat. 
 Discussion: http://postgr.es/m/CA+TgmoZ+ZJTVad-=vEq393N99KTooxv9k7M+z73qnTAqkb49BQ@mail.gmail.com  
  Tom Lane [Tue, 20 Mar 2018 15:34:12 +0000 (11:34 -0400)]     Doc: typo fix, "PG_" should be "TG_" here.
  Too much PG on the brain in commit 
769159fd3, evidently.
 Noted by marcelhuberfoo@gmail.com. 
 Discussion: https://postgr.es/m/
152154834496.11957.
17112112802418832865@wrigleys.postgresql.org  
  Robert Haas [Tue, 20 Mar 2018 15:31:06 +0000 (11:31 -0400)]     Determine grouping strategies in create_grouping_paths.
 
 Partition-wise aggregate will call create_ordinary_grouping_paths
 multiple times and we don't want to redo this work every time; have
 the caller do it instead and pass the details down.
 
 Patch by me, reviewed by Ashutosh Bapat.
 
 Discussion: http://postgr.es/m/CA+TgmoY7VYYn9a7YHj1nJL6zj6BkHmt4K-un9LRmXkyqRZyynA@mail.gmail.com
 
 
    Robert Haas [Tue, 20 Mar 2018 15:18:04 +0000 (11:18 -0400)]     Defer creation of partially-grouped relation until it's needed.
 
 This avoids unnecessarily creating a RelOptInfo for which we have no
 actual need.  This idea is from Ashutosh Bapat, who wrote a very
 different patch to accomplish a similar goal.  It will be more
 important if and when we get partition-wise aggregate, since then
 there could be many partially grouped relations all of which could
 potentially be unnecessary.  In passing, this sets the grouping
 relation's reltarget, which wasn't done previously but makes things
 simpler for this refactoring.
 
 Along the way, adjust things so that add_paths_to_partial_grouping_rel,
 now renamed create_partial_grouping_paths, does not perform the Gather
 or Gather Merge steps to generate non-partial paths from partial
 paths; have the caller do it instead.  This is again for the
 convenience of partition-wise aggregate, which wants to inject
 additional partial paths are created and before we decide which ones
 to Gather/Gather Merge.  This might seem like a separate change, but
 it's actually pretty closely entangled; I couldn't really see much
 value in separating it and having to change some things twice.
 
 Patch by me, reviewed by Ashutosh Bapat.
 
 Discussion: http://postgr.es/m/CA+TgmoZ+ZJTVad-=vEq393N99KTooxv9k7M+z73qnTAqkb49BQ@mail.gmail.com
 
 
    Alvaro Herrera [Tue, 20 Mar 2018 14:19:41 +0000 (11:19 -0300)]     Fix CommandCounterIncrement in partition-related DDL
  It makes sense to do the CCIs in the places that do catalog updates,
 rather than before the places that error out because the former ones
 fail to do it.  In particular, it looks like StorePartitionBound() and
 IndexSetParentIndex() ought to make their own CCIs. 
 Per review comments from Peter Eisentraut for row-level triggers on
 partitioned tables. 
 Discussion: https://postgr.es/m/
20171229225319.ajltgss2ojkfd3kp@alvherre.pgsql  
  Tom Lane [Tue, 20 Mar 2018 03:59:17 +0000 (23:59 -0400)]     Prevent query-lifespan memory leakage of SP-GiST traversal values.
  The original coding of the SP-GiST scan traversalValue feature (commit 
ccd6eb49a) arranged for traversal values to be stored in the query's main
 executor context.  That's fine if there's only one index scan per query,
 but if there are many, we have a memory leak as successive scans create
 new traversal values.  Fix it by creating a separate memory context for
 traversal values, which we can reset during spgrescan().  Back-patch
 to 9.6 where this code was introduced. 
 In principle, adding the traversalCxt field to SpGistScanOpaqueData
 creates an ABI break in the back branches.  But I (tgl) have little
 sympathy for extensions including spgist_private.h, so I'm not very
 worried about that.  Alternatively we could stick the new field at the
 end of the struct in back branches, but that has its own downsides. 
 Anton Dignös, reviewed by Alexander Kuzmenkov 
 Discussion: https://postgr.es/m/CALNdv1jb6y2Te-m8xHLxLX12RsBmZJ1f4hESX7J0HjgyOhA9eA@mail.gmail.com