1. 29 Apr, 2021 5 commits
  2. 28 Apr, 2021 5 commits
    • Tom Lane's avatar
      Add heuristic incoming-message-size limits in the server. · 9626325d
      Tom Lane authored
      We had a report of confusing server behavior caused by a client bug
      that sent junk to the server: the server thought the junk was a
      very long message length and waited patiently for data that would
      never come.  We can reduce the risk of that by being less trusting
      about message lengths.
      
      For a long time, libpq has had a heuristic rule that it wouldn't
      believe large message size words, except for a small number of
      message types that are expected to be (potentially) long.  This
      provides some defense against loss of message-boundary sync and
      other corrupted-data cases.  The server does something similar,
      except that up to now it only limited the lengths of messages
      received during the connection authentication phase.  Let's
      do the same as in libpq and put restrictions on the allowed
      length of all messages, while distinguishing between message
      types that are expected to be long and those that aren't.
      
      I used a limit of 10000 bytes for non-long messages.  (libpq's
      corresponding limit is 30000 bytes, but given the asymmetry of
      the FE/BE protocol, there's no good reason why the numbers should
      be the same.)  Experimentation suggests that this is at least a
      factor of 10, maybe a factor of 100, more than we really need;
      but plenty of daylight seems desirable to avoid false positives.
      In any case we can adjust the limit based on beta-test results.
      
      For long messages, set a limit of MaxAllocSize - 1, which is the
      most that we can absorb into the StringInfo buffer that the message
      is collected in.  This just serves to make sure that a bogus message
      size is reported as such, rather than as a confusing gripe about
      not being able to enlarge a string buffer.
      
      While at it, make sure that non-mainline code paths (such as
      COPY FROM STDIN) are as paranoid as SocketBackend is, and validate
      the message type code before believing the message length.
      This provides an additional guard against getting stuck on corrupted
      input.
      
      Discussion: https://postgr.es/m/2003757.1619373089@sss.pgh.pa.us
      9626325d
    • Alvaro Herrera's avatar
      Allow a partdesc-omitting-partitions to be cached · d6b8d294
      Alvaro Herrera authored
      Makes partition descriptor acquisition faster during the transient
      period in which a partition is in the process of being detached.
      
      This also adds the restriction that only one partition can be in
      pending-detach state for a partitioned table.
      
      While at it, return find_inheritance_children() API to what it was
      before 71f4c8c6, and create a separate
      find_inheritance_children_extended() that returns detailed info about
      detached partitions.
      
      (This incidentally fixes a bug in 8aba9322 whereby a memory context
      holding a transient partdesc is reparented to a NULL PortalContext,
      leading to permanent leak of that memory.  The fix is to no longer rely
      on reparenting contexts to PortalContext.   Reported by Amit Langote.)
      
      Per gripe from Amit Langote
      Discussion: https://postgr.es/m/CA+HiwqFgpP1LxJZOBYGt9rpvTjXXkg5qG2+Xch2Z1Q7KrqZR1A@mail.gmail.com
      d6b8d294
    • Tom Lane's avatar
      Doc: fix discussion of how to get real Julian Dates. · c93f8f3b
      Tom Lane authored
      Somehow I'd convinced myself that rotating to UTC-12 was the way
      to do this, but upon further review, it's definitely UTC+12.
      
      Discussion: https://postgr.es/m/1197050.1619123213@sss.pgh.pa.us
      c93f8f3b
    • Michael Paquier's avatar
      Fix use-after-release issue with pg_identify_object_as_address() · f93f0b5b
      Michael Paquier authored
      Spotted by buildfarm member prion, with -DRELCACHE_FORCE_RELEASE.
      
      Introduced in f7aab36d.
      
      Discussion: https://postgr.es/m/2759018.1619577848@sss.pgh.pa.us
      Backpatch-through: 9.6
      f93f0b5b
    • Michael Paquier's avatar
      Fix pg_identify_object_as_address() with event triggers · f7aab36d
      Michael Paquier authored
      Attempting to use this function with event triggers failed, as, since
      its introduction in a6762014, this code has never associated an object
      name with event triggers.  This addresses the failure by adding the
      event trigger name to the set defining its object address.
      
      Note that regression tests are added within event_trigger and not
      object_address to avoid issues with concurrent connections in parallel
      schedules.
      
      Author: Joel Jacobson
      Discussion: https://postgr.es/m/3c905e77-a026-46ae-8835-c3f6cd1d24c8@www.fastmail.com
      Backpatch-through: 9.6
      f7aab36d
  3. 27 Apr, 2021 5 commits
    • Andrew Dunstan's avatar
      Improve logic in PostgresVersion.pm · fa26eba2
      Andrew Dunstan authored
      Handle the situation where perl swaps the order of operands of
      the comparison operator. See `perldoc overload` for details:
      
      The third argument is set to TRUE if (and only if) the two
      operands have been swapped. Perl may do this to ensure that the
      first argument ($self) is an object implementing the overloaded
      operation, in line with general object calling conventions.
      fa26eba2
    • Fujii Masao's avatar
      doc: Review for "Allow TRUNCATE command to truncate foreign tables". · 0c8f4086
      Fujii Masao authored
      Typos, corrections and language improvements in the docs.
      
      Author: Justin Pryzby, Fujii Masao
      Reviewed-by: Bharath Rupireddy, Justin Pryzby, Fujii Masao
      Discussion: https://postgr.es/m/20210411041658.GB14564@telsasoft.com
      0c8f4086
    • Fujii Masao's avatar
      Don't pass "ONLY" options specified in TRUNCATE to foreign data wrapper. · 8e9ea08b
      Fujii Masao authored
      Commit 8ff1c946 allowed TRUNCATE command to truncate foreign tables.
      Previously the information about "ONLY" options specified in TRUNCATE
      command were passed to the foreign data wrapper. Then postgres_fdw
      constructed the TRUNCATE command to issue the remote server and
      included "ONLY" options in it based on the passed information.
      
      On the other hand, "ONLY" options specified in SELECT, UPDATE or DELETE
      have no effect when accessing or modifying the remote table, i.e.,
      are not passed to the foreign data wrapper. So it's inconsistent to
      make only TRUNCATE command pass the "ONLY" options to the foreign data
      wrapper. Therefore this commit changes the TRUNCATE command so that
      it doesn't pass the "ONLY" options to the foreign data wrapper,
      for the consistency with other statements. Also this commit changes
      postgres_fdw so that it always doesn't include "ONLY" options in
      the TRUNCATE command that it constructs.
      
      Author: Fujii Masao
      Reviewed-by: Bharath Rupireddy, Kyotaro Horiguchi, Justin Pryzby, Zhihong Yu
      Discussion: https://postgr.es/m/551ed8c1-f531-818b-664a-2cecdab99cd8@oss.nttdata.com
      8e9ea08b
    • Amit Kapila's avatar
      Use HTAB for replication slot statistics. · 3fa17d37
      Amit Kapila authored
      Previously, we used to use the array of size max_replication_slots to
      store stats for replication slots. But that had two problems in the cases
      where a message for dropping a slot gets lost: 1) the stats for the new
      slot are not recorded if the array is full and 2) writing beyond the end
      of the array if the user reduces the max_replication_slots.
      
      This commit uses HTAB for replication slot statistics, resolving both
      problems. Now, pgstat_vacuum_stat() search for all the dead replication
      slots in stats hashtable and tell the collector to remove them. To avoid
      showing the stats for the already-dropped slots, pg_stat_replication_slots
      view searches slot stats by the slot name taken from pg_replication_slots.
      
      Also, we send a message for creating a slot at slot creation, initializing
      the stats. This reduces the possibility that the stats are accumulated
      into the old slot stats when a message for dropping a slot gets lost.
      
      Reported-by: Andres Freund
      Author: Sawada Masahiko, test case by Vignesh C
      Reviewed-by: Amit Kapila, Vignesh C, Dilip Kumar
      Discussion: https://postgr.es/m/20210319185247.ldebgpdaxsowiflw@alap3.anarazel.de
      3fa17d37
    • Amit Kapila's avatar
      Fix Logical Replication of Truncate in synchronous commit mode. · e7eea52b
      Amit Kapila authored
      The Truncate operation acquires an exclusive lock on the target relation
      and indexes. It then waits for logical replication of the operation to
      finish at commit. Now because we are acquiring the shared lock on the
      target index to get index attributes in pgoutput while sending the
      changes for the Truncate operation, it leads to a deadlock.
      
      Actually, we don't need to acquire a lock on the target index as we build
      the cache entry using a historic snapshot and all the later changes are
      absorbed while decoding WAL. So, we wrote a special purpose function for
      logical replication to get a bitmap of replica identity attribute numbers
      where we get that information without locking the target index.
      
      We decided not to backpatch this as there doesn't seem to be any field
      complaint about this issue since it was introduced in commit 5dfd1e5a in
      v11.
      
      Reported-by: Haiying Tang
      Author: Takamichi Osumi, test case by Li Japin
      Reviewed-by: Amit Kapila, Ajin Cherian
      Discussion: https://postgr.es/m/OS0PR01MB6113C2499C7DC70EE55ADB82FB759@OS0PR01MB6113.jpnprd01.prod.outlook.com
      e7eea52b
  4. 26 Apr, 2021 8 commits
  5. 25 Apr, 2021 2 commits
  6. 24 Apr, 2021 5 commits
  7. 23 Apr, 2021 10 commits