1. 22 Mar, 2018 4 commits
    • Andres Freund's avatar
      Fix typo in BITCODE_CXXFLAGS assignment. · 4317cc68
      Andres Freund authored
      Typoed-In: 5b2526c8
      Reported-By: Catalin Iacob
      4317cc68
    • Andres Freund's avatar
      Empty CXXFLAGS inherited from autoconf. · a02671cf
      Andres Freund authored
      We do the same for CFLAGS.  This was an omission in 6869b4f2.
      
      Reported-By: Catalin Iacob
      a02671cf
    • Tom Lane's avatar
      Prevent extensions from creating custom GUCs that are GUC_LIST_QUOTE. · 846b5a52
      Tom Lane authored
      Pending some solution for the problems noted in commit 74286994,
      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
      846b5a52
    • Tom Lane's avatar
      Fix mishandling of quoted-list GUC values in pg_dump and ruleutils.c. · 74286994
      Tom Lane authored
      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
      74286994
  2. 21 Mar, 2018 14 commits
  3. 20 Mar, 2018 10 commits
  4. 19 Mar, 2018 10 commits
    • Peter Eisentraut's avatar
      Add missing break · 13c7c65e
      Peter Eisentraut authored
      13c7c65e
    • Tom Lane's avatar
      Fix some corner-case issues in REFRESH MATERIALIZED VIEW CONCURRENTLY. · 6497a18e
      Tom Lane authored
      refresh_by_match_merge() has some issues in the way it builds a SQL
      query to construct the "diff" table:
      
      1. It doesn't require the selected unique index(es) to be indimmediate.
      2. It doesn't pay attention to the particular equality semantics enforced
      by a given index, but just assumes that they must be those of the column
      datatype's default btree opclass.
      3. It doesn't check that the indexes are btrees.
      4. It's insufficiently careful to ensure that the parser will pick the
      intended operator when parsing the query.  (This would have been a
      security bug before CVE-2018-1058.)
      5. It's not careful about indexes on system columns.
      
      The way to fix #4 is to make use of the existing code in ri_triggers.c
      for generating an arbitrary binary operator clause.  I chose to move
      that to ruleutils.c, since that seems a more reasonable place to be
      exporting such functionality from than ri_triggers.c.
      
      While #1, #3, and #5 are just latent given existing feature restrictions,
      and #2 doesn't arise in the core system for lack of alternate opclasses
      with different equality behaviors, #4 seems like an issue worth
      back-patching.  That's the bulk of the change anyway, so just back-patch
      the whole thing to 9.4 where this code was introduced.
      
      Discussion: https://postgr.es/m/13836.1521413227@sss.pgh.pa.us
      6497a18e
    • Andrew Dunstan's avatar
      Don't use an Msys virtual path to create a tablespace · 9ad21a69
      Andrew Dunstan authored
      The new unlogged_reinit recovery tests create a new tablespace using
      TestLib.pm's tempdir. However, on msys that function returns a virtual
      path that isn't understood by Postgres. Here we add a new function to
      TestLib.pm to turn such a path into a real path on the underlying file
      system, and use it in the new test to create the tablespace. The new
      function is essentially a NOOP everywhere but msys.
      9ad21a69
    • Tom Lane's avatar
      Fix performance hazard in REFRESH MATERIALIZED VIEW CONCURRENTLY. · 6fbd5cce
      Tom Lane authored
      Jeff Janes discovered that commit 7ca25b7d made one of the queries run by
      REFRESH MATERIALIZED VIEW CONCURRENTLY perform badly.  The root cause is
      bad cardinality estimation for correlated quals, but a principled solution
      to that problem is some way off, especially since the planner lacks any
      statistics about whole-row variables.  Moreover, in non-error cases this
      query produces no rows, meaning it must be run to completion; but use of
      LIMIT 1 encourages the planner to pick a fast-start, slow-completion plan,
      exactly not what we want.  Remove the LIMIT clause, and instead rely on
      the count parameter we pass to SPI_execute() to prevent excess work if the
      query does return some rows.
      
      While we've heard no field reports of planner misbehavior with this query,
      it could be that people are having performance issues that haven't reached
      the level of pain needed to cause a bug report.  In any case, that LIMIT
      clause can't possibly do anything helpful with any existing version of the
      planner, and it demonstrably can cause bad choices in some cases, so
      back-patch to 9.4 where the code was introduced.
      
      Thomas Munro
      
      Discussion: https://postgr.es/m/CAMkU=1z-JoGymHneGHar1cru4F1XDfHqJDzxP_CtK5cL3DOfmg@mail.gmail.com
      6fbd5cce
    • Alvaro Herrera's avatar
      Remove unnecessary members from ModifyTableState and ExecInsert · ee0a1fc8
      Alvaro Herrera authored
      These values can be obtained from the ModifyTable node which is already
      a part of both the ModifyTableState and ExecInsert.
      
      Author: Álvaro Herrera, Amit Langote
      Reviewed-by: Peter Geoghegan
      Discussion: https://postgr.es/m/20180316151303.rml2p5wffn3o6qy6@alvherre.pgsql
      ee0a1fc8
    • Alvaro Herrera's avatar
      Expand comment a little bit · 839a8eb2
      Alvaro Herrera authored
      The previous commit removed a comment that was a bit more verbose than
      its replacement.
      839a8eb2
    • Alvaro Herrera's avatar
      Fix state reversal after partition tuple routing · 6666ee49
      Alvaro Herrera authored
      We make some changes to ModifyTableState and the EState it uses whenever
      we route tuples to partitions; but we weren't restoring properly in all
      cases, possibly causing crashes when partitions with different tuple
      descriptors are targeted by tuples inserted in the same command.
      Refactor some code, creating ExecPrepareTupleRouting, to encapsulate the
      needed state changing logic, and have it invoked one level above its
      current place (ie. put it in ExecModifyTable instead of ExecInsert);
      this makes it all more readable.
      
      Add a test case to exercise this.
      
      We don't support having views as partitions; and since only views can
      have INSTEAD OF triggers, there is no point in testing for INSTEAD OF
      when processing insertions into a partitioned table.  Remove code that
      appears to support this (but which is actually never relevant.)
      
      In passing, fix location of some very confusing comments in
      ModifyTableState.
      
      Reported-by: Amit Langote
      Author: Etsuro Fujita, Amit Langote
      Discussion: https://postgr/es/m/0473bf5c-57b1-f1f7-3d58-455c2230bc5f@lab.ntt.co.jp
      6666ee49
    • Robert Haas's avatar
      Generate a separate upper relation for each stage of setop planning. · c596fadb
      Robert Haas authored
      Commit 3fc6e2d7 made setop planning
      stages return paths rather than plans, but all such paths were loosely
      associated with a single RelOptInfo, and only the final path was added
      to the RelOptInfo.  Even at the time, it was foreseen that this should
      be changed, because there is otherwise no good way for a single stage
      of setop planning to return multiple paths.  With this patch, each
      stage of set operation planning now creates a separate RelOptInfo;
      these are distinguished by using appropriate relid sets.  Note that
      this patch does nothing whatsoever about actually returning multiple
      paths for the same set operation; it just makes it possible for a
      future patch to do so.
      
      Along the way, adjust things so that create_upper_paths_hook is called
      for each of these new RelOptInfos rather than just once, since that
      might be useful to extensions using that hook.  It might be a good
      to provide an FDW API here as well, but I didn't try to do that for
      now.
      
      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
      c596fadb
    • Robert Haas's avatar
      Rewrite recurse_union_children to iterate, rather than recurse. · 49525c46
      Robert Haas authored
      Also, rename it to plan_union_chidren, so the old name wasn't
      very descriptive.  This results in a small net reduction in code,
      seems at least to me to be easier to understand, and saves
      space on the process stack.
      
      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
      49525c46
    • Magnus Hagander's avatar
      Fix typo in comment · 71cce90e
      Magnus Hagander authored
      Author: Daniel Gustafsson <daniel@yesql.se>
      71cce90e
  5. 18 Mar, 2018 2 commits
    • Tom Lane's avatar
      Doc: note that statement-level view triggers require an INSTEAD OF trigger. · a4678320
      Tom Lane authored
      If a view lacks an INSTEAD OF trigger, DML on it can only work by rewriting
      the command into a command on the underlying base table(s).  Then we will
      fire triggers attached to those table(s), not those for the view.  This
      seems appropriate from a consistency standpoint, but nowhere was the
      behavior explicitly documented, so let's do that.
      
      There was some discussion of throwing an error or warning if a statement
      trigger is created on a view without creating a row INSTEAD OF trigger.
      But a simple implementation of that would result in dump/restore ordering
      hazards.  Given that it's been like this all along, and we hadn't heard
      a complaint till now, a documentation improvement seems sufficient.
      
      Per bug #15106 from Pu Qun.  Back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/152083391168.1215.16892140713507052796@wrigleys.postgresql.org
      a4678320
    • Magnus Hagander's avatar
      Fix pg_recvlogical for pre-10 versions · 8d2814f2
      Magnus Hagander authored
      In e170b8c8, protection against modified search_path was added. However,
      PostgreSQL versions prior to 10 does not accept SQL commands over a
      replication connection, so the protection would generate a syntax error.
      
      Since we cannot run SQL commands on it, we are also not vulnerable to
      the issue that e170b8c8 fixes, so we can just skip this command for
      older versions.
      
      Author: Michael Paquier <michael@paquier.xyz>
      8d2814f2