1. 10 Mar, 2017 7 commits
    • Tom Lane's avatar
      Fix hard-coded relkind constants in assorted src/bin files. · fcd778eb
      Tom Lane authored
      Although it's reasonable to expect that most of these constants will
      never change, that does not make it good programming style to hard-code
      the value rather than using the RELKIND_FOO macros.
      
      Discussion: https://postgr.es/m/11145.1488931324@sss.pgh.pa.us
      fcd778eb
    • Tom Lane's avatar
      Fix portability problem in Catalog.pm. · 15bb93e2
      Tom Lane authored
      Commit 7666e73a introduced a dependency on filehandles' input_line_number
      method, but apparently that's a Perl neologism.  Use $. instead, which
      works at least back to Perl 5.10, and hopefully back to 5.8.
      
      Jeff Janes
      
      Discussion: https://postgr.es/m/CAMkU=1wuQW=xVfu-14A4VCvxO0ohkD3m9vk6HOj_dprQoKNAQw@mail.gmail.com
      15bb93e2
    • Tom Lane's avatar
      Fix hard-coded relkind constants in psql/describe.c. · 395bfaae
      Tom Lane authored
      Although it's reasonable to expect that most of these constants will
      never change, that does not make it good programming style to hard-code
      the value rather than using the RELKIND_FOO macros.
      
      Discussion: https://postgr.es/m/11145.1488931324@sss.pgh.pa.us
      395bfaae
    • Stephen Frost's avatar
      pgstattuple: Fix typo partitiond -> partitioned · 90e91e24
      Stephen Frost authored
      Pointed out by Michael Paquier
      90e91e24
    • Andres Freund's avatar
      Add amcheck extension to contrib. · 3717dc14
      Andres Freund authored
      This is the beginning of a collection of SQL-callable functions to
      verify the integrity of data files.  For now it only contains code to
      verify B-Tree indexes.
      
      This adds two SQL-callable functions, validating B-Tree consistency to
      a varying degree.  Check the, extensive, docs for details.
      
      The goal is to later extend the coverage of the module to further
      access methods, possibly including the heap.  Once checks for
      additional access methods exist, we'll likely add some "dispatch"
      functions that cover multiple access methods.
      
      Author: Peter Geoghegan, editorialized by Andres Freund
      Reviewed-By: Andres Freund, Tomas Vondra, Thomas Munro,
         Anastasia Lubennikova, Robert Haas, Amit Langote
      Discussion: CAM3SWZQzLMhMwmBqjzK+pRKXrNUZ4w90wYMUWfkeV8mZ3Debvw@mail.gmail.com
      3717dc14
    • Tom Lane's avatar
      Fix hard-coded relkind constants in pg_dump.c. · fe797b4a
      Tom Lane authored
      Although it's reasonable to expect that most of these constants will
      never change, that does not make it good programming style to hard-code
      the value rather than using the RELKIND_FOO macros.  There were only
      a few such violations, and all relatively new AFAICT.
      
      Existing style is mostly to inject relkind values into constructed
      query strings using %c.  I did not bother to touch places that did it
      like that, but really a better technique is to stringify the RELKIND
      macro, at least in places where you'd want single quotes around the
      code character.  That avoids any runtime effort and keeps the RELKIND
      symbol close to where it's used.
      
      Discussion: https://postgr.es/m/11145.1488931324@sss.pgh.pa.us
      fe797b4a
    • Tom Lane's avatar
      Make CppAsString2() more visible in c.h. · 9cfc4dee
      Tom Lane authored
      For some reason this standard C string-processing hack was buried in an
      NLS-related section of c.h.  Put it beside CppAsString() so that people
      are more likely to find it and not be tempted to reinvent local copies,
      as I nearly did.  And provide a more helpful comment, too.
      9cfc4dee
  2. 09 Mar, 2017 13 commits
  3. 08 Mar, 2017 20 commits
    • Tom Lane's avatar
      Bring plpgsql into line with header inclusion policy. · 08da5285
      Tom Lane authored
      We have a project policy that every .c file should start by including
      postgres.h, postgres_fe.h, or c.h as appropriate; and then there is no
      need for any .h file to explicitly include any of these.  (The core
      reason for this policy is to make it easy to verify that pg_config_os.h
      is included before any system headers such as <stdio.h>; without that,
      we have portability issues on some platforms due to variation in largefile
      options across different modules in the backend.  Also, if .h files were
      responsible for choosing which of these key headers to include, .h files
      that need to be includable in either frontend or backend compiles would be
      in trouble.)
      
      plpgsql was blithely ignoring this policy, so whack it upside the head
      until it complies.  I also chose to standardize on including plpgsql's
      own .h files after all core-system headers that it pulls in.  That
      could've been done either way, but this way seems saner.
      
      Discussion: https://postgr.es/m/CAEepm=2zCoeq3QxVwhS5DFeUh=yU6z81pbWMgfOB8OzyiBwxzw@mail.gmail.com
      Discussion: https://postgr.es/m/11634.1488932128@sss.pgh.pa.us
      08da5285
    • Tom Lane's avatar
      Document intentional violations of header inclusion policy. · d6b059ec
      Tom Lane authored
      Although there are good reasons for our policy of including postgres.h
      as the first #include in every .c file, never from .h files, there are
      two places where it seems expedient to violate the policy because the
      alternative is to modify externally-supplied .c files.  (In the case
      of the regexp library, the idea that it's externally-supplied is kind
      of at odds with reality, but I haven't entirely given up hope that it
      will become a standalone project some day.)  Add some comments to make
      it explicit that this is a policy violation and provide the reasoning.
      
      In passing, move #include "miscadmin.h" out of regcomp.c and into
      regcustom.h, which is where it should be if we're taking this reasoning
      seriously at all.
      
      Discussion: https://postgr.es/m/CAEepm=2zCoeq3QxVwhS5DFeUh=yU6z81pbWMgfOB8OzyiBwxzw@mail.gmail.com
      Discussion: https://postgr.es/m/11634.1488932128@sss.pgh.pa.us
      d6b059ec
    • Tom Lane's avatar
      Suppress compiler warning in slab.c. · 2f899e7d
      Tom Lane authored
      Compilers that don't realize that elog(ERROR) doesn't return
      complained that SlabRealloc() failed to return a value.
      
      While at it, fix the rather muddled header comment for the function.
      
      Per buildfarm.
      2f899e7d
    • Tom Lane's avatar
      Suppress compiler warning in non-USE_LIBXML builds. · f3791210
      Tom Lane authored
      Compilers that don't realize that ereport(ERROR) doesn't return
      complained that XmlTableGetValue() failed to return a value.
      
      Also, make XmlTableFetchRow's non-USE_LIBXML case look more like
      the other ones.  As coded, it could lead to "unreachable code"
      warnings with USE_LIBXML enabled.
      
      Oversights in commit fcec6caa.  Per buildfarm.
      f3791210
    • Tom Lane's avatar
      Put back <float.h> in a few files that need it for _isnan(). · 86dbbf20
      Tom Lane authored
      Further fallout from commit c29aff95: there are some files that need
      <float.h>, and were getting it from datatype/timestamp.h, but it was not
      apparent in my (tgl's) testing because the requirement for <float.h>
      exists only on certain Windows toolchains.
      
      Report and patch by David Rowley.
      
      Discussion: https://postgr.es/m/CAKJS1f-BHceaFzZScFapDV48gUVM2CAOBfhkgffdqXzFb+kwew@mail.gmail.com
      86dbbf20
    • Stephen Frost's avatar
      Expose explain's SUMMARY option · f9b1a0dd
      Stephen Frost authored
      This exposes the existing explain summary option to users to allow them
      to choose if they wish to have the planning time and totalled run time
      included in the EXPLAIN result.  The existing default behavior is
      retained if SUMMARY is not specified- running explain without analyze
      will not print the summary lines (just the planning time, currently)
      while running explain with analyze will include the summary lines (both
      the planning time and the totalled execution time).
      
      Users who wish to see the summary information for plain explain can now
      use: EXPLAIN (SUMMARY ON) query;  Users who do not want to have the
      summary printed for an analyze run can use:
      EXPLAIN (ANALYZE ON, SUMMARY OFF) query;
      
      With this, we can now also have EXPLAIN ANALYZE queries included in our
      regression tests by using:
      EXPLAIN (ANALYZE ON, TIMING OFF, SUMMARY off) query;
      
      I went ahead and added an example of this, which will hopefully not make
      the buildfarm complain.
      
      Author: Ashutosh Bapat
      Discussion: https://postgr.es/m/CAFjFpReE5z2h98U2Vuia8hcEkpRRwrauRjHmyE44hNv8-xk+XA@mail.gmail.com
      f9b1a0dd
    • Tom Lane's avatar
      Silence compiler warnings in BitmapHeapNext(). · 15d03e59
      Tom Lane authored
      Same disease as 270d7dd8.
      15d03e59
    • Tom Lane's avatar
      Use doubly-linked block lists in aset.c to reduce large-chunk overhead. · ff97741b
      Tom Lane authored
      Large chunks (those too large for any palloc freelist) are managed as
      separate blocks.  Formerly, realloc'ing or pfree'ing such a chunk required
      O(N) time in a context with N blocks, since we had to traipse down the
      singly-linked block list to locate the block's predecessor before we could
      fix the list links.  This can result in O(N^2) runtime in situations where
      large numbers of such chunks are manipulated within one context.  Cases
      like that were not foreseen in the original design of aset.c, and indeed
      didn't arise until fairly recently.  But such problems can now occur in
      reorderbuffer.c and in hash joining, both of which make repeated large
      requests without scaling up their request size as they do so, and which
      will free their requests in not-necessarily-LIFO order.
      
      To fix, change the block list from singly-linked to doubly-linked.
      This adds another 4 or 8 bytes to ALLOC_BLOCKHDRSZ, but that doesn't
      seem like unacceptable overhead, since aset.c's blocks are normally
      8K or more, and never less than 1K in current practice.
      
      In passing, get rid of some redundant AllocChunkGetPointer() calls in
      AllocSetRealloc (the compiler might be smart enough to optimize these
      away anyway, but no need to assume that) and improve AllocSetCheck's
      checking of block header fields.
      
      Back-patch to 9.4 where reorderbuffer.c appeared.  We could take this
      further back, but currently there's no evidence that it would be useful.
      
      Discussion: https://postgr.es/m/CAMkU=1x1hvue1XYrZoWk_omG0Ja5nBvTdvgrOeVkkeqs71CV8g@mail.gmail.com
      ff97741b
    • Robert Haas's avatar
      Support parallel bitmap heap scans. · f35742cc
      Robert Haas authored
      The index is scanned by a single process, but then all cooperating
      processes can iterate jointly over the resulting set of heap blocks.
      In the future, we might also want to support using a parallel bitmap
      index scan to set up for a parallel bitmap heap scan, but that's a
      job for another day.
      
      Dilip Kumar, with some corrections and cosmetic changes by me.  The
      larger patch set of which this is a part has been reviewed and tested
      by (at least) Andres Freund, Amit Khandekar, Tushar Ahuja, Rafia
      Sabih, Haribabu Kommi, Thomas Munro, and me.
      
      Discussion: http://postgr.es/m/CAFiTN-uc4=0WxRGfCzs-xfkMYcSEWUC-Fon6thkJGjkh9i=13A@mail.gmail.com
      f35742cc
    • Fujii Masao's avatar
      Prevent logical rep workers with removed subscriptions from starting. · 4eafdcc2
      Fujii Masao authored
      Any logical rep workers must have their subscription entries in
      pg_subscription. To ensure this, we need to prevent the launcher
      from starting new worker corresponding to the subscription that
      DROP SUBSCRIPTION command is removing. To implement this,
      previously LogicalRepLauncherLock was introduced and held until
      the end of transaction running DROP SUBSCRIPTION. But using
      LWLock for that purpose was not valid.
      
      Instead, this commit changes DROP SUBSCRIPTION so that it takes
      AccessExclusiveLock on pg_subscription, in order to ensure that
      the launcher cannot see any subscriptions being removed. Also this
      commit gets rid of LogicalRepLauncherLock.
      
      Patch by me, reviewed by Petr Jelinek
      
      Discussion: https://www.postgresql.org/message-id/CAHGQGwHPi8ky-yANFfe0sgmhKtsYcQLTnKx07bW9S7-Rn1746w@mail.gmail.com
      4eafdcc2
    • Alvaro Herrera's avatar
      Fix XMLTABLE on older libxml2 · a9f66f92
      Alvaro Herrera authored
      libxml2 older than 2.9.1 does not have xmlXPathSetContextNode (released
      in 2013, so reasonable platforms have trouble).  That function is fairly
      trivial, so I have inlined it in the one added caller.  This passes
      tests on my machine; let's see what the buildfarm thinks about it.
      
      Per joint complaint from Tom Lane and buildfarm.
      a9f66f92
    • Robert Haas's avatar
      Add tests for foreign partitions. · 0d130c7a
      Robert Haas authored
      Amit Langote, reviewed by Ashutosh Bapat
      
      Discussion: http://postgr.es/m/475dd52c-be4a-9b32-6d54-3044a00c93d9@lab.ntt.co.jp
      0d130c7a
    • Alvaro Herrera's avatar
      Support XMLTABLE query expression · fcec6caa
      Alvaro Herrera authored
      XMLTABLE is defined by the SQL/XML standard as a feature that allows
      turning XML-formatted data into relational form, so that it can be used
      as a <table primary> in the FROM clause of a query.
      
      This new construct provides significant simplicity and performance
      benefit for XML data processing; what in a client-side custom
      implementation was reported to take 20 minutes can be executed in 400ms
      using XMLTABLE.  (The same functionality was said to take 10 seconds
      using nested PostgreSQL XPath function calls, and 5 seconds using
      XMLReader under PL/Python).
      
      The implemented syntax deviates slightly from what the standard
      requires.  First, the standard indicates that the PASSING clause is
      optional and that multiple XML input documents may be given to it; we
      make it mandatory and accept a single document only.  Second, we don't
      currently support a default namespace to be specified.
      
      This implementation relies on a new executor node based on a hardcoded
      method table.  (Because the grammar is fixed, there is no extensibility
      in the current approach; further constructs can be implemented on top of
      this such as JSON_TABLE, but they require changes to core code.)
      
      Author: Pavel Stehule, Álvaro Herrera
      Extensively reviewed by: Craig Ringer
      Discussion: https://postgr.es/m/CAFj8pRAgfzMD-LoSmnMGybD0WsEznLHWap8DO79+-GTRAPR4qA@mail.gmail.com
      fcec6caa
    • Tom Lane's avatar
      Silence compiler warnings in tbm_prepare_shared_iterate(). · 270d7dd8
      Tom Lane authored
      Maybe Robert's compiler can convince itself that these variables are
      never used uninitialized, but mine can't.
      270d7dd8
    • Peter Eisentraut's avatar
      pg_waldump: Remove extra newline in error message · 91124461
      Peter Eisentraut authored
      fatal_error() already prints out a trailing newline.
      91124461
    • Fujii Masao's avatar
      Fix connection leak in DROP SUBSCRIPTION command, take 2. · 77d21970
      Fujii Masao authored
      Commit 898a792e fixed the connection
      leak issue, but it was an unreliable way of bugfix. This bugfix was
      assuming that walrcv_command() subroutine cannot throw an error,
      but it's untenable assumption. For example, if it will be changed
      so that an error is thrown, connection leak issue will happen again.
      
      This patch ensures that the connection is closed even when
      walrcv_command() subroutine throws an error.
      
      Patch by me, reviewed by Petr Jelinek and Michael Paquier
      
      Discussion: https://www.postgresql.org/message-id/2058.1487704345@sss.pgh.pa.us
      77d21970
    • Peter Eisentraut's avatar
      Create INSTALL file via XSLT · 044d9efb
      Peter Eisentraut authored
      As before, create an INSTALL.html file for processing with lynx, but use
      xsltproc and a new XSLT stylesheet instead of jade and DSSSL.
      
      Replacing jade with xsltproc removes jade from the requirements for
      distribution building.
      Reviewed-by: default avatarMagnus Hagander <magnus@hagander.net>
      044d9efb
    • Robert Haas's avatar
      Remove inclusion of postgres.h from a few header files. · d9528604
      Robert Haas authored
      Thomas Munro, per project policy articuled by Andres Freund and
      Tom Lane.
      
      Discussion: http://postgr.es/m/CAEepm=2zCoeq3QxVwhS5DFeUh=yU6z81pbWMgfOB8OzyiBwxzw@mail.gmail.com
      d9528604
    • Robert Haas's avatar
      Fix parallel index and index-only scans to fall back to serial. · 09529a70
      Robert Haas authored
      Parallel executor nodes can't assume that parallel execution will
      happen in every case where the plan calls for it, because it might
      not work out that way.  However, parallel index scan and parallel
      index-only scan failed to do the right thing here.  Repair.
      
      Amit Kapila, per a report from me.
      
      Discussion: http://postgr.es/m/CAA4eK1Kq5qb_u2AOoda5XBB91vVWz90w=LgtRLgsssriS8pVTw@mail.gmail.com
      09529a70
    • Robert Haas's avatar
      tidbitmap: Support shared iteration. · 98e6e890
      Robert Haas authored
      When a shared iterator is used, each call to tbm_shared_iterate()
      returns a result that has not yet been returned to any process
      attached to the shared iterator.  In other words, each cooperating
      processes gets a disjoint subset of the full result set, but all
      results are returned exactly once.
      
      This is infrastructure for parallel bitmap heap scan.
      
      Dilip Kumar.  The larger patch set of which this is a part has been
      reviewed and tested by (at least) Andres Freund, Amit Khandekar,
      Tushar Ahuja, Rafia Sabih, Haribabu Kommi, and Thomas Munro.
      
      Discussion: http://postgr.es/m/CAFiTN-uc4=0WxRGfCzs-xfkMYcSEWUC-Fon6thkJGjkh9i=13A@mail.gmail.com
      98e6e890