1. 03 Dec, 2016 3 commits
    • Noah Misch's avatar
      Make pgwin32_putenv() visit debug CRTs. · 95b9b8a3
      Noah Misch authored
      This has no effect in the most conventional case, where no relevant DLL
      uses a debug build.  For an example where it does matter, given a debug
      build of MIT Kerberos, the krb_server_keyfile parameter usually had no
      effect.  Since nobody wants a Heisenbug, back-patch to 9.2 (all
      supported versions).
      
      Christian Ullrich, reviewed by Michael Paquier.
      95b9b8a3
    • Noah Misch's avatar
      Remove wrong CloseHandle() call. · b37da1e8
      Noah Misch authored
      In accordance with its own documentation, invoke CloseHandle() only when
      directed in the documentation for the function that furnished the
      handle.  GetModuleHandle() does not so direct.  We have been issuing
      this call only in the rare event that a CRT DLL contains no "_putenv"
      symbol, so lack of bug reports is uninformative.  Back-patch to 9.2 (all
      supported versions).
      
      Christian Ullrich, reviewed by Michael Paquier.
      b37da1e8
    • Noah Misch's avatar
      Refine win32env.c cosmetics. · a9d9208c
      Noah Misch authored
      Replace use of plain 0 as a null pointer constant.  In comments, update
      terminology and lessen redundancy.  Back-patch to 9.2 (all supported
      versions) for the convenience of back-patching the next two commits.
      
      Christian Ullrich and Noah Misch, reviewed (in earlier versions) by
      Michael Paquier.
      a9d9208c
  2. 02 Dec, 2016 13 commits
    • Tom Lane's avatar
      Fix broken wait-for-previous-process-to-exit loop in regression test. · 19fcc005
      Tom Lane authored
      Must do pg_stat_clear_snapshot() inside test's loop, or our snapshot of
      pg_stat_activity will never change :-(.  Thinko in b3427dad -- evidently
      my workstation never really iterated the loop in testing.  Per buildfarm.
      19fcc005
    • Robert Haas's avatar
      Fix thinko in b3427dad. · 767a9039
      Robert Haas authored
      767a9039
    • Tom Lane's avatar
      Delete deleteWhatDependsOn() in favor of more performDeletion() flag bits. · b3427dad
      Tom Lane authored
      deleteWhatDependsOn() had grown an uncomfortably large number of
      assumptions about what it's used for.  There are actually only two minor
      differences between what it does and what a regular performDeletion() call
      can do, so let's invent additional bits in performDeletion's existing flags
      argument that specify those behaviors, and get rid of deleteWhatDependsOn()
      as such.  (We'd probably have done it this way from the start, except that
      performDeletion didn't originally have a flags argument, IIRC.)
      
      Also, add a SKIP_EXTENSIONS flag bit that prevents ever recursing to an
      extension, and use that when dropping temporary objects at session end.
      This provides a more general solution to the problem addressed in a hacky
      way in commit 08dd23ce: if an extension script creates temp objects and
      forgets to remove them again, the whole extension went away when its
      contained temp objects were deleted.  The previous solution only covered
      temp relations, but this solves it for all object types.
      
      These changes require minor additions in dependency.c to pass the flags
      to subroutines that previously didn't get them, but it's still a net
      savings of code, and it seems cleaner than before.
      
      Having done this, revert the special-case code added in 08dd23ce that
      prevented addition of pg_depend records for temp table extension
      membership, because that caused its own oddities: dropping an extension
      that had created such a table didn't automatically remove the table,
      leading to a failure if the table had another dependency on the extension
      (such as use of an extension data type), or to a duplicate-name failure if
      you then tried to recreate the extension.  But we keep the part that
      prevents the pg_temp_nnn schema from becoming an extension member; we never
      want that to happen.  Add a regression test case covering these behaviors.
      
      Although this fixes some arguable bugs, we've heard few field complaints,
      and any such problems are easily worked around by explicitly dropping temp
      objects at the end of extension scripts (which seems like good practice
      anyway).  So I won't risk a back-patch.
      
      Discussion: https://postgr.es/m/e51f4311-f483-4dd0-1ccc-abec3c405110@BlueTreble.com
      b3427dad
    • Robert Haas's avatar
      Introduce dynamic shared memory areas. · 13df76a5
      Robert Haas authored
      Programmers discovered decades ago that it was useful to have a simple
      interface for allocating and freeing memory, which is why malloc() and
      free() were invented.  Unfortunately, those handy tools don't work
      with dynamic shared memory segments because those are specific to
      PostgreSQL and are not necessarily mapped at the same address in every
      cooperating process.  So invent our own allocator instead.  This makes
      it possible for processes cooperating as part of parallel query
      execution to allocate and free chunks of memory without having to
      reserve them prior to the start of execution.  It could also be used
      for longer lived objects; for example, we could consider storing data
      for pg_stat_statements or the stats collector in shared memory using
      these interfaces, rather than writing them to files.  Basically,
      anything that needs shared memory but can't predict in advance how
      much it's going to need might find this useful.
      
      Thomas Munro and Robert Haas.  The original code (of mine) on which
      Thomas based his work was actually designed to be a new backend-local
      memory allocator for PostgreSQL, but that hasn't gone anywhere - or
      not yet, anyway.  Thomas took that work and performed major
      refactoring and extensive modifications to make it work with dynamic
      shared memory, including the addition of appropriate locking.
      
      Discussion: CA+TgmobkeWptGwiNa+SGFWsTLzTzD-CeLz0KcE-y6LFgoUus4A@mail.gmail.com
      Discussion: CAEepm=1z5WLuNoJ80PaCvz6EtG9dN0j-KuHcHtU6QEfcPP5-qA@mail.gmail.com
      13df76a5
    • Robert Haas's avatar
      Management of free memory pages. · 13e14a78
      Robert Haas authored
      This is intended as infrastructure for a full-fledged allocator for
      dynamic shared memory.  The interface looks a bit like a real
      allocator, but only supports allocating and freeing memory in
      multiples of the 4kB page size.  Further, to free memory, you must
      know the size of the span you wish to free, in pages.  While these are
      make it unsuitable as an allocator in and of itself, it still serves
      as very useful scaffolding for a full-fledged allocator.
      
      Robert Haas and Thomas Munro.  This code is mostly the same as my 2014
      submission, but Thomas fixed quite a few bugs and made some changes to
      the interface.
      
      Discussion: CA+TgmobkeWptGwiNa+SGFWsTLzTzD-CeLz0KcE-y6LFgoUus4A@mail.gmail.com
      Discussion: CAEepm=1z5WLuNoJ80PaCvz6EtG9dN0j-KuHcHtU6QEfcPP5-qA@mail.gmail.com
      13e14a78
    • Robert Haas's avatar
      Add a crude facility for dealing with relative pointers. · fbc1c12a
      Robert Haas authored
      C doesn't have any sort of built-in understanding of a pointer
      relative to some arbitrary base address, but dynamic shared memory
      segments can be mapped at different addresses in different processes,
      so any sort of shared data structure stored within a dynamic shared
      memory segment can't use absolute pointers.  We could use something
      like Size to represent a relative pointer, but then the compiler
      provides no type-checking.  Use stupid macro tricks to get some
      type-checking.
      
      Patch originally by me.  Concept suggested by Andres Freund.  Recently
      resubmitted as part of Thomas Munro's work on dynamic shared memory
      allocation.
      
      Discussion: 20131205144434.GG12398@alap2.anarazel.de
      Discussion: CAEepm=1z5WLuNoJ80PaCvz6EtG9dN0j-KuHcHtU6QEfcPP5-qA@mail.gmail.com
      fbc1c12a
    • Robert Haas's avatar
      Clarify that pg_stat_activity.query has a length limit. · e63d4149
      Robert Haas authored
      There was always documentation of the GUC that controlled what the
      limit actually was, but previously the documentation of the field
      itself made no mention of that limit.
      
      Ian Barwick
      e63d4149
    • Alvaro Herrera's avatar
      Fix outdated comments · 5e5986b6
      Alvaro Herrera authored
      Commit 597a87cc neglected to update some comments; fix.
      
      Report and patch by Thomas Munro.
      Reviewed by Petr Jelínek.
      5e5986b6
    • Robert Haas's avatar
      Add max_parallel_workers GUC. · b460f5d6
      Robert Haas authored
      Increase the default value of the existing max_worker_processes GUC
      from 8 to 16, and add a new max_parallel_workers GUC with a maximum
      of 8.  This way, even if the maximum amount of parallel query is
      happening, there is still room for background workers that do other
      things, as originally envisioned when max_worker_processes was added.
      
      Julien Rouhaud, reviewed by Amit Kapila and by revised by me.
      b460f5d6
    • Alvaro Herrera's avatar
      Fix Windows build for 78c8c814 · 5714931b
      Alvaro Herrera authored
      Author: Petr Jelínek
      5714931b
    • Alvaro Herrera's avatar
      Permit dump/reload of not-too-large >1GB tuples · fa2fa995
      Alvaro Herrera authored
      Our documentation states that our maximum field size is 1 GB, and that
      our maximum row size of 1.6 TB.  However, while this might be attainable
      in theory with enough contortions, it is not workable in practice; for
      starters, pg_dump fails to dump tables containing rows larger than 1 GB,
      even if individual columns are well below the limit; and even if one
      does manage to manufacture a dump file containing a row that large, the
      server refuses to load it anyway.
      
      This commit enables dumping and reloading of such tuples, provided two
      conditions are met:
      
      1. no single column is larger than 1 GB (in output size -- for bytea
         this includes the formatting overhead)
      2. the whole row is not larger than 2 GB
      
      There are three related changes to enable this:
      
      a. StringInfo's API now has two additional functions that allow creating
      a string that grows beyond the typical 1GB limit (and "long" string).
      ABI compatibility is maintained.  We still limit these strings to 2 GB,
      though, for reasons explained below.
      
      b. COPY now uses long StringInfos, so that pg_dump doesn't choke
      trying to emit rows longer than 1GB.
      
      c. heap_form_tuple now uses the MCXT_ALLOW_HUGE flag in its allocation
      for the input tuple, which means that large tuples are accepted on
      input.  Note that at this point we do not apply any further limit to the
      input tuple size.
      
      The main reason to limit to 2 GB is that the FE/BE protocol uses 32 bit
      length words to describe each row; and because the documentation is
      ambiguous on its signedness and libpq does consider it signed, we cannot
      use the highest-order bit.  Additionally, the StringInfo API uses "int"
      (which is 4 bytes wide in most platforms) in many places, so we'd need
      to change that API too in order to improve, which has lots of fallout.
      
      Backpatch to 9.5, which is the oldest that has
      MemoryContextAllocExtended, a necessary piece of infrastructure.  We
      could apply to 9.4 with very minimal additional effort, but any further
      than that would require backpatching "huge" allocations too.
      
      This is the largest set of changes we could find that can be
      back-patched without breaking compatibility with existing systems.
      Fixing a bigger set of problems (for example, dumping tuples bigger than
      2GB, or dumping fields bigger than 1GB) would require changing the FE/BE
      protocol and/or changing the StringInfo API in an ABI-incompatible way,
      neither of which would be back-patchable.
      
      Authors: Daniel Vérité, Álvaro Herrera
      Reviewed by: Tomas Vondra
      Discussion: https://postgr.es/m/20160229183023.GA286012@alvherre.pgsql
      fa2fa995
    • Peter Eisentraut's avatar
      Refactor libpqwalreceiver · 78c8c814
      Peter Eisentraut authored
      The whole walreceiver API is now wrapped into a struct, like most of our
      other loadable module APIs.  The libpq connection is no longer a global
      variable in libpqwalreceiver.  Instead, it is encapsulated into a struct
      that is passed around the functions.  This allows multiple walreceivers
      to run at the same time.
      
      Add some rudimentary support for logical replication connections to
      libpqwalreceiver.
      
      These changes are mostly cosmetic and are going to be useful for the
      future logical replication patches.
      
      From: Petr Jelinek <petr@2ndquadrant.com>
      78c8c814
    • Peter Eisentraut's avatar
      Use latch instead of select() in walreceiver · 597a87cc
      Peter Eisentraut authored
      Replace use of poll()/select() by WaitLatchOrSocket(), which is more
      portable and flexible.
      
      Also change walreceiver to use its procLatch instead of a custom latch.
      
      From: Petr Jelinek <petr@2ndquadrant.com>
      597a87cc
  3. 01 Dec, 2016 7 commits
  4. 30 Nov, 2016 10 commits
    • Robert Haas's avatar
      Improve hash index bucket split behavior. · 6d46f478
      Robert Haas authored
      Previously, the right to split a bucket was represented by a
      heavyweight lock on the page number of the primary bucket page.
      Unfortunately, this meant that every scan needed to take a heavyweight
      lock on that bucket also, which was bad for concurrency.  Instead, use
      a cleanup lock on the primary bucket page to indicate the right to
      begin a split, so that scans only need to retain a pin on that page,
      which is they would have to acquire anyway, and which is also much
      cheaper.
      
      In addition to reducing the locking cost, this also avoids locking out
      scans and inserts for the entire lifetime of the split: while the new
      bucket is being populated with copies of the appropriate tuples from
      the old bucket, scans and inserts can happen in parallel.  There are
      minor concurrency improvements for vacuum operations as well, though
      the situation there is still far from ideal.
      
      This patch also removes the unworldly assumption that a split will
      never be interrupted.  With the new code, a split is done in a series
      of small steps and the system can pick up where it left off if it is
      interrupted prior to completion.  While this patch does not itself add
      write-ahead logging for hash indexes, it is clearly a necessary first
      step, since one of the things that could interrupt a split is the
      removal of electrical power from the machine performing it.
      
      Amit Kapila.  I wrote the original design on which this patch is
      based, and did a good bit of work on the comments and README through
      multiple rounds of review, but all of the code is Amit's.  Also
      reviewed by Jesper Pedersen, Jeff Janes, and others.
      
      Discussion: http://postgr.es/m/CAA4eK1LfzcZYxLoXS874Ad0+S-ZM60U9bwcyiUZx9mHZ-KCWhw@mail.gmail.com
      6d46f478
    • Tom Lane's avatar
      Doc: improve description of trim() and related functions. · 213c0f2d
      Tom Lane authored
      Per bug #14441 from Mark Pether, the documentation could be misread,
      mainly because some of the examples failed to show what happens with
      a multicharacter "characters to trim" string.  Also, while the text
      description in most of these entries was fairly clear that the
      "characters" argument is a set of characters not a substring to match,
      some of them used variant wording that was a bit less clear.
      trim() itself suffered from both deficiencies and was thus pretty
      misinterpretable.
      
      Also fix failure to explain which of LEADING/TRAILING/BOTH is the
      default.
      
      Discussion: https://postgr.es/m/20161130011710.6539.53657@wrigleys.postgresql.org
      213c0f2d
    • Heikki Linnakangas's avatar
      Make all unicode perl scripts to use strict, rearrange logic for clarity. · 021d254d
      Heikki Linnakangas authored
      The loops were a bit difficult to understand, due to breaking out of them
      early. Also fix things that perlcritic complained about.
      
      Daniel Gustafsson
      021d254d
    • Peter Eisentraut's avatar
      doc: Remove claim about large shared_buffers on Windows · 81c52728
      Peter Eisentraut authored
      Testing has shown that it is no longer correct.
      
      From: Tsunakawa, Takayuki <tsunakawa.takay@jp.fujitsu.com>
      Reviewed-by: default avataramul sul <sulamul@gmail.com>
      Discussion: http://www.postgresql.org/message-id/flat/0A3221C70F24FB45833433255569204D1F5EE995@G01JPEXMBYT05/
      81c52728
    • Peter Eisentraut's avatar
      doc: Fix typo · 2f0c7ff4
      Peter Eisentraut authored
      From: Tsunakawa, Takayuki <tsunakawa.takay@jp.fujitsu.com>
      2f0c7ff4
    • Heikki Linnakangas's avatar
      Rewrite the perl scripts to produce our Unicode conversion tables. · 1de9cc0d
      Heikki Linnakangas authored
      Generate EUC_CN mappings from gb-18030-2000.xml, because GB2312.TXT is no
      longer available.
      
      Get UHC from windows-949-2000.xml, it's more up-to-date.
      
      Plus tons more small changes. With these changes, the perl scripts
      faithfully produce the *.map files we have in the repository, from the
      external source files.
      
      In the passing, fix the Makefile to also download CP932.TXT and CP950.TXT.
      
      Based on patches by Kyotaro Horiguchi, reviewed by Daniel Gustafsson.
      
      Discussion: https://postgr.es/m/08e7892a-d55c-eefe-76e6-7910bc8dd1f3@iki.fi
      1de9cc0d
    • Heikki Linnakangas's avatar
      Remove leading zeros, for consistency with other map files. · 6c303223
      Heikki Linnakangas authored
      The common style is to pad to 4 digits.
      
      Running the current perl scripts to generate these map files would override
      this change, but the next commit will rewrite the perl scripts to produce
      this style. I'm doing this as a separate commit, to make it more clear what
      non-cosmetic changes the next commit makes to the map files.
      
      Discussion: https://postgr.es/m/08e7892a-d55c-eefe-76e6-7910bc8dd1f3@iki.fi
      6c303223
    • Heikki Linnakangas's avatar
      Remove code points < 0x80 from character conversion tables. · 2c09c93c
      Heikki Linnakangas authored
      PostgreSQL treats characters with < 0x80 leading byte  as plain ASCII, and
      they are not even passed to the conversion routines. There is no point in
      having them in the conversion tables.
      
      Everything in the tables were direct ASCII-ASCII mappings, except for two:
      * SHIFT_JIS_2004 code point 0x5C (backslash in ASCII) was mapped to Unicode
        YEN SIGN character.
      * Unicode 0x5C (backslash again) was mapped to "REVERSE SOLIDUS" in
        SHIFT_JIS_2004
      
      These mappings never had any effect, so there's no functional change from
      removing them.
      
      Discussion: https://postgr.es/m/08e7892a-d55c-eefe-76e6-7910bc8dd1f3@iki.fi
      2c09c93c
    • Heikki Linnakangas's avatar
      Remove dead stuff from pgcrypto. · b2cc748b
      Heikki Linnakangas authored
      pgp-pubkey-DISABLED test has been unused since 2006, when support for
      built-in bignum math was added (commit 1abf76e8). pgp-encrypt-DISABLED has
      been unused forever, AFAICS.
      
      Also remove a couple of unused error codes.
      b2cc748b
    • Tom Lane's avatar
      Fix bogus handling of JOIN_UNIQUE_OUTER/INNER cases for parallel joins. · 41e2b84c
      Tom Lane authored
      consider_parallel_nestloop passed the wrong jointype down to its
      subroutines for JOIN_UNIQUE_INNER cases (it should pass JOIN_INNER), and it
      thought that it could pass paths other than innerrel->cheapest_total_path
      to create_unique_path, which create_unique_path is not on board with.
      These bugs would lead to assertion failures or other errors, suggesting
      that this code path hasn't been tested much.
      
      hash_inner_and_outer's code for parallel join effectively treated both
      JOIN_UNIQUE_OUTER and JOIN_UNIQUE_INNER the same as JOIN_INNER (for
      different reasons :-(), leading to incorrect plans that treated a semijoin
      as if it were a plain join.
      
      Michael Day submitted a test case demonstrating that hash_inner_and_outer
      failed for JOIN_UNIQUE_OUTER, and I found the other cases through code
      review.
      
      Report: https://postgr.es/m/D0E8A029-D1AC-42E8-979A-5DE4A77E4413@rcmail.com
      41e2b84c
  5. 29 Nov, 2016 7 commits