1. 02 Apr, 2019 2 commits
    • Michael Paquier's avatar
      Add progress reporting to pg_checksums · 280e5f14
      Michael Paquier authored
      This adds a new option to pg_checksums called -P/--progress, showing
      every second some information about the computation state of an
      operation for --check and --enable (--disable only updates the control
      file and is quick).  This requires a pre-scan of the data folder so as
      the total size of checksummable items can be calculated, and then it
      gets compared to the amount processed.
      
      Similarly to what is done for pg_rewind and pg_basebackup, the
      information printed in the progress report consists of the current
      amount of data computed and the total amount of data to compute.  This
      could be extended later on.
      
      Author: Michael Banck, Bernd Helmle
      Reviewed-by: Fabien Coelho, Michael Paquier
      Discussion: https://postgr.es/m/1535719851.1286.17.camel@credativ.de
      280e5f14
    • Thomas Munro's avatar
      Add wal_recycle and wal_init_zero GUCs. · 475861b2
      Thomas Munro authored
      On at least ZFS, it can be beneficial to create new WAL files every
      time and not to bother zero-filling them.  Since it's not clear which
      other filesystems might benefit from one or both of those things,
      add individual GUCs to control those two behaviors independently and
      make only very general statements in the docs.
      
      Author: Jerry Jelinek, with some adjustments by Thomas Munro
      Reviewed-by: Alvaro Herrera, Andres Freund, Tomas Vondra, Robert Haas and others
      Discussion: https://postgr.es/m/CACPQ5Fo00QR7LNAcd1ZjgoBi4y97%2BK760YABs0vQHH5dLdkkMA%40mail.gmail.com
      475861b2
  2. 01 Apr, 2019 17 commits
    • Andres Freund's avatar
      Only allow heap in a number of contrib modules. · 4b826641
      Andres Freund authored
      Contrib modules pgrowlocks, pgstattuple and some functionality in
      pageinspect currently only supports the heap table AM. As they are all
      concerned with low-level details that aren't reasonably exposed via
      tableam, error out if invoked on a non heap relation.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20180703070645.wchpu5muyto5n647@alap3.anarazel.de
      4b826641
    • Andres Freund's avatar
      tableam: Add table_finish_bulk_insert(). · d45e4015
      Andres Freund authored
      This replaces the previous calls of heap_sync() in places using
      bulk-insert. By passing in the flags used for bulk-insert the AM can
      decide (first at insert time and then during the finish call) which of
      the optimizations apply to it, and what operations are necessary to
      finish a bulk insert operation.
      
      Also change HEAP_INSERT_* flags to TABLE_INSERT, and rename hi_options
      to ti_options.
      
      These changes are made even in copy.c, which hasn't yet been converted
      to tableam. There's no harm in doing so.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20180703070645.wchpu5muyto5n647@alap3.anarazel.de
      d45e4015
    • Tom Lane's avatar
      Restrict pgbench's zipfian parameter to ensure good performance. · 26a76cb6
      Tom Lane authored
      Remove the code that supported zipfian distribution parameters less
      than 1.0, as it had undocumented performance hazards, and it's not
      clear that the case is useful enough to justify either fixing or
      documenting those hazards.
      
      Also, since the code path for parameter > 1.0 could perform badly
      for values very close to 1.0, establish a minimum allowed value
      of 1.001.  This solution seems superior to the previous vague
      documentation warning about small values not performing well.
      
      Fabien Coelho, per a gripe from Tomas Vondra
      
      Discussion: https://postgr.es/m/b5e172e9-ad22-48a3-86a3-589afa20e8f7@2ndquadrant.com
      26a76cb6
    • Thomas Munro's avatar
      Fix deadlock in heap_compute_xid_horizon_for_tuples(). · 4fd05bb5
      Thomas Munro authored
      We can't call code that uses syscache while we hold buffer locks
      on a catalog relation.  If passed such a relation, just fall back
      to the general effective_io_concurrency GUC rather than trying to
      look up the containing tablespace's IO concurrency setting.
      
      We might find a better way to control prefetching in follow-up
      work, but for now this is enough to avoid the deadlock introduced
      by commit 558a9165.
      
      Reviewed-by: Andres Freund
      Diagnosed-by: Peter Geoghegan
      Discussion: https://postgr.es/m/CA%2BhUKGLCwPF0S4Mk7S8qw%2BDK0Bq65LueN9rofAA3HHSYikW-Zw%40mail.gmail.com
      Discussion: https://postgr.es/m/962831d8-c18d-180d-75fb-8b842e3a2742%40chrullrich.net
      4fd05bb5
    • Tom Lane's avatar
      Improve documentation about our XML functionality. · 12d46ac3
      Tom Lane authored
      Add a section explaining how our XML features depart from current
      versions of the SQL standard.  Update and clarify the descriptions
      of some XML functions.
      
      Chapman Flack, reviewed by Ryan Lambert
      
      Discussion: https://postgr.es/m/5BD1284C.1010305@anastigmatix.net
      Discussion: https://postgr.es/m/5C81F8C0.6090901@anastigmatix.net
      Discussion: https://postgr.es/m/CAN-V+g-6JqUQEQZ55Q3toXEN6d5Ez5uvzL4VR+8KtvJKj31taw@mail.gmail.com
      12d46ac3
    • Tom Lane's avatar
    • Peter Eisentraut's avatar
      Unified logging system for command-line programs · cc8d4151
      Peter Eisentraut authored
      This unifies the various ad hoc logging (message printing, error
      printing) systems used throughout the command-line programs.
      
      Features:
      
      - Program name is automatically prefixed.
      
      - Message string does not end with newline.  This removes a common
        source of inconsistencies and omissions.
      
      - Additionally, a final newline is automatically stripped, simplifying
        use of PQerrorMessage() etc., another common source of mistakes.
      
      - I converted error message strings to use %m where possible.
      
      - As a result of the above several points, more translatable message
        strings can be shared between different components and between
        frontends and backend, without gratuitous punctuation or whitespace
        differences.
      
      - There is support for setting a "log level".  This is not meant to be
        user-facing, but can be used internally to implement debug or
        verbose modes.
      
      - Lazy argument evaluation, so no significant overhead if logging at
        some level is disabled.
      
      - Some color in the messages, similar to gcc and clang.  Set
        PG_COLOR=auto to try it out.  Some colors are predefined, but can be
        customized by setting PG_COLORS.
      
      - Common files (common/, fe_utils/, etc.) can handle logging much more
        simply by just using one API without worrying too much about the
        context of the calling program, requiring callbacks, or having to
        pass "progname" around everywhere.
      
      - Some programs called setvbuf() to make sure that stderr is
        unbuffered, even on Windows.  But not all programs did that.  This
        is now done centrally.
      
      Soft goals:
      
      - Reduces vertical space use and visual complexity of error reporting
        in the source code.
      
      - Encourages more deliberate classification of messages.  For example,
        in some cases it wasn't clear without analyzing the surrounding code
        whether a message was meant as an error or just an info.
      
      - Concepts and terms are vaguely aligned with popular logging
        frameworks such as log4j and Python logging.
      
      This is all just about printing stuff out.  Nothing affects program
      flow (e.g., fatal exits).  The uses are just too varied to do that.
      Some existing code had wrappers that do some kind of print-and-exit,
      and I adapted those.
      
      I tried to keep the output mostly the same, but there is a lot of
      historical baggage to unwind and special cases to consider, and I
      might not always have succeeded.  One significant change is that
      pg_rewind used to write all error messages to stdout.  That is now
      changed to stderr.
      Reviewed-by: default avatarDonald Dong <xdong@csumb.edu>
      Reviewed-by: default avatarArthur Zakirov <a.zakirov@postgrespro.ru>
      Discussion: https://www.postgresql.org/message-id/flat/6a609b43-4f57-7348-6480-bd022f924310@2ndquadrant.com
      cc8d4151
    • Alexander Korotkov's avatar
      Throw error in jsonb_path_match() when result is not single boolean · b4cc19ab
      Alexander Korotkov authored
      jsonb_path_match() checks if jsonb document matches jsonpath query.  Therefore,
      jsonpath query should return single boolean.  Currently, if result of jsonpath
      is not a single boolean, NULL is returned independently whether silent mode
      is on or off.  But that appears to be wrong when silent mode is off.  This
      commit makes jsonb_path_match() throw an error in this case.
      
      Author: Nikita Glukhov
      b4cc19ab
    • Alexander Korotkov's avatar
      Restrict some cases in parsing numerics in jsonpath · 2e643501
      Alexander Korotkov authored
      Jsonpath now accepts integers with leading zeroes and floats starting with
      a dot.  However, SQL standard requires to follow JSON specification, which
      doesn't allow none of these cases.  Our json[b] datatypes also restrict that.
      So, restrict it in jsonpath altogether.
      
      Author: Nikita Glukhov
      2e643501
    • Alexander Korotkov's avatar
      GIN support for @@ and @? jsonpath operators · 0a02e2ae
      Alexander Korotkov authored
      This commit makes existing GIN operator classes jsonb_ops and json_path_ops
      support "jsonb @@ jsonpath" and "jsonb @? jsonpath" operators.  Basic idea is
      to extract statements of following form out of jsonpath.
      
       key1.key2. ... .keyN = const
      
      The rest of jsonpath is rechecked from heap.
      
      Catversion is bumped.
      
      Discussion: https://postgr.es/m/fcc6fc6a-b497-f39a-923d-aa34d0c588e8%402ndQuadrant.com
      Author: Nikita Glukhov, Alexander Korotkov
      Reviewed-by: Jonathan Katz, Pavel Stehule
      0a02e2ae
    • Peter Eisentraut's avatar
      Catch syntax error in generated column definition · 72419117
      Peter Eisentraut authored
      The syntax
      
          GENERATED BY DEFAULT AS (expr)
      
      is not allowed but we have to accept it in the grammar to avoid
      shift/reduce conflicts because of the similar syntax for identity
      columns.  The existing code just ignored this, incorrectly.  Add an
      explicit error check and a bespoke error message.
      Reported-by: default avatarJustin Pryzby <pryzby@telsasoft.com>
      72419117
    • Michael Paquier's avatar
      Fix thinko in allocation call during MVC list deserialization · 4ae7f02b
      Michael Paquier authored
      Spotted by Coverity.
      4ae7f02b
    • Noah Misch's avatar
      Update HINT for pre-existing shared memory block. · 5a907404
      Noah Misch authored
      One should almost always terminate an old process, not use a manual
      removal tool like ipcrm.  Removal of the ipcclean script eleven years
      ago (39627b1a) and its non-replacement
      corroborate that manual shm removal is now a niche goal.  Back-patch to
      9.4 (all supported versions).
      
      Reviewed by Daniel Gustafsson and Kyotaro HORIGUCHI.
      
      Discussion: https://postgr.es/m/20180812064815.GB2301738@rfd.leadboat.com
      5a907404
    • Andres Freund's avatar
      tableam: bitmap table scan. · bfbcad47
      Andres Freund authored
      This moves bitmap heap scan support to below an optional tableam
      callback. It's optional as the whole concept of bitmap heapscans is
      fairly block specific.
      
      This basically moves the work previously done in bitgetpage() into the
      new scan_bitmap_next_block callback, and the direct poking into the
      buffer done in BitmapHeapNext() into the new scan_bitmap_next_tuple()
      callback.
      
      The abstraction is currently somewhat leaky because
      nodeBitmapHeapscan.c's prefetching and visibilitymap based logic
      remains - it's likely that we'll later have to move more into the
      AM. But it's not trivial to do so without introducing a significant
      amount of code duplication between the AMs, so that's a project for
      later.
      
      Note that now nodeBitmapHeapscan.c and the associated node types are a
      bit misnamed. But it's not clear whether renaming wouldn't be a cure
      worse than the disease. Either way, that'd be best done in a separate
      commit.
      
      Author: Andres Freund
      Reviewed-By: Robert Haas (in an older version)
      Discussion: https://postgr.es/m/20180703070645.wchpu5muyto5n647@alap3.anarazel.de
      bfbcad47
    • Andres Freund's avatar
      tableam: sample scan. · 73c954d2
      Andres Freund authored
      This moves sample scan support to below tableam. It's not optional as
      there is, in contrast to e.g. bitmap heap scans, no alternative way to
      perform tablesample queries. If an AM can't deal with the block based
      API, it will have to throw an ERROR.
      
      The tableam callbacks for this are block based, but given the current
      TsmRoutine interface, that seems to be required.
      
      The new interface doesn't require TsmRoutines to perform visibility
      checks anymore - that requires the TsmRoutine to know details about
      the AM, which we want to avoid.  To continue to allow taking the
      returned number of tuples account SampleScanState now has a donetuples
      field (which previously e.g. existed in SystemRowsSamplerData), which
      is only incremented after the visibility check succeeds.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20180703070645.wchpu5muyto5n647@alap3.anarazel.de
      73c954d2
    • Andres Freund's avatar
      tableam: Formatting and other minor cleanups. · 4bb50236
      Andres Freund authored
      The superflous heapam_xlog.h includes were reported by Peter
      Geoghegan.
      4bb50236
    • Peter Geoghegan's avatar
      Fix nbtree high key "continuescan" row compare bug. · 76a39f22
      Peter Geoghegan authored
      Commit 29b64d1d mishandled skipping over truncated high key attributes
      during row comparisons.  The row comparison key matching loop would loop
      forever when a truncated attribute was encountered for a row compare
      subkey.  Fix by following the example of other code in the loop: advance
      the current subkey, or break out of the loop when the last subkey is
      reached.
      
      Add test coverage for the relevant _bt_check_rowcompare() code path.
      The new test case is somewhat tied to nbtree implementation details,
      which isn't ideal, but seems unavoidable.
      76a39f22
  3. 31 Mar, 2019 7 commits
  4. 30 Mar, 2019 7 commits
    • Tom Lane's avatar
      Speed up planning when partitions can be pruned at plan time. · 428b260f
      Tom Lane authored
      Previously, the planner created RangeTblEntry and RelOptInfo structs
      for every partition of a partitioned table, even though many of them
      might later be deemed uninteresting thanks to partition pruning logic.
      This incurred significant overhead when there are many partitions.
      Arrange to postpone creation of these data structures until after
      we've processed the query enough to identify restriction quals for
      the partitioned table, and then apply partition pruning before not
      after creation of each partition's data structures.  In this way
      we need not open the partition relations at all for partitions that
      the planner has no real interest in.
      
      For queries that can be proven at plan time to access only a small
      number of partitions, this patch improves the practical maximum
      number of partitions from under 100 to perhaps a few thousand.
      
      Amit Langote, reviewed at various times by Dilip Kumar, Jesper Pedersen,
      Yoshikazu Imai, and David Rowley
      
      Discussion: https://postgr.es/m/9d7c5112-cb99-6a47-d3be-cf1ee6862a1d@lab.ntt.co.jp
      428b260f
    • Tomas Vondra's avatar
      Fix compiler warnings in multivariate MCV code · ad3107b9
      Tomas Vondra authored
      Compiler warnings were observed on gcc 3.4.6 (on gaur).
      
      The assert is unnecessary, as the indexes are uint16 and so always >= 0.
      
      Reported-by: Tom Lane
      ad3107b9
    • Tomas Vondra's avatar
      Additional fixes of memory alignment in pg_mcv_list code · ea4e1c0e
      Tomas Vondra authored
      Commit d85e0f36 tried to fix memory alignment issues in serialization
      and deserialization of pg_mcv_list values, but it was a few bricks shy.
      The arrays of uint16 indexes in serialized items was not aligned, and
      the both the values and isnull flags were using the same pointer.
      
      Per investigation by Tom Lane on gaur.
      ea4e1c0e
    • Tom Lane's avatar
      Avoid crash in partitionwise join planning under GEQO. · 7ad6498f
      Tom Lane authored
      While trying to plan a partitionwise join, we may be faced with cases
      where one or both input partitions for a particular segment of the join
      have been pruned away.  In HEAD and v11, this is problematic because
      earlier processing didn't bother to make a pruned RelOptInfo fully
      valid.  With an upcoming patch to make partition pruning more efficient,
      this'll be even more problematic because said RelOptInfo won't exist at
      all.
      
      The existing code attempts to deal with this by retroactively making the
      RelOptInfo fully valid, but that causes crashes under GEQO because join
      planning is done in a short-lived memory context.  In v11 we could
      probably have fixed this by switching to the planner's main context
      while fixing up the RelOptInfo, but that idea doesn't scale well to the
      upcoming patch.  It would be better not to mess with the base-relation
      data structures during join planning, anyway --- that's just a recipe
      for order-of-operations bugs.
      
      In many cases, though, we don't actually need the child RelOptInfo,
      because if the input is certainly empty then the join segment's result
      is certainly empty, so we can skip making a join plan altogether.  (The
      existing code ultimately arrives at the same conclusion, but only after
      doing a lot more work.)  This approach works except when the pruned-away
      partition is on the nullable side of a LEFT, ANTI, or FULL join, and the
      other side isn't pruned.  But in those cases the existing code leaves a
      lot to be desired anyway --- the correct output is just the result of
      the unpruned side of the join, but we were emitting a useless outer join
      against a dummy Result.  Pending somebody writing code to handle that
      more nicely, let's just abandon the partitionwise-join optimization in
      such cases.
      
      When the modified code skips making a join plan, it doesn't make a
      join RelOptInfo either; this requires some upper-level code to
      cope with nulls in part_rels[] arrays.  We would have had to have
      that anyway after the upcoming patch.
      
      Back-patch to v11 since the crash is demonstrable there.
      
      Discussion: https://postgr.es/m/8305.1553884377@sss.pgh.pa.us
      7ad6498f
    • Peter Eisentraut's avatar
      doc: Fix typo · ef6576f5
      Peter Eisentraut authored
      Author: Justin Pryzby <pryzby@telsasoft.com>
      ef6576f5
    • Peter Eisentraut's avatar
      Generated columns · fc22b662
      Peter Eisentraut authored
      This is an SQL-standard feature that allows creating columns that are
      computed from expressions rather than assigned, similar to a view or
      materialized view but on a column basis.
      
      This implements one kind of generated column: stored (computed on
      write).  Another kind, virtual (computed on read), is planned for the
      future, and some room is left for it.
      Reviewed-by: default avatarMichael Paquier <michael@paquier.xyz>
      Reviewed-by: default avatarPavel Stehule <pavel.stehule@gmail.com>
      Discussion: https://www.postgresql.org/message-id/flat/b151f851-4019-bdb1-699e-ebab07d2f40a@2ndquadrant.com
      fc22b662
    • Peter Eisentraut's avatar
      Small code simplification for REINDEX CONCURRENTLY · 6b8b5364
      Peter Eisentraut authored
      This was left over from an earlier code structure.
      6b8b5364
  5. 29 Mar, 2019 7 commits