1. 30 Sep, 2022 2 commits
    • Tom Lane's avatar
      Avoid improbable PANIC during heap_update, redux. · b93d7e68
      Tom Lane authored
      Commit 34f581c3 intended to ensure that RelationGetBufferForTuple
      would acquire a visibility-map page pin in case the otherBuffer's
      all-visible bit had become set since we last had lock on that page.
      But I missed a case: when we're extending the relation, VM concerns
      were dealt with only in the relatively-less-likely case that we
      fail to conditionally lock the otherBuffer.  I think I'd believed
      that we couldn't need to worry about it if the conditional lock
      succeeds, which is true for the target buffer; but the otherBuffer
      was unlocked for awhile so its bit might be set anyway.  So we need
      to do the GetVisibilityMapPins dance, and then also recheck the
      page's free space, in both cases.
      
      Per report from Jaime Casanova.  Back-patch to v12 as the previous
      patch was (although there's still no evidence that the bug is
      reachable pre-v14).
      
      Discussion: https://postgr.es/m/E1lWLjP-00006Y-Ml@gemulon.postgresql.org
      b93d7e68
    • Daniel Gustafsson's avatar
      doc: Fix PQsslAttribute docs for compression · 064e1c87
      Daniel Gustafsson authored
      The compression parameter to PQsslAttribute has never returned the
      compression method used, it has always returned "on" or "off since
      it was added in commit 91fa7b47. Backpatch through v10.
      Reviewed-by: default avatarTom Lane <tgl@sss.pgh.pa.us>
      Discussion: https://postgr.es/m/B9EC60EC-F665-47E8-A221-398C76E382C9@yesql.se
      Backpatch-through: v10
      064e1c87
  2. 29 Sep, 2022 1 commit
  3. 28 Sep, 2022 3 commits
  4. 25 Sep, 2022 2 commits
    • Tom Lane's avatar
      Fix tupdesc lifespan bug with AfterTriggersTableData.storeslot. · 99237646
      Tom Lane authored
      Commit 25936fd4 adjusted things so that the "storeslot" we use
      for remapping trigger tuples would have adequate lifespan, but it
      neglected to consider the lifespan of the tuple descriptor that
      the slot depends on.  It turns out that in at least some cases, the
      tupdesc we are passing is a refcounted tupdesc, and the refcount for
      the slot's reference can get assigned to a resource owner having
      different lifespan than the slot does.  That leads to an error like
      "tupdesc reference 0x7fdef236a1b8 is not owned by resource owner
      SubTransaction".  Worse, because of a second oversight in the same
      commit, we'd try to free the same tupdesc refcount again while
      cleaning up after that error, leading to recursive errors and an
      "ERRORDATA_STACK_SIZE exceeded" PANIC.
      
      To fix the initial problem, let's just make a non-refcounted copy
      of the tupdesc we're supposed to use.  That seems likely to guard
      against additional problems, since there's no strong reason for
      this code to assume that what it's given is a refcounted tupdesc;
      in which case there's an independent hazard of the tupdesc having
      shorter lifespan than the slot does.  (I didn't bother trying to
      free said copy, since it should go away anyway when the (sub)
      transaction context is cleaned up.)
      
      The other issue can be fixed by making the code added to
      AfterTriggerFreeQuery work like the rest of that function, ie be
      sure that it doesn't try to free the same slot twice in the event
      of recursive error cleanup.
      
      While here, also clean up minor stylistic issues in the test case
      added by 25936fd4: don't use "create or replace function", as any
      name collision within the tests is likely to have ill effects
      that that won't mask; and don't use function names as generic as
      trigger_function1, especially if you're not going to drop them
      at the end of the test stanza.
      
      Per bug #17607 from Thomas Mc Kay.  Back-patch to v12, as the
      previous fix was.
      
      Discussion: https://postgr.es/m/17607-bd8ccc81226f7f80@postgresql.org
      99237646
    • Alvaro Herrera's avatar
      f2094c78
  5. 23 Sep, 2022 1 commit
  6. 22 Sep, 2022 3 commits
  7. 21 Sep, 2022 1 commit
    • Tom Lane's avatar
      Suppress more variable-set-but-not-used warnings from clang 15. · 88c947cb
      Tom Lane authored
      Mop up assorted set-but-not-used warnings in the back branches.
      This includes back-patching relevant fixes from commit 152c9f7b8
      the rest of the way, but there are also several cases that did not
      appear in HEAD.  Some of those we'd fixed in a retail way but not
      back-patched, and others I think just got rewritten out of existence
      during nearby refactoring.
      
      While here, also back-patch b1980f6d (PL/Tcl: Fix compiler warnings
      with Tcl 8.6) into 9.2, so that that branch compiles warning-free
      with modern Tcl.
      
      Per project policy, this is a candidate for back-patching into
      out-of-support branches: it suppresses annoying compiler warnings
      but changes no behavior.  Hence, back-patch all the way to 9.2.
      
      Discussion: https://postgr.es/m/514615.1663615243@sss.pgh.pa.us
      88c947cb
  8. 20 Sep, 2022 4 commits
    • Tom Lane's avatar
      Disable -Wdeprecated-non-prototype in the back branches. · dcd7dbed
      Tom Lane authored
      There doesn't seem to be any good ABI-preserving way to silence
      clang 15's -Wdeprecated-non-prototype warnings about our tree-walk
      APIs.  While we've fixed it properly in HEAD, the only way to not
      see hundreds of these in the back branches is to disable the
      warnings.  We're not going to do anything about them, so we might
      as well disable them.
      
      I noticed that we also get some of these warnings about fmgr.c's
      support for V0 function call convention, in branches before v10
      where we removed that.  That's another area we aren't going to
      change, so turning off the warning seems fine for that too.
      
      Per project policy, this is a candidate for back-patching into
      out-of-support branches: it suppresses annoying compiler warnings
      but changes no behavior.  Hence, back-patch all the way to 9.2.
      
      Discussion: https://postgr.es/m/CA+hUKGKpHPDTv67Y+s6yiC8KH5OXeDg6a-twWo_xznKTcG0kSA@mail.gmail.com
      dcd7dbed
    • Tom Lane's avatar
      Suppress variable-set-but-not-used warnings from clang 15. · 2e124d85
      Tom Lane authored
      clang 15+ will issue a set-but-not-used warning when the only
      use of a variable is in autoincrements (e.g., "foo++;").
      That's perfectly sensible, but it detects a few more cases that
      we'd not noticed before.  Silence the warnings with our usual
      methods, such as PG_USED_FOR_ASSERTS_ONLY, or in one case by
      actually removing a useless variable.
      
      One thing that we can't nicely get rid of is that with %pure-parser,
      Bison emits "yynerrs" as a local variable that falls foul of this
      warning.  To silence those, I inserted "(void) yynerrs;" in the
      top-level productions of affected grammars.
      
      Per recently-established project policy, this is a candidate
      for back-patching into out-of-support branches: it suppresses
      annoying compiler warnings but changes no behavior.  Hence,
      back-patch to 9.5, which is as far as these patches go without
      issues.  (A preliminary check shows that the prior branches
      need some other set-but-not-used cleanups too, so I'll leave
      them for another day.)
      
      Discussion: https://postgr.es/m/514615.1663615243@sss.pgh.pa.us
      2e124d85
    • Michael Paquier's avatar
      doc: Fix parameter name for pg_create_logical_replication_slot() · 382cc680
      Michael Paquier authored
      The parameter controlling if two-phase transactions can be decoded was
      named "two_phase" in the documentation while its procedure defines
      "twophase".
      
      Author: Florin Irion
      Discussion: https://postgr.es/m/5eeabd10-1aff-ea61-f92d-9fa0d9a7e207@gmail.com
      Backpatch-through: 14
      382cc680
    • Michael Paquier's avatar
      Fix incorrect variable types for origin IDs in decode.c · e68fc64f
      Michael Paquier authored
      These variables used XLogRecPtr instead of RepOriginId.
      
      Author: Masahiko Sawada
      Discussion: https://postgr.es/m/CAD21AoBm-vNyBSXGp4bmJGvhr=S-EGc5q1dtV70cFTcJvLhC=Q@mail.gmail.com
      Backpatch-through: 14
      e68fc64f
  9. 19 Sep, 2022 1 commit
    • Tom Lane's avatar
      Future-proof the recursion inside ExecShutdownNode(). · 7394c763
      Tom Lane authored
      The API contract for planstate_tree_walker() callbacks is that they
      take a PlanState pointer and a context pointer.  Somebody figured
      they could save a couple lines of code by ignoring that, and passing
      ExecShutdownNode itself as the walker even though it has but one
      argument.  Somewhat remarkably, we've gotten away with that so far.
      However, it seems clear that the upcoming C2x standard means to
      forbid such cases, and compilers that actively break such code
      likely won't be far behind.  So spend the extra few lines of code
      to do it honestly with a separate walker function.
      
      In HEAD, we might as well go further and remove ExecShutdownNode's
      useless return value.  I left that as-is in back branches though,
      to forestall complaints about ABI breakage.
      
      Back-patch, with the thought that this might become of practical
      importance before our stable branches are all out of service.
      It doesn't seem to be fixing any live bug on any currently known
      platform, however.
      
      Discussion: https://postgr.es/m/208054.1663534665@sss.pgh.pa.us
      7394c763
  10. 17 Sep, 2022 2 commits
  11. 16 Sep, 2022 1 commit
    • Tom Lane's avatar
      Improve plpgsql's ability to handle arguments declared as RECORD. · 56d45fda
      Tom Lane authored
      Treat arguments declared as RECORD as if that were a polymorphic type
      (which it is, sort of), in that we substitute the actual argument type
      while forming the function cache lookup key.  This allows the specific
      composite type to be known in some cases where it was not before,
      at the cost of making a separate function cache entry for each named
      composite type that's passed to the function during a session.  The
      particular symptom discussed in bug #17610 could be solved in other
      more-efficient ways, but only at the cost of considerable development
      work, and there are other cases where we'd still fail without this.
      
      Per bug #17610 from Martin Jurča.  Back-patch to v11 where we first
      allowed plpgsql functions to be declared as taking type RECORD.
      
      Discussion: https://postgr.es/m/17610-fb1eef75bf6c2364@postgresql.org
      56d45fda
  12. 15 Sep, 2022 1 commit
    • Tom Lane's avatar
      Detect format-string mistakes in the libpq_pipeline test module. · bff7bc6c
      Tom Lane authored
      I happened to notice that libpq_pipeline's private implementation
      of pg_fatal lacked any pg_attribute_printf decoration.  Indeed,
      adding that turned up a mistake!  We'd likely never have noticed
      because the error exits in this code are unlikely to get hit,
      but still, it's a bug.
      
      We're so used to having the compiler check this stuff for us that
      a printf-like function without pg_attribute_printf is a land mine.
      I wonder if there is a way to detect such omissions.
      
      Back-patch to v14 where this code came in.
      bff7bc6c
  13. 14 Sep, 2022 3 commits
    • Etsuro Fujita's avatar
      postgres_fdw: Avoid 'variable not found in subplan target list' error. · b53d104a
      Etsuro Fujita authored
      The tlist of the EvalPlanQual outer plan for a ForeignScan node is
      adjusted to produce a tuple whose descriptor matches the scan tuple slot
      for the ForeignScan node.  But in the case where the outer plan contains
      an extra Sort node, if the new tlist contained columns required only for
      evaluating PlaceHolderVars or columns required only for evaluating local
      conditions, this would cause setrefs.c to fail with the error.
      
      The cause of this is that when creating the outer plan by injecting the
      Sort node into an alternative local join plan that could emit such extra
      columns as well, we fail to arrange for the outer plan to propagate them
      up through the Sort node, causing setrefs.c to fail to match up them in
      the new tlist to what is available from the outer plan.  Repair.
      
      Per report from Alexander Pyhalov.
      
      Richard Guo and Etsuro Fujita, reviewed by Alexander Pyhalov and Tom Lane.
      Backpatch to all supported versions.
      
      Discussion: http://postgr.es/m/cfb17bf6dfdf876467bd5ef533852d18%40postgrespro.ru
      b53d104a
    • Michael Paquier's avatar
      Fix incorrect value for "strategy" with deflateParams() in walmethods.c · 4b529f46
      Michael Paquier authored
      The zlib documentation mentions the values supported for the compression
      strategy, but this code has been using a hardcoded value of 0 rather
      than Z_DEFAULT_STRATEGY.  This commit adjusts the code to use
      Z_DEFAULT_STRATEGY.
      
      Backpatch down to where this code has been added to ease the backport of
      any future patch touching this area.
      
      Reported-by: Tom Lane
      Discussion: https://postgr.es/m/1400032.1662217889@sss.pgh.pa.us
      Backpatch-through: 10
      4b529f46
    • Peter Eisentraut's avatar
      Expand palloc/pg_malloc API for more type safety · b7f37af7
      Peter Eisentraut authored
      This adds additional variants of palloc, pg_malloc, etc. that
      encapsulate common usage patterns and provide more type safety.
      
      Specifically, this adds palloc_object(), palloc_array(), and
      repalloc_array(), which take the type name of the object to be
      allocated as its first argument and cast the return as a pointer to
      that type.  There are also palloc0_object() and palloc0_array()
      variants for initializing with zero, and pg_malloc_*() variants of all
      of the above.
      
      Inspired by the talloc library.
      
      This is backpatched from master so that future backpatchable code can
      make use of these APIs.  This patch by itself does not contain any
      users of these APIs.
      Reviewed-by: default avatarTom Lane <tgl@sss.pgh.pa.us>
      Discussion: https://www.postgresql.org/message-id/flat/bb755632-2a43-d523-36f8-a1e7a389a907@enterprisedb.com
      b7f37af7
  14. 12 Sep, 2022 3 commits
  15. 09 Sep, 2022 2 commits
    • Tom Lane's avatar
      Fix possible omission of variable storage markers in ECPG. · be0b0528
      Tom Lane authored
      The ECPG preprocessor converted code such as
      
      static varchar str1[10], str2[20], str3[30];
      
      into
      
      static  struct varchar_1  { int len; char arr[ 10 ]; }  str1 ;
              struct varchar_2  { int len; char arr[ 20 ]; }  str2 ;
              struct varchar_3  { int len; char arr[ 30 ]; }  str3 ;
      
      thus losing the storage attribute for the later variables.
      Repeat the declaration for each such variable.
      
      (Note that this occurred only for variables declared "varchar"
      or "bytea", which may help explain how it escaped detection
      for so long.)
      
      Andrey Sokolov
      
      Discussion: https://postgr.es/m/942241662288242@mail.yandex.ru
      be0b0528
    • Tom Lane's avatar
      Reject bogus output from uuid_create(3). · e55ccb3b
      Tom Lane authored
      When using the BSD UUID functions, contrib/uuid-ossp expects
      uuid_create() to produce a version-1 UUID.  FreeBSD still does so,
      but in recent NetBSD releases that function produces a version-4
      (random) UUID instead.  That's not acceptable for our purposes:
      if the user wanted v4 she would have asked for v4, not v1.
      Hence, check the version digit and complain if it's not '1'.
      
      Also drop the documentation's claim that the NetBSD implementation
      is usable.  It might be, depending on which OS version you're using,
      but we're not going to get into that kind of detail.
      
      (Maybe someday we should ditch all these external libraries
      and just write our own UUID code, but today is not that day.)
      
      Nazir Bilal Yavuz, with cosmetic adjustments and docs by me.
      Backpatch to all supported versions.
      
      Discussion: https://postgr.es/m/3848059.1661038772@sss.pgh.pa.us
      Discussion: https://postgr.es/m/17358-89806e7420797025@postgresql.org
      e55ccb3b
  16. 08 Sep, 2022 1 commit
    • Alvaro Herrera's avatar
      Choose FK name correctly during partition attachment · 640c20d6
      Alvaro Herrera authored
      During ALTER TABLE ATTACH PARTITION, if the name of a parent's foreign
      key constraint is already used on the partition, the code tries to
      choose another one before the FK attributes list has been populated,
      so the resulting constraint name was "<relname>__fkey" instead of
      "<relname>_<attrs>_fkey".  Repair, and add a test case.
      
      Backpatch to 12.  In 11, the code to attach a partition was not smart
      enough to cope with conflicting constraint names, so the problem doesn't
      exist there.
      
      Author: Jehan-Guillaume de Rorthais <jgdr@dalibo.com>
      Discussion: https://postgr.es/m/20220901184156.738ebee5@karst
      640c20d6
  17. 05 Sep, 2022 1 commit
  18. 03 Sep, 2022 3 commits
  19. 02 Sep, 2022 1 commit
  20. 01 Sep, 2022 4 commits