1. 25 Nov, 2020 12 commits
    • Alvaro Herrera's avatar
      Avoid spurious waits in concurrent indexing · c98763bf
      Alvaro Herrera authored
      In the various waiting phases of CREATE INDEX CONCURRENTLY (CIC) and
      REINDEX CONCURRENTLY (RC), we wait for other processes to release their
      snapshots; this is necessary in general for correctness.  However,
      processes doing CIC in other tables cannot possibly affect CIC or RC
      done in "this" table, so we don't need to wait for those.  This commit
      adds a flag in MyProc->statusFlags to indicate that the current process
      is doing CIC, so that other processes doing CIC or RC can ignore it when
      waiting.
      
      Note that this logic is only valid if the index does not access other
      tables.  For simplicity we avoid setting the flag if the index has a
      column that's an expression, or has a WHERE predicate.  (It is possible
      to have expressional or partial indexes that do not access other tables,
      but figuring that out would require more work.)
      
      This flag can potentially also be used by processes doing REINDEX
      CONCURRENTLY to be skipped; and by VACUUM to ignore processes in CIC or
      RC for the purposes of computing an Xmin.  That's left for future
      commits.
      
      Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
      Author: Dimitry Dolgov <9erthalion6@gmail.com>
      Reviewed-by: default avatarMichael Paquier <michael@paquier.xyz>
      Discussion: https://postgr.es/m/20200810233815.GA18970@alvherre.pgsql
      c98763bf
    • Tom Lane's avatar
      In psql's \d commands, don't truncate attribute default values. · 314fb9ba
      Tom Lane authored
      Historically, psql has truncated the text of a column's default
      expression at 128 characters.  This is unlike any other behavior
      in describe.c, and it's become particularly confusing now that
      the limit is only applied to the expression proper and not to
      the "generated always as (...) stored" text that may get wrapped
      around it.
      
      Excavation in our git history suggests that the original motivation
      for this limit was not really to limit the display width (as I'd long
      supposed), but to make it safe to use a fixed-width output buffer to
      store the result.  That implementation restriction is long gone of
      course, but the limit remained.  Let's just get rid of it.
      
      While here, rearrange the logic about when to free the output string
      so that it's not so dependent on unstated assumptions about the
      possible values of attidentity and attgenerated.
      
      Per bug #16743 from David Turon.  Back-patch to v12 where GENERATED
      came in.  (Arguably we could take it back further, but I'm hesitant
      to change the behavior of long-stable branches for this.)
      
      Discussion: https://postgr.es/m/16743-7b1bacc4af76e7ad@postgresql.org
      314fb9ba
    • Tom Lane's avatar
      Doc: minor improvements for section 11.2 "Index Types". · 85b4ba73
      Tom Lane authored
      Break the per-index-type discussions into <sect2>'s so as to make
      them more visually separate and easier to find.  Improve the markup,
      and make a couple of small wording adjustments.
      
      This also fixes one stray reference to the now-deprecated point
      operators <^ and >^.
      
      Dagfinn Ilmari Mannsåker, reviewed by David Johnston and Jürgen Purtz
      
      Discussion: https://postgr.es/m/877dukhvzg.fsf@wibble.ilmari.org
      85b4ba73
    • Tom Lane's avatar
      Avoid spamming the client with multiple ParameterStatus messages. · 2432b1a0
      Tom Lane authored
      Up to now, we sent a ParameterStatus message to the client immediately
      upon any change in the active value of any GUC_REPORT variable.  This
      was only barely okay when the feature was designed; now that we have
      things like function SET clauses, there are very plausible use-cases
      where a GUC_REPORT variable might change many times within a query
      --- and even end up back at its original value, perhaps.  Fortunately
      most of our GUC_REPORT variables are unlikely to be changed often;
      but there are proposals in play to enlarge that set, or even make it
      user-configurable.
      
      Hence, let's fix things to not generate more than one ParameterStatus
      message per variable per query, and to not send any message at all
      unless the end-of-query value is different from what we last reported.
      
      Discussion: https://postgr.es/m/5708.1601145259@sss.pgh.pa.us
      2432b1a0
    • Peter Eisentraut's avatar
      tablefunc: Reject negative number of tuples passed to normal_rand() · f7399926
      Peter Eisentraut authored
      The function converted the first argument i.e. the number of tuples to
      return into an unsigned integer which turns out to be huge number when
      a negative value is passed.  This causes the function to take much
      longer time to execute.  Instead, reject a negative value.
      
      (If someone really wants to generate many more result rows, they
      should consider adding a bigint or numeric variant.)
      
      While at it, improve SQL test to test the number of tuples returned by
      this function.
      
      Author: Ashutosh Bapat <ashutosh.bapat@2ndquadrant.com>
      Discussion: https://www.postgresql.org/message-id/CAG-ACPW3PUUmSnM6cLa9Rw4BEC5cEMKjX8Gogc8gvQcT3cYA1A@mail.gmail.com
      f7399926
    • Peter Eisentraut's avatar
      doc: Fix typos · 2fbd786c
      Peter Eisentraut authored
      Author: Justin Pryzby <pryzby@telsasoft.com>
      Discussion: https://www.postgresql.org/message-id/20201121194105.GO24784@telsasoft.com
      2fbd786c
    • Peter Eisentraut's avatar
      Make error hint from bind() failure more accurate · d5d91acd
      Peter Eisentraut authored
      The hint "Is another postmaster already running ..." should only be
      printed for errors that are really about something else already using
      the address.  In other cases it is misleading.  So only show that hint
      if errno == EADDRINUSE.
      
      Also, since Unix-domain sockets in the file-system namespace never
      report EADDRINUSE for an existing file (they would just overwrite it),
      the part of the hint saying "If not, remove socket file \"%s\" and
      retry." can never happen, so remove it.  Unix-domain sockets in the
      abstract namespace can report EADDRINUSE, but in that case there is no
      file to remove, so the hint doesn't work there either.
      Reviewed-by: default avatarMichael Paquier <michael@paquier.xyz>
      Discussion: https://www.postgresql.org/message-id/flat/6dee8574-b0ad-fc49-9c8c-2edc796f0033@2ndquadrant.com
      d5d91acd
    • Peter Eisentraut's avatar
      Add support for abstract Unix-domain sockets · c9f0624b
      Peter Eisentraut authored
      This is a variant of the normal Unix-domain sockets that don't use the
      file system but a separate "abstract" namespace.  At the user
      interface, such sockets are represented by names starting with "@".
      Supported on Linux and Windows right now.
      Reviewed-by: default avatarMichael Paquier <michael@paquier.xyz>
      Discussion: https://www.postgresql.org/message-id/flat/6dee8574-b0ad-fc49-9c8c-2edc796f0033@2ndquadrant.com
      c9f0624b
    • Thomas Munro's avatar
      Fix WaitLatch(NULL) on Windows. · a7e65dc8
      Thomas Munro authored
      Further to commit 733fa9aa, on Windows when a latch is triggered but we
      aren't currently waiting for it, we need to locate the latch's HANDLE
      rather than calling ResetEvent(NULL).
      
      Author: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
      Reported-by: default avatarRanier Vilela <ranier.vf@gmail.com>
      Discussion: https://postgr.es/m/CAEudQArTPi1YBc%2Bn1fo0Asy3QBFhVjp_QgyKG-8yksVn%2ByRTiw%40mail.gmail.com
      a7e65dc8
    • Amit Kapila's avatar
      Remove obsolete comment atop ri_PlanCheck. · 805b8163
      Amit Kapila authored
      Commit 5b7ba75f removed the unused parameter but forgot to update the
      nearby comments.
      
      Author: Li Japin
      Backpatch-through: 13, where it was introduced
      Discussion: https://postgr.es/m/0E2F62A2-B2F1-4052-83AE-F0BEC8A75789@hotmail.com
      805b8163
    • David Rowley's avatar
      Stop gap fix for __attribute__((cold)) compiler bug in MinGW 8.1 · 687f6163
      David Rowley authored
      The buildfarm animal walleye, running MinGW 8.1 has been having problems
      ever since 697e1d02 and 913ec71d went in.  This appears to be a bug in
      assembler which was fixed in a later version.
      
      For now, in order to get that animal running green again, let's just
      define pg_attribute_cold and pg_attribute_hot to be empty macros on that
      compiler.  Hopefully, we can get the support of the owner of the animal to
      upgrade to a less buggy compiler and revert this at a later date.
      
      Discussion: https://postgr.es/m/286560.1606233316@sss.pgh.pa.us
      687f6163
    • Michael Paquier's avatar
      Remove catalog function currtid() · 7b94e999
      Michael Paquier authored
      currtid() and currtid2() are an undocumented set of functions whose sole
      known user is the Postgres ODBC driver, able to retrieve the latest TID
      version for a tuple given by the caller of those functions.
      
      As used by Postgres ODBC, currtid() is a shortcut able to retrieve the
      last TID loaded into a backend by passing an OID of 0 (magic value)
      after a tuple insertion.  This is removed in this commit, as it became
      obsolete after the driver began using "RETURNING ctid" with inserts, a
      clause supported since Postgres 8.2 (using RETURNING is better for
      performance anyway as it reduces the number of round-trips to the
      backend).
      
      currtid2() is still used by the driver, so this remains around for now.
      Note that this function is kept in its original shape for backward
      compatibility reasons.
      
      Per discussion with many people, including Andres Freund, Peter
      Eisentraut, Álvaro Herrera, Hiroshi Inoue, Tom Lane and myself.
      
      Bump catalog version.
      
      Discussion: https://postgr.es/m/20200603021448.GB89559@paquier.xyz
      7b94e999
  2. 24 Nov, 2020 9 commits
  3. 23 Nov, 2020 9 commits
    • David Rowley's avatar
      Improve compiler code layout in elog/ereport ERROR calls · 913ec71d
      David Rowley authored
      Here we use a bit of preprocessor trickery to coax supporting compilers
      into laying out their generated code so that the code that's in the same
      branch as elog(ERROR)/ereport(ERROR) calls is moved away from the hot
      path.  Effectively, this reduces the size of the hot code meaning that it
      can sit on fewer cache lines.
      
      Performance improvements of between 10-15% have been seen on highly CPU
      bound workloads using pgbench's TPC-b benchmark.
      
      What's achieved here is very similar to putting the error condition inside
      an unlikely() macro. For example;
      
      if (unlikely(x < 0))
          elog(ERROR, "invalid x value");
      
      now there's no need to make use of unlikely() here as the common macro
      used by elog and ereport will now see that elevel is >= ERROR and make use
      of a pg_attribute_cold marked version of errstart().
      
      When elevel < ERROR or if it cannot be determined to be constant, the
      original behavior is maintained.
      
      Author: David Rowley
      Reviewed-by: Andres Freund, Peter Eisentraut
      Discussion: https://postgr.es/m/CAApHDvrVpasrEzLL2er7p9iwZFZ%3DJj6WisePcFeunwfrV0js_A%40mail.gmail.com
      913ec71d
    • David Rowley's avatar
      Define pg_attribute_cold and pg_attribute_hot macros · 697e1d02
      David Rowley authored
      For compilers supporting __has_attribute and __has_attribute (hot/cold).
      
      __has_attribute is supported on gcc >= 5, clang >= 2.9 and icc >= 17.
      
      A followup commit will implement some usages of these macros.
      
      Author: David Rowley
      Reviewed-by: Andres Freund, Peter Eisentraut
      Discussion: https://postgr.es/m/CAApHDvrVpasrEzLL2er7p9iwZFZ%3DJj6WisePcFeunwfrV0js_A%40mail.gmail.com
      697e1d02
    • Tom Lane's avatar
      Remove unnecessary #include. · 3b9b01f7
      Tom Lane authored
      Justin Pryzby
      
      Discussion: https://postgr.es/m/20201123205505.GJ24052@telsasoft.com
      3b9b01f7
    • Alvaro Herrera's avatar
      Don't hold ProcArrayLock longer than needed in rare cases · 450c8230
      Alvaro Herrera authored
      While cancelling an autovacuum worker, we hold ProcArrayLock while
      formatting a debugging log string.  We can make this shorter by saving
      the data we need to produce the message and doing the formatting outside
      the locked region.
      
      This isn't terribly critical, as it only occurs pretty rarely: when a
      backend runs deadlock detection and it happens to be blocked by a
      autovacuum running autovacuum.  Still, there's no need to cause a hiccup
      in ProcArrayLock processing, which can be very high-traffic in some
      cases.
      
      While at it, rework code so that we only print the string when it is
      really going to be used, as suggested by Michael Paquier.
      
      Discussion: https://postgr.es/m/20201118214127.GA3179@alvherre.pgsqlReviewed-by: default avatarMichael Paquier <michael@paquier.xyz>
      450c8230
    • Tom Lane's avatar
      Rename the "point is strictly above/below point" comparison operators. · 0cc99327
      Tom Lane authored
      Historically these were called >^ and <^, but that is inconsistent
      with the similar box, polygon, and circle operators, which are named
      |>> and <<| respectively.  Worse, the >^ and <^ names are used for
      *not* strict above/below tests for the box type.
      
      Hence, invent new operators following the more common naming.  The
      old operators remain available for now, and are still accepted by
      the relevant index opclasses too.  But there's a deprecation notice,
      so maybe we can get rid of them someday.
      
      Emre Hasegeli, reviewed by Pavel Borisov
      
      Discussion: https://postgr.es/m/24348.1587444160@sss.pgh.pa.us
      0cc99327
    • Tom Lane's avatar
      Improve wording of two error messages related to generated columns. · d36228a9
      Tom Lane authored
      Clarify that you can "insert" into a generated column as long as what
      you're inserting is a DEFAULT placeholder.
      
      Also, use ERRCODE_GENERATED_ALWAYS in place of ERRCODE_SYNTAX_ERROR;
      there doesn't seem to be any reason to use the less specific errcode.
      
      Discussion: https://postgr.es/m/9q0sgcr416t.fsf@gmx.us
      d36228a9
    • Alvaro Herrera's avatar
      Make some sanity-check elogs more verbose · fe051291
      Alvaro Herrera authored
      A few sanity checks in funcapi.c were not mentioning all the possible
      clauses for failure, confusing developers who fat-fingered catalog data
      additions.  Make the errors more detailed to avoid wasting time in
      pinpointing mistakes.
      
      Per complaint from Craig Ringer.
      Reviewed-by: default avatarTom Lane <tgl@sss.pgh.pa.us>
      Discussion: https://postgr.es/m/CAMsr+YH7Kd87A3cU5m_wKo46HPQ46zFv5wesFNL0YWxkGhGv3g@mail.gmail.com
      fe051291
    • Heikki Linnakangas's avatar
      Fix a few comments that referred to copy.c. · 68b1a487
      Heikki Linnakangas authored
      Missed these in the previous commit.
      68b1a487
    • Heikki Linnakangas's avatar
      Split copy.c into four files. · c532d15d
      Heikki Linnakangas authored
      Copy.c has grown really large. Split it into more manageable parts:
      
      - copy.c now contains only a few functions that are common to COPY FROM
        and COPY TO.
      
      - copyto.c contains code for COPY TO.
      
      - copyfrom.c contains code for initializing COPY FROM, and inserting the
        tuples to the correct table.
      
      - copyfromparse.c contains code for reading from the client/file/program,
        and parsing the input text/CSV/binary format into tuples.
      
      All of these parts are fairly complicated, and fairly independent of each
      other. There is a patch being discussed to implement parallel COPY FROM,
      which will add a lot of new code to the COPY FROM path, and another patch
      which would allow INSERTs to use the same multi-insert machinery as COPY
      FROM, both of which will require refactoring that code. With those two
      patches, there's going to be a lot of code churn in copy.c anyway, so now
      seems like a good time to do this refactoring.
      
      The CopyStateData struct is also split. All the formatting options, like
      FORMAT, QUOTE, ESCAPE, are put in a new CopyFormatOption struct, which
      is used by both COPY FROM and TO. Other state data are kept in separate
      CopyFromStateData and CopyToStateData structs.
      
      Reviewed-by: Soumyadeep Chakraborty, Erik Rijkers, Vignesh C, Andres Freund
      Discussion: https://www.postgresql.org/message-id/8e15b560-f387-7acc-ac90-763986617bfb%40iki.fi
      c532d15d
  4. 22 Nov, 2020 1 commit
  5. 21 Nov, 2020 5 commits
  6. 20 Nov, 2020 4 commits