1. 22 Feb, 2018 8 commits
    • Peter Eisentraut's avatar
      Update gratuitous use of MD5 in documentation · 0db2fc98
      Peter Eisentraut authored
      It seems some people are bothered by the outdated MD5 appearing in
      example code.  So replace it with more modern alternatives or by
      a different example function.
      Reported-by: default avatarJon Wolski <jonwolski@gmail.com>
      0db2fc98
    • Peter Eisentraut's avatar
      Add user-callable SHA-2 functions · 10cfce34
      Peter Eisentraut authored
      Add the user-callable functions sha224, sha256, sha384, sha512.  We
      already had these in the C code to support SCRAM, but there was no test
      coverage outside of the SCRAM tests.  Adding these as user-callable
      functions allows writing some tests.  Also, we have a user-callable md5
      function but no more modern alternative, which led to wide use of md5 as
      a general-purpose hash function, which leads to occasional complaints
      about using md5.
      
      Also mark the existing md5 functions as leak-proof.
      Reviewed-by: default avatarMichael Paquier <michael@paquier.xyz>
      10cfce34
    • Robert Haas's avatar
      Be lazier about partition tuple routing. · edd44738
      Robert Haas authored
      It's not necessary to fully initialize the executor data structures
      for partitions to which no tuples are ever routed.  Consider, for
      example, an INSERT statement that inserts only one row: it only cares
      about the partition to which that one row is routed.  The new function
      ExecInitPartitionInfo performs the initialization in question only
      when a particular partition is about to receive a tuple. This includes
      creating, validating, and saving a pointer to the ResultRelInfo,
      setting up for speculative insertions, translating WCOs and
      initializing the resulting expressions, translating returning lists
      and building the appropriate projection information, and setting up a
      tuple conversion map.
      
      One thing that's not deferred is locking the child partitions; that
      seems desirable but would need more thought.  Still, testing shows
      that this makes single-row inserts significantly faster on a table
      with many partitions without harming the bulk-insert case.
      
      Amit Langote, reviewed by Etsuro Fujita, with a few changes by me
      
      Discussion: http://postgr.es/m/8975331d-d961-cbdd-f862-fdd3d97dc2d0@lab.ntt.co.jp
      edd44738
    • Robert Haas's avatar
      Remove extra word from comment. · 810e7e26
      Robert Haas authored
      Etsuro Fujita
      
      Discussion: http://postgr.es/m/5A8EAF74.5010905@lab.ntt.co.jp
      810e7e26
    • Robert Haas's avatar
      postgres_fdw: Fix interaction of PHVs with child joins. · 84cb51b4
      Robert Haas authored
      Commit f49842d1 introduced the
      concept of a child join, but did not update this code accordingly.
      
      Ashutosh Bapat, with cosmetic changes by me
      
      Discussion: http://postgr.es/m/CAFjFpRf=J_KPOtw+bhZeURYkbizr8ufSaXg6gPEF6DKpgH-t6g@mail.gmail.com
      84cb51b4
    • Robert Haas's avatar
      Avoid another valgrind complaint about write() of uninitalized bytes. · de6428af
      Robert Haas authored
      Peter Geoghegan, per buildfarm member skink and Andres Freund
      
      Discussion: http://postgr.es/m/20180221053426.gp72lw67yfpzkw7a@alap3.anarazel.de
      de6428af
    • Robert Haas's avatar
      Try to stabilize EXPLAIN output in partition_check test. · 9a5c4f58
      Robert Haas authored
      Commit 7d8ac981 adjusted these
      tests in the hope of preserving the plan shape, but I failed to
      notice that the three partitions were, on my local machine, choosing
      two different plan shapes.  This is probably related to the fact
      that all three tables have exactly the same row count.  Try to
      improve the situation by making pht1_e about half as large as
      the other two.
      
      Per Tom Lane and the buildfarm.
      
      Discussion: http://postgr.es/m/25380.1519277713@sss.pgh.pa.us
      9a5c4f58
    • Robert Haas's avatar
      Charge cpu_tuple_cost * 0.5 for Append and MergeAppend nodes. · 7d8ac981
      Robert Haas authored
      Previously, Append didn't charge anything at all, and MergeAppend
      charged only cpu_operator_cost, about half the value used here.  This
      change might make MergeAppend plans slightly more likely to be chosen
      than before, since this commit increases the assumed cost for Append
      -- with default values -- by 0.005 per tuple but MergeAppend by only
      0.0025 per tuple.  Since the comparisons required by MergeAppend are
      costed separately, it's not clear why MergeAppend needs to be
      otherwise more expensive than Append, so hopefully this is OK.
      
      Prior to partition-wise join, it didn't really matter whether or not
      an Append node had any cost of its own, because every plan had to use
      the same number of Append or MergeAppend nodes and in the same places.
      Only the relative cost of Append vs. MergeAppend made a difference.
      Now, however, it is possible to avoid some of the Append nodes using a
      partition-wise join, so it's worth making an effort.  Pending patches
      for partition-wise aggregate care too, because an Append of Aggregate
      nodes will incur the Append overhead fewer times than an Aggregate
      over an Append.  Although in most cases this change will favor the use
      of partition-wise techniques, it does the opposite when the join
      cardinality is greater than the sum of the input cardinalities.  Since
      this situation arises in an existing regression test, I [rhaas]
      adjusted it to keep the overall plan shape approximately the same.
      
      Jeevan Chalke, per a suggestion from David Rowley.  Reviewed by
      Ashutosh Bapat.  Some changes by me.  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, Rafia Sabih, and me.
      
      Discussion: http://postgr.es/m/CAKJS1f9UXdk6ZYyqbJnjFO9a9hyHKGW7B=ZRh-rxy9qxfPA5Gw@mail.gmail.com
      7d8ac981
  2. 21 Feb, 2018 2 commits
    • Tom Lane's avatar
      Repair pg_upgrade's failure to preserve relfrozenxid for matviews. · 38b41f18
      Tom Lane authored
      This oversight led to data corruption in matviews, manifesting as
      "could not access status of transaction" before our most recent releases,
      and "found xmin from before relfrozenxid" errors since then.
      
      The proximate cause of the problem seems to have been confusion between
      the task of preserving dropped-column status and the task of preserving
      frozenxid status.  Those are required for distinct sets of relkinds,
      and the reasoning was entirely undocumented in the source code.  In hopes
      of forestalling future errors of the same kind, try to improve the
      commentary in this area.
      
      In passing, also improve the remarkably unhelpful comments around
      pg_upgrade's set_frozenxids().  That's not actually buggy AFAICS,
      but good luck figuring out what it does from the old comments.
      
      Per report from Claudio Freire.  It appears that bug #14852 from Alexey
      Ermakov is an earlier report of the same issue, and there may be other
      cases that we failed to identify at the time.
      
      Patch by me based on analysis by Andres Freund.  The bug dates back
      to the introduction of matviews, so back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/CAGTBQpbrY9CdRGGhyBZ9yqY4jWaGC85rUF4X+R7d-aim=mBNsw@mail.gmail.com
      Discussion: https://postgr.es/m/20171013115320.28049.86457@wrigleys.postgresql.org
      38b41f18
    • Andres Freund's avatar
      Blindly attempt to adapt sepgsql regression tests. · 29d432e4
      Andres Freund authored
      Commit bf6c614a broke the sepgsql test
      due to a new invocation of the function access hook during grouping
      equal initialization.
      
      The new behaviour seems at least as correct as the old one, so try
      adapt the tests. As I've no working sepgsql setup here, this is just
      going from buildfarm results.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20180217000337.lfsdvro3l6ccsksp@alap3.anarazel.de
      29d432e4
  3. 20 Feb, 2018 6 commits
  4. 19 Feb, 2018 7 commits
  5. 18 Feb, 2018 3 commits
  6. 17 Feb, 2018 3 commits
    • Alvaro Herrera's avatar
      Refactor format_type APIs to be more modular · a26116c6
      Alvaro Herrera authored
      Introduce a new format_type_extended, with a flags bitmask argument that
      can modify the default behavior.  A few compatibility and readability
      wrappers remain:
      	format_type_be
      	format_type_be_qualified
      	format_type_with_typemod
      while format_type_with_typemod_qualified, which had a single caller, is
      removed.
      
      Author: Michael Paquier, some revisions by me
      Discussion: 20180213035107.GA2915@paquier.xyz
      a26116c6
    • Alvaro Herrera's avatar
      Mention trigger name in trigger test · cef60043
      Alvaro Herrera authored
      This makes it more explicit exactly what is going on, for further
      proposed behavior changes.
      
      Discussion: https://postgr.es/m/20180214212624.hm7of76flesodamf@alvherre.pgsql
      cef60043
    • Andres Freund's avatar
      Allow tupleslots to have a fixed tupledesc, use in executor nodes. · ad7dbee3
      Andres Freund authored
      The reason for doing so is that it will allow expression evaluation to
      optimize based on the underlying tupledesc. In particular it will
      allow to JIT tuple deforming together with the expression itself.
      
      For that expression initialization needs to be moved after the
      relevant slots are initialized - mostly unproblematic, except in the
      case of nodeWorktablescan.c.
      
      After doing so there's no need for ExecAssignResultType() and
      ExecAssignResultTypeFromTL() anymore, as all former callers have been
      converted to create a slot with a fixed descriptor.
      
      When creating a slot with a fixed descriptor, tts_values/isnull can be
      allocated together with the main slot, reducing allocation overhead
      and increasing cache density a bit.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20171206093717.vqdxe5icqttpxs3p@alap3.anarazel.de
      ad7dbee3
  7. 16 Feb, 2018 7 commits
  8. 15 Feb, 2018 4 commits
    • Tom Lane's avatar
      Fix plpgsql to enforce domain checks when returning a NULL domain value. · 51db0d18
      Tom Lane authored
      If a plpgsql function is declared to return a domain type, and the domain's
      constraints forbid a null value, it was nonetheless possible to return
      NULL, because we didn't bother to check the constraints for a null result.
      I'd noticed this while fooling with domains-over-composite, but had not
      gotten around to fixing it immediately.
      
      Add a regression test script exercising this and various other domain
      cases, largely borrowed from the plpython_types test.
      
      Although this is clearly a bug fix, I'm not sure whether anyone would
      thank us for changing the behavior in stable branches, so I'm inclined
      not to back-patch.
      51db0d18
    • Tom Lane's avatar
      Doc: fix minor bug in CREATE TABLE example. · 439c7bc1
      Tom Lane authored
      One example in create_table.sgml claimed to be showing table constraint
      syntax, but it was really column constraint syntax due to the omission
      of a comma.  This is both wrong and confusing, so fix it in all
      supported branches.
      
      Per report from neil@postgrescompare.com.
      
      Discussion: https://postgr.es/m/151871659877.1393.2431103178451978795@wrigleys.postgresql.org
      439c7bc1
    • Tom Lane's avatar
      Cast to void in StaticAssertExpr, not its callers. · 51940f97
      Tom Lane authored
      Seems a bit silly that many (in fact all, as of today) uses of
      StaticAssertExpr would need to cast it to void to avoid warnings from
      pickier compilers.  Let's just do the cast right in the macro, instead.
      
      In passing, change StaticAssertExpr to StaticAssertStmt in one
      place where that seems more apropos.
      
      Discussion: https://postgr.es/m/16161.1518715186@sss.pgh.pa.us
      51940f97
    • Tom Lane's avatar
      Move the extern declaration for ExceptionalCondition into c.h. · 03c5a00e
      Tom Lane authored
      This is the logical conclusion of our decision to support Assert()
      in both frontend and backend code: it should be possible to use that
      after including just c.h.  But as things were arranged before, if
      you wanted to use Assert() in code that might be compiled for either
      environment, you had to include postgres.h for the backend case.
      Let's simplify that.
      
      Per buildfarm, some of whose members started throwing warnings after
      commit 0c62356c added an Assert in src/port/snprintf.c.
      
      It's possible that some other src/port files that use the stanza
      
      #ifndef FRONTEND
      #include "postgres.h"
      #else
      #include "postgres_fe.h"
      #endif
      
      could now be simplified to just say '#include "c.h"'.  I have not
      tested for that, though, and it'd be unlikely to apply for more
      than a small number of them.
      03c5a00e