1. 18 Sep, 2018 6 commits
    • Alexander Korotkov's avatar
      Add support for nearest-neighbor (KNN) searches to SP-GiST · 2a636834
      Alexander Korotkov authored
      Currently, KNN searches were supported only by GiST.  SP-GiST also capable to
      support them.  This commit implements that support.  SP-GiST scan stack is
      replaced with queue, which serves as stack if no ordering is specified.  KNN
      support is provided for three SP-GIST opclasses: quad_point_ops, kd_point_ops
      and poly_ops (catversion is bumped).  Some common parts between GiST and SP-GiST
      KNNs are extracted into separate functions.
      
      Discussion: https://postgr.es/m/570825e8-47d0-4732-2bf6-88d67d2d51c8%40postgrespro.ru
      Author: Nikita Glukhov, Alexander Korotkov based on GSoC work by Vlad Sterzhanov
      Review: Andrey Borodin, Alexander Korotkov
      2a636834
    • Tom Lane's avatar
      Add a debugging option to stress-test outfuncs.c and readfuncs.c. · d0cfc3d6
      Tom Lane authored
      In the normal course of operation, query trees will be serialized only if
      they are stored as views or rules; and plan trees will be serialized only
      if they get passed to parallel-query workers.  This leaves an awful lot of
      opportunity for bugs/oversights to not get detected, as indeed we've just
      been reminded of the hard way.
      
      To improve matters, this patch adds a new compile option
      WRITE_READ_PARSE_PLAN_TREES, which is modeled on the longstanding option
      COPY_PARSE_PLAN_TREES; but instead of passing all parse and plan trees
      through copyObject, it passes them through nodeToString + stringToNode.
      Enabling this option in a buildfarm animal or two will catch problems
      at least for cases that are exercised by the regression tests.
      
      A small problem with this idea is that readfuncs.c historically has
      discarded location fields, on the reasonable grounds that parse
      locations in a retrieved view are not relevant to the current query.
      But doing that in WRITE_READ_PARSE_PLAN_TREES breaks pg_stat_statements,
      and it could cause problems for future improvements that might try to
      report error locations at runtime.  To fix that, provide a variant
      behavior in readfuncs.c that makes it restore location fields when
      told to.
      
      In passing, const-ify the string arguments of stringToNode and its
      subsidiary functions, just because it annoyed me that they weren't
      const already.
      
      Discussion: https://postgr.es/m/17114.1537138992@sss.pgh.pa.us
      d0cfc3d6
    • Tom Lane's avatar
      Fix some minor issues exposed by outfuncs/readfuncs testing. · db1071d4
      Tom Lane authored
      A test patch to pass parse and plan trees through outfuncs + readfuncs
      exposed several issues that need to be fixed to get clean matches:
      
      Query.withCheckOptions failed to get copied; it's intentionally ignored
      by outfuncs/readfuncs on the grounds that it'd always be NIL anyway in
      stored rules.  This seems less than future-proof, and it's not even
      saving very much, so just undo the decision and treat the field like
      all others.
      
      Several places that convert a view RTE into a subquery RTE, or similar
      manipulations, failed to clear out fields that were specific to the
      original RTE type and should be zero in a subquery RTE.  Since readfuncs.c
      will leave such fields as zero, equalfuncs.c thinks the nodes are different
      leading to a reported mismatch.  It seems like a good idea to clear out the
      no-longer-needed fields, even though in principle nothing should look at
      them; the node ought to be indistinguishable from how it would look if
      we'd built a new node instead of scribbling on the old one.
      
      BuildOnConflictExcludedTargetlist randomly set the resname of some
      TargetEntries to "" not NULL.  outfuncs/readfuncs don't distinguish those
      cases, and so the string will read back in as NULL ... but equalfuncs.c
      does distinguish.  Perhaps we ought to try to make things more consistent
      in this area --- but it's just useless extra code space for
      BuildOnConflictExcludedTargetlist to not use NULL here, so I fixed it for
      now by making it do that.
      
      catversion bumped because the change in handling of Query.withCheckOptions
      affects stored rules.
      
      Discussion: https://postgr.es/m/17114.1537138992@sss.pgh.pa.us
      db1071d4
    • Tom Lane's avatar
      Fix some probably-minor oversights in readfuncs.c. · 09991e5a
      Tom Lane authored
      The system expects TABLEFUNC RTEs to have coltypes, coltypmods, and
      colcollations lists, but outfuncs doesn't dump them and readfuncs doesn't
      restore them.  This doesn't cause obvious failures, because the only things
      that look at those fields are expandRTE() and get_rte_attribute_type(),
      which are mostly used during parse analysis, before anything would've
      passed the parsetree through outfuncs/readfuncs.  But expandRTE() is used
      in build_physical_tlist(), which means that that function will return a
      wrong answer for a TABLEFUNC RTE that came from a view.  Very accidentally,
      this doesn't cause serious problems, because what it will return is NIL
      which callers will interpret as "couldn't build a physical tlist because
      of dropped columns".  So you still get a plan that works, though it's
      marginally less efficient than it could be.  There are also some other
      expandRTE() calls associated with transformation of whole-row Vars in
      the planner.  I have been unable to exhibit misbehavior from that, and
      it may be unreachable in any case that anyone would care about ... but
      I'm not entirely convinced, so this seems like something we should back-
      patch a fix for.  Fortunately, we can fix it without forcing a change
      of stored rules and a catversion bump, because we can just copy these
      lists from the subsidiary TableFunc object.
      
      readfuncs.c was also missing support for NamedTuplestoreScan plan nodes.
      This accidentally fails to break parallel query because a query using
      a named tuplestore would never be considered parallel-safe anyway.
      However, project policy since parallel query came in is that all plan
      node types should have outfuncs/readfuncs support, so this is clearly
      an oversight that should be repaired.
      
      Noted while fooling around with a patch to test outfuncs/readfuncs more
      thoroughly.  That exposed some other issues too, but these are the only
      ones that seem worth back-patching.
      
      Back-patch to v10 where both of these features came in.
      
      Discussion: https://postgr.es/m/17114.1537138992@sss.pgh.pa.us
      09991e5a
    • Thomas Munro's avatar
      Allow DSM allocation to be interrupted. · 422952ee
      Thomas Munro authored
      Chris Travers reported that the startup process can repeatedly try to
      cancel a backend that is in a posix_fallocate()/EINTR loop and cause it
      to loop forever.  Teach the retry loop to give up if an interrupt is
      pending.  Don't actually check for interrupts in that loop though,
      because a non-local exit would skip some clean-up code in the caller.
      
      Back-patch to 9.4 where DSM was added (and posix_fallocate() was later
      back-patched).
      
      Author: Chris Travers
      Reviewed-by: Ildar Musin, Murat Kabilov, Oleksii Kliukin
      Tested-by: Oleksii Kliukin
      Discussion: https://postgr.es/m/CAN-RpxB-oeZve_J3SM_6%3DHXPmvEG%3DHX%2B9V9pi8g2YR7YW0rBBg%40mail.gmail.com
      422952ee
    • Michael Paquier's avatar
      Refactor routines for subscription and publication lookups · 1d6fbc38
      Michael Paquier authored
      Those routines gain a missing_ok argument, allowing a caller to get a
      NULL result instead of an error if set to true.  This is part of a
      larger refactoring effort for objectaddress.c where trying to check for
      non-existing objects does not result in cache lookup failures.
      
      Author: Michael Paquier
      Reviewed-by: Aleksander Alekseev, Álvaro Herrera
      Discussion: https://postgr.es/m/CAB7nPqSZxrSmdHK-rny7z8mi=EAFXJ5J-0RbzDw6aus=wB5azQ@mail.gmail.com
      1d6fbc38
  2. 17 Sep, 2018 3 commits
    • Tom Lane's avatar
      Fix parsetree representation of XMLTABLE(XMLNAMESPACES(DEFAULT ...)). · 07a3af0f
      Tom Lane authored
      The original coding for XMLTABLE thought it could represent a default
      namespace by a T_String Value node with a null string pointer.  That's
      not okay, though; in particular outfuncs.c/readfuncs.c are not on board
      with such a representation, meaning you'll get a null pointer crash
      if you try to store a view or rule containing this construct.
      
      To fix, change the parsetree representation so that we have a NULL
      list element, instead of a bogus Value node.
      
      This isn't really a functional limitation since default XML namespaces
      aren't yet implemented in the executor; you'd just get "DEFAULT
      namespace is not supported" anyway.  But crashes are not nice, so
      back-patch to v10 where this syntax was added.  Ordinarily we'd consider
      a parsetree representation change to be un-backpatchable; but since
      existing releases would crash on the way to storing such constructs,
      there can't be any existing views/rules to be incompatible with.
      
      Per report from Andrey Lepikhov.
      
      Discussion: https://postgr.es/m/3690074f-abd2-56a9-144a-aa5545d7a291@postgrespro.ru
      07a3af0f
    • Tom Lane's avatar
      Remove dead code from pop_next_work_item(). · 789ba502
      Tom Lane authored
      The pref_non_data heuristic has been dead code for nearly ten years,
      and as far as I can tell was dead code even when it was first committed.
      I'm tired of silencing Coverity complaints about it, so get rid of it.
      If anyone is ever interested in pursuing the concept, they can get the
      code out of our git history.
      789ba502
    • Tom Lane's avatar
      Fix pgbench lexer's "continuation" rule to cope with Windows newlines. · db37ab2c
      Tom Lane authored
      Our general practice in frontend code is to accept input with either
      Unix-style newlines (\n) or DOS-style (\r\n).  pgbench was mostly down
      with that, but its rule for line continuations (backslash-newline) was
      not.  This had been masked on Windows buildfarm machines before commit
      0ba06e0b by use of Windows text mode to read files.  We could have fixed
      it by forcing text mode again, but it's better to fix the parsing code
      so that Windows-style text files on Unix systems don't cause problems.
      
      Back-patch to v10 where pgbench grew line continuations.
      
      Discussion: https://postgr.es/m/17194.1537191697@sss.pgh.pa.us
      db37ab2c
  3. 16 Sep, 2018 4 commits
    • Peter Eisentraut's avatar
      Add list of acknowledgments to release notes · f9907c6a
      Peter Eisentraut authored
      This contains all individuals mentioned in the commit messages during
      PostgreSQL 11 development.
      
      current through 7a2f70f0e5e83871d091ee479abea4b8f850dd29
      f9907c6a
    • Andrew Gierth's avatar
      Fix out-of-tree build for transform modules. · 60f6756f
      Andrew Gierth authored
      Neither plperl nor plpython installed sufficient header files to
      permit transform modules to be built out-of-tree using PGXS. Fix that
      by installing all plperl and plpython header files (other than those
      with special purposes such as generated data tables), and also install
      plpython's special .mk file for mangling regression tests.
      
      (This commit does not fix the windows install, which does not
      currently install _any_ plperl or plpython headers.)
      
      Also fix the existing transform modules for hstore and ltree so that
      their cross-module #include directives work as anticipated by commit
      df163230 et seq. This allows them to serve as working examples of
      how to reference other modules when doing separate out-of-tree builds.
      
      Discussion: https://postgr.es/m/87o9ej8bgl.fsf%40news-spur.riddles.org.uk
      60f6756f
    • Tom Lane's avatar
      Add outfuncs.c support for RawStmt nodes. · 3844adbf
      Tom Lane authored
      I noticed while poking at a report from Andrey Lepikhov that the
      recent addition of RawStmt nodes at the top of raw parse trees
      makes it impossible to print any raw parse trees whatsoever,
      because outfuncs.c doesn't know RawStmt and hence fails to descend
      into it.
      
      While we generally lack outfuncs.c support for utility statements,
      there is reasonably complete support for what you can find in a
      raw SELECT statement.  It was not my intention to make that all
      dead code ... so let's add support for RawStmt.
      
      Back-patch to v10 where RawStmt appeared.
      3844adbf
    • Bruce Momjian's avatar
      doc: clarify pg_basebackup's -C/--create-slot description · da1db404
      Bruce Momjian authored
      The previous text was overly complex.
      
      Backpatch-through: 11
      da1db404
  4. 15 Sep, 2018 2 commits
    • Tom Lane's avatar
      In v11, disable JIT by default (it's still enabled by default in HEAD). · 8f32bacc
      Tom Lane authored
      Per discussion, JIT isn't quite mature enough to ship enabled-by-default.
      
      I failed to resist the temptation to do a bunch of copy-editing on the
      related documentation.  Also, clean up some inconsistencies in which
      section of config.sgml the JIT GUCs are documented in vs. what guc.c
      and postgresql.config.sample had.
      
      Discussion: https://postgr.es/m/20180914222657.mw25esrzbcnu6qlu@alap3.anarazel.de
      8f32bacc
    • Tom Lane's avatar
      Fix failure with initplans used conditionally during EvalPlanQual rechecks. · 1f4a920b
      Tom Lane authored
      The EvalPlanQual machinery assumes that any initplans (that is,
      uncorrelated sub-selects) used during an EPQ recheck would have already
      been evaluated during the main query; this is implicit in the fact that
      execPlan pointers are not copied into the EPQ estate's es_param_exec_vals.
      But it's possible for that assumption to fail, if the initplan is only
      reached conditionally.  For example, a sub-select inside a CASE expression
      could be reached during a recheck when it had not been previously, if the
      CASE test depends on a column that was just updated.
      
      This bug is old, appearing to date back to my rewrite of EvalPlanQual in
      commit 9f2ee8f2, but was not detected until Kyle Samson reported a case.
      
      To fix, force all not-yet-evaluated initplans used within the EPQ plan
      subtree to be evaluated at the start of the recheck, before entering the
      EPQ environment.  This could be inefficient, if such an initplan is
      expensive and goes unused again during the recheck --- but that's piling
      one layer of improbability atop another.  It doesn't seem worth adding
      more complexity to prevent that, at least not in the back branches.
      
      It was convenient to use the new-in-v11 ExecEvalParamExecParams function
      to implement this, but I didn't like either its name or the specifics of
      its API, so revise that.
      
      Back-patch all the way.  Rather than rewrite the patch to avoid depending
      on bms_next_member() in the oldest branches, I chose to back-patch that
      function into 9.4 and 9.3.  (This isn't the first time back-patches have
      needed that, and it exhausted my patience.)  I also chose to back-patch
      some test cases added by commits 71404af2 and 342a1ffa into 9.4 and 9.3,
      so that the 9.x versions of eval-plan-qual.spec are all the same.
      
      Andrew Gierth diagnosed the problem and contributed the added test cases,
      though the actual code changes are by me.
      
      Discussion: https://postgr.es/m/A033A40A-B234-4324-BE37-272279F7B627@tripadvisor.com
      1f4a920b
  5. 14 Sep, 2018 6 commits
    • Alvaro Herrera's avatar
      Move PartitionDispatchData struct definition to execPartition.c · 6b78231d
      Alvaro Herrera authored
      There's no reason to expose the struct definition, so don't.
      
      Author: Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>
      Discussion: https://postgr.es/m/d3fa24c1-bc65-7133-81df-6474387ccc4f@lab.ntt.co.jp
      6b78231d
    • Tom Lane's avatar
      Improve parallel scheduling logic in pg_dump/pg_restore. · 548e5097
      Tom Lane authored
      Previously, the way this worked was that a parallel pg_dump would
      re-order the TABLE_DATA items in the dump's TOC into decreasing size
      order, and separately re-order (some of) the INDEX items into decreasing
      size order.  Then pg_dump would dump the items in that order.  Later,
      parallel pg_restore just followed the TOC order.  This method had lots
      of deficiencies:
      
      * TOC ordering randomly differed between parallel and non-parallel
      dumps, and was hard to predict in the former case, causing problems
      for building stable pg_dump test cases.
      
      * Parallel restore only followed a well-chosen order if the dump had
      been done in parallel; in particular, this never happened for restore
      from custom-format dumps.
      
      * The best order for restore isn't necessarily the same as for dump,
      and it's not really static either because of locking considerations.
      
      * TABLE_DATA and INDEX items aren't the only things that might take a lot
      of work during restore.  Scheduling was particularly stupid for the BLOBS
      item, which might require lots of work during dump as well as restore,
      but was left to the end in either case.
      
      This patch removes the logic that changed the TOC order, fixing the
      test instability problem.  Instead, we sort the parallelizable items
      just before processing them during a parallel dump.  Independently
      of that, parallel restore prioritizes the ready-to-execute tasks
      based on the size of the underlying table.  In the case of dependent
      tasks such as index, constraint, or foreign key creation, the largest
      relevant table is used as the metric for estimating the task length.
      (This is pretty crude, but it should be enough to avoid the case we
      want to avoid, which is ending the run with just a few large tasks
      such that we can't make use of all N workers.)
      
      Patch by me, responding to a complaint from Peter Eisentraut,
      who also reviewed the patch.
      
      Discussion: https://postgr.es/m/5137fe12-d0a2-4971-61b6-eb4e7e8875f8@2ndquadrant.com
      548e5097
    • Alvaro Herrera's avatar
      Fix ALTER/TYPE on columns referenced by FKs in partitioned tables · 20bef2c3
      Alvaro Herrera authored
      When ALTER TABLE ... SET DATA TYPE affects a column referenced by
      constraints and indexes, it drop those constraints and indexes and
      recreates them afterwards, so that the definitions match the new data
      type.  The original code did this by dropping one object at a time
      (commit 077db40f of May 2004), which worked fine because the
      dependencies between the objects were pretty straightforward, and
      ordering the objects in a specific way was enough to make this work.
      However, when there are foreign key constraints in partitioned tables,
      the dependencies are no longer so straightforward, and we were getting
      errors when attempted:
        ERROR:  cache lookup failed for constraint 16398
      
      This can be fixed by doing all the drops in one pass instead, using
      performMultipleDeletions (introduced by df18c51f of Aug 2006).  With
      this change we can also remove the code to carefully order the list of
      objects to be deleted.
      Reported-by: default avatarRajkumar Raghuwanshi <rajkumar.raghuwanshi@enterprisedb.com>
      Reviewed-by: default avatarTom Lane <tgl@sss.pgh.pa.us>
      Discussion: https://postgr.es/m/CAKcux6nWS_m+s=1Udk_U9B+QY7pA-Ac58qR5BdUfOyrwnWHDew@mail.gmail.com
      20bef2c3
    • Andrew Gierth's avatar
      Order active window clauses for greater reuse of Sort nodes. · 728202b6
      Andrew Gierth authored
      By sorting the active window list lexicographically by the sort clause
      list but putting longer clauses before shorter prefixes, we generate
      more chances to elide Sort nodes when building the path.
      
      Author: Daniel Gustafsson (with some editorialization by me)
      Reviewed-by: Alexander Kuzmenkov, Masahiko Sawada, Tom Lane
      Discussion: https://postgr.es/m/124A7F69-84CD-435B-BA0E-2695BE21E5C2%40yesql.se
      728202b6
    • Amit Kapila's avatar
      Don't allow LIMIT/OFFSET clause within sub-selects to be pushed to workers. · 75f9c4ca
      Amit Kapila authored
      Allowing sub-select containing LIMIT/OFFSET in workers can lead to
      inconsistent results at the top-level as there is no guarantee that the
      row order will be fully deterministic.  The fix is to prohibit pushing
      LIMIT/OFFSET within sub-selects to workers.
      
      Reported-by: Andrew Fletcher
      Bug: 15324
      Author: Amit Kapila
      Reviewed-by: Dilip Kumar
      Backpatch-through: 9.6
      Discussion: https://postgr.es/m/153417684333.10284.11356259990921828616@wrigleys.postgresql.org
      75f9c4ca
    • Michael Paquier's avatar
      Allow concurrent-safe open() and fopen() in frontend code for Windows · 0ba06e0b
      Michael Paquier authored
      PostgreSQL uses a custom wrapper for open() and fopen() which is
      concurrent-safe, allowing multiple processes to open and work on the
      same file.  This has a couple of advantages:
      - pg_test_fsync does not handle O_DSYNC correctly otherwise, leading to
      false claims that disks are unsafe.
      - TAP tests can run into race conditions when a postmaster and pg_ctl
      open postmaster.pid, fixing some random failures in the buildfam.
      
      pg_upgrade is one frontend tool using workarounds to bypass file locking
      issues with the log files it generates, however the interactions with
      pg_ctl are proving to be tedious to get rid of, so this is left for
      later.
      
      Author: Laurenz Albe
      Reviewed-by: Michael Paquier, Kuntal Ghosh
      Discussion: https://postgr.es/m/1527846213.2475.31.camel@cybertec.at
      Discussion: https://postgr.es/m/16922.1520722108@sss.pgh.pa.us
      0ba06e0b
  6. 13 Sep, 2018 7 commits
    • Michael Paquier's avatar
      Improve autovacuum logging for aggressive and anti-wraparound runs · 28a8fa98
      Michael Paquier authored
      A log message was being generated when log_min_duration is reached for
      autovacuum on a given relation to indicate if it was an aggressive run,
      and missed the point of mentioning if it is doing an anti-wrapround
      run.  The log message generated is improved so as one, both or no extra
      details are added depending on the option set.
      
      Author: Sergei Kornilov
      Reviewed-by: Masahiko Sawada, Michael Paquier
      Discussion: https://postgr.es/m/11587951532155118@sas1-19a94364928d.qloud-c.yandex.net
      28a8fa98
    • Peter Eisentraut's avatar
      Message style improvements · f48fa2bc
      Peter Eisentraut authored
      Fix one untranslatable string concatenation in pg_rewind.
      
      Fix one message in pg_verify_checksums to use a style use elsewhere
      and avoid plural issues.
      
      Fix one gratuitous abbreviation in psql.
      f48fa2bc
    • Andres Freund's avatar
      Detect LLVM 7 without specifying binaries explicitly. · 240d40db
      Andres Freund authored
      Before this commit LLVM 7 was supported, but only if one explicitly
      provided LLVM_CONFIG= and CLANG= paths.  As LLVM 7 is the first
      version that includes our upstreamed debugging and profiling features,
      and as debian is planning to default to 7 due to wider architecture
      support, it seems good to support auto-detecting that version.
      
      Author: Christoph Berg
      Discussion: https://postgr.es/m/20180912124517.GD24584@msg.df7cb.de
      Backpatch: 11, where LLVM was introduced
      240d40db
    • Tom Lane's avatar
      Attempt to identify system timezone by reading /etc/localtime symlink. · 23bd3cec
      Tom Lane authored
      On many modern platforms, /etc/localtime is a symlink to a file within the
      IANA database.  Reading the symlink lets us find out the name of the system
      timezone directly, without going through the brute-force search embodied in
      scan_available_timezones().  This shortens the runtime of initdb by some
      tens of ms, which is helpful for the buildfarm, and it also allows us to
      reliably select the same zone name the system was actually configured for,
      rather than possibly choosing one of IANA's many zone aliases.  (For
      example, in a system configured for "Asia/Tokyo", the brute-force search
      would not choose that name but its alias "Japan", on the grounds of the
      latter string being shorter.  More surprisingly, "Navajo" is preferred
      to either "America/Denver" or "US/Mountain", as seen in an old complaint
      from Josh Berkus.)
      
      If /etc/localtime doesn't exist, or isn't a symlink, or we can't make
      sense of its contents, or the contents match a zone we know but that
      zone doesn't match the observed behavior of localtime(), fall back to
      the brute-force search.
      
      Also, tweak initdb so that it prints the zone name it selected.
      
      In passing, replace the last few references to the "Olson" database in
      code comments with "IANA", as that's been our preferred term since
      commit b2cbced9.
      
      Patch by me, per a suggestion from Robert Haas; review by Michael Paquier
      
      Discussion: https://postgr.es/m/7408.1525812528@sss.pgh.pa.us
      23bd3cec
    • Amit Kapila's avatar
      Attach FPI to the first record after full_page_writes is turned on. · bc153c94
      Amit Kapila authored
      XLogInsert fails to attach a required FPI to the first record after
      full_page_writes is turned on by the last checkpoint.  This bug got
      introduced in 9.5 due to code rearrangement in commits 2c03216d and
      2076db2a.  Fix it by ensuring that XLogInsertRecord performs a
      recomputation when the given record is generated with FPW as off but
      found that the flag has been turned on while actually inserting the
      record.
      
      Reported-by: Kyotaro Horiguchi
      Author: Kyotaro Horiguchi
      Reviewed-by: Amit Kapila
      Backpatch-through: 9.5 where this problem was introduced
      Discussion: https://postgr.es/m/20180420.151043.74298611.horiguchi.kyotaro@lab.ntt.co.jp
      bc153c94
    • Michael Paquier's avatar
      Simplify static function in extension.c · 514a731d
      Michael Paquier authored
      An extra argument for the filename defining the extension script
      location was present, aimed at being used for error reporting, but has
      never been used.  This was around since extensions have been added in
      d9572c4e.
      
      Author: Yugo Nagata
      Reviewed-by: Tatsuo Ishii
      Discussion: https://postgr.es/m/20180907180504.1ff19e1675bb44a67e9c7ab1@sraoss.co.jp
      514a731d
    • Peter Eisentraut's avatar
      Simplify index tuple descriptor initialization · e5f1bb92
      Peter Eisentraut authored
      We have two code paths for initializing the tuple descriptor for a new
      index: For a normal index, we copy the tuple descriptor from the table
      and reset a number of fields that are not applicable to indexes.  For an
      expression index, we make a blank tuple descriptor and fill in the
      needed fields based on the provided expressions.  As pg_attribute has
      grown over time, the number of fields that we need to reset in the first
      case is now bigger than the number of fields we actually want to copy,
      so it's sensible to do it the other way around: Make a blank descriptor
      and copy just the fields we need.  This also allows more code sharing
      between the two branches, and it avoids having to touch this code for
      almost every unrelated change to the pg_attribute structure.
      Reviewed-by: default avatarArthur Zakirov <a.zakirov@postgrespro.ru>
      e5f1bb92
  7. 12 Sep, 2018 3 commits
    • Tom Lane's avatar
      Minor fixes for psql tab completion. · 7046d302
      Tom Lane authored
      * Include partitioned tables in what's offered after ANALYZE.
      
      * Include toast_tuple_target in what's offered after ALTER TABLE ... SET|RESET.
      
      * Include HASH in what's offered after PARTITION BY.
      
      This is extracted from a larger patch; these bits seem like
      uncontroversial bug fixes for v11 features, so back-patch them into v11.
      
      Justin Pryzby
      
      Discussion: https://postgr.es/m/20180529000623.GA21896@telsasoft.com
      7046d302
    • Andrew Gierth's avatar
      Repair bug in regexp split performance improvements. · b7f6bcbf
      Andrew Gierth authored
      Commit c8ea87e4 introduced a temporary conversion buffer for
      substrings extracted during regexp splits. Unfortunately the code that
      sized it was failing to ignore the effects of ignored degenerate
      regexp matches, so for regexp_split_* calls it could under-size the
      buffer in such cases.
      
      Fix, and add some regression test cases (though those will only catch
      the bug if run in a multibyte encoding).
      
      Backpatch to 9.3 as the faulty code was.
      
      Thanks to the PostGIS project, Regina Obe and Paul Ramsey for the
      report (via IRC) and assistance in analysis. Patch by me.
      b7f6bcbf
    • Peter Eisentraut's avatar
      ecpg: Change --version output to common style · ba37349c
      Peter Eisentraut authored
      When we removed the ecpg-specific versions, we also removed the
      "(PostgreSQL)" from the --version output, which we show in other
      programs.
      Reported-by: default avatarIoseph Kim <pgsql-kr@postgresql.kr>
      ba37349c
  8. 11 Sep, 2018 6 commits
    • Tom Lane's avatar
      Add PQresultMemorySize function to report allocated size of a PGresult. · 2970afa6
      Tom Lane authored
      This number can be useful for application memory management, and the
      overhead to track it seems pretty trivial.
      
      Lars Kanis, reviewed by Pavel Stehule, some mods by me
      
      Discussion: https://postgr.es/m/fa16a288-9685-14f2-97c8-b8ac84365a4f@greiz-reinsdorf.de
      2970afa6
    • Michael Paquier's avatar
      Parse more strictly integer parameters from connection strings in libpq · e7a22179
      Michael Paquier authored
      The following parameters have been parsed in lossy ways when specified
      in a connection string processed by libpq:
      - connect_timeout
      - keepalives
      - keepalives_count
      - keepalives_idle
      - keepalives_interval
      - port
      
      Overflowing values or the presence of incorrect characters were not
      properly checked, leading to libpq trying to use such values and fail
      with unhelpful error messages.  This commit hardens the parsing of those
      parameters so as it is possible to find easily incorrect values.
      
      Author: Fabien Coelho
      Reviewed-by: Peter Eisentraut, Michael Paquier
      Discussion: https://postgr.es/m/alpine.DEB.2.21.1808171206180.20841@lancre
      e7a22179
    • Bruce Momjian's avatar
      doc: adjust PG 11 release notes · 0d45cd96
      Bruce Momjian authored
      Fixes for channel binding, SQL procedures, and pg_trgm.
      
      Backpatch-through: 11
      0d45cd96
    • Tom Lane's avatar
      Remove ruleutils.c's special case for BIT [VARYING] literals. · fedc97cd
      Tom Lane authored
      Up to now, get_const_expr() insisted on prefixing BIT and VARBIT
      literals with 'B'.  That's not really necessary, because we always
      append explicit-cast syntax to identify the constant's type.
      Moreover, it's subtly wrong for VARBIT, because the parser will
      interpret B'...' as '...'::"bit"; see make_const() which explicitly
      assigns type BITOID for a T_BitString literal.  So what had been
      a simple VARBIT literal is reconstructed as ('...'::"bit")::varbit,
      which is not the same thing, at least not before constant folding.
      This results in odd differences after dump/restore, as complained
      of by the patch submitter, and it could result in actual failures in
      partitioning or inheritance DDL operations (see commit 542320c2,
      which repaired similar misbehaviors for some other data types).
      
      Fixing it is pretty easy: just remove the special case and let the
      default code path handle these types.  We could have kept the special
      case for BIT only, but there seems little point in that.
      
      Like the previous patch, I judge that back-patching this into stable
      branches wouldn't be a good idea.  However, it seems not quite too
      late for v11, so let's fix it there.
      
      Paul Guo, reviewed by Davy Machado and John Naylor, minor adjustments
      by me
      
      Discussion: https://postgr.es/m/CABQrizdTra=2JEqA6+Ms1D1k1Kqw+aiBBhC9TreuZRX2JzxLAA@mail.gmail.com
      fedc97cd
    • Andrew Gierth's avatar
      Repair double-free in SP-GIST rescan (bug #15378) · 500d4979
      Andrew Gierth authored
      spgrescan would first reset traversalCxt, and then traverse a
      potentially non-empty stack containing pointers to traversalValues
      which had been allocated in those contexts, freeing them a second
      time. This bug originates in commit ccd6eb49 where traversalValue was
      introduced.
      
      Repair by traversing the stack before the context reset; this isn't
      ideal, since it means doing retail pfree in a context that's about to
      be reset, but the freeing of a stack entry is also done in other
      places in the code during the scan so it's not worth trying to
      refactor it further. Regression test added.
      
      Backpatch to 9.6 where the problem was introduced.
      
      Per bug #15378; analysis and patch by me, originally from a report on
      IRC by user velix; see also PostGIS ticket #4174; review by Alexander
      Korotkov.
      
      Discussion: https://postgr.es/m/153663176628.23136.11901365223750051490@wrigleys.postgresql.org
      500d4979
    • Tom Lane's avatar
      Use -Bsymbolic for shared libraries on HP-UX and Solaris. · 4fa3741d
      Tom Lane authored
      These platforms are also subject to the mis-linking problem addressed
      in commit e3d77ea6.  It's not clear whether we could solve it with
      a solution equivalent to GNU ld's version scripts, but -Bsymbolic
      appears to fix it, so let's use that.
      
      Like the previous commit, back-patch as far as v10.
      
      Discussion: https://postgr.es/m/153626613985.23143.4743626885618266803@wrigleys.postgresql.org
      4fa3741d
  9. 10 Sep, 2018 1 commit
  10. 09 Sep, 2018 2 commits
    • Tom Lane's avatar
      Prevent mis-linking of src/port and src/common functions on *BSD. · e3d77ea6
      Tom Lane authored
      On ELF-based platforms (and maybe others?) it's possible for a shared
      library, when dynamically loaded into the backend, to call the backend
      versions of src/port and src/common functions rather than the frontend
      versions that are actually linked into the shlib.  This is the cause
      of bug #15367 from Jeremy Evans, and is likely to lead to more problems
      in future; it's accidental that we've failed to notice any bad effects
      up to now.
      
      The recommended way to fix this on ELF-based platforms is to use a
      linker "version script" that makes the shlib's versions of the functions
      local.  (Apparently, -Bsymbolic would fix it as well, but with other
      side effects that we don't want.)  Doing so has the additional benefit
      that we can make sure the shlib only exposes the symbols that are meant
      to be part of its API, and not ones that are just for cross-file
      references within the shlib.  So we'd already been using a version
      script for libpq on popular platforms, but it's now apparent that it's
      necessary for correctness on every ELF-based platform.
      
      Hence, add appropriate logic to the openbsd, freebsd, and netbsd stanzas
      of Makefile.shlib; this is just a copy-and-paste from the linux stanza.
      There may be additional work to do if commit ed0cdf0e reveals that the
      problem exists elsewhere, but this is all that is known to be needed
      right now.
      
      Back-patch to v10 where SCRAM support came in.  The problem is ancient,
      but analysis suggests that there were no really severe consequences
      in older branches.  Hence, I won't take the risk of such a large change
      in the build process for older branches.
      
      In passing, remove a rather opaque comment about -Bsymbolic; I don't
      think it's very on-point about why we don't use that, if indeed that's
      what it's talking about at all.
      
      Patch by me; thanks to Andrew Gierth for helping to diagnose the problem,
      and for additional testing.
      
      Discussion: https://postgr.es/m/153626613985.23143.4743626885618266803@wrigleys.postgresql.org
      e3d77ea6
    • Alexander Korotkov's avatar
      Improve behavior of to_timestamp()/to_date() functions · cf984672
      Alexander Korotkov authored
      to_timestamp()/to_date() functions were introduced mainly for Oracle
      compatibility, and became very popular among PostgreSQL users.  However, some
      behavior of to_timestamp()/to_date() functions are both incompatible with Oracle
      and confusing for our users.  This behavior is related to handling of spaces and
      separators in non FX (fixed format) mode.  This commit reworks this behavior
      making less confusing, better documented and more compatible with Oracle.
      
      Nevertheless, there are still following incompatibilities with Oracle.
      1) We don't insist that there are no format string patterns unmatched to
         input string.
      2) In FX mode we don't insist space and separators in format string to exactly
         match input string.
      3) When format string patterns are divided by mix of spaces and separators, we
         don't distinguish them, while Oracle takes into account only last group of
         spaces/separators.
      
      Discussion: https://postgr.es/m/1873520224.1784572.1465833145330.JavaMail.yahoo%40mail.yahoo.com
      Author: Artur Zakirov, Alexander Korotkov, Liudmila Mantrova
      Review: Amul Sul, Robert Haas, Tom Lane, Dmitry Dolgov, David G. Johnston
      cf984672