Thread

  1. Re: Bug in ALTER SUBSCRIPTION ... SERVER / ... CONNECTION with broken old server

    Jeff Davis <pgsql@j-davis.com> — 2026-05-15T23:18:43Z

    On Fri, 2026-05-15 at 15:18 +0800, Chao Li wrote:
    > 0002 adds this Assert:
    > ```
    > 	if (update_failover || update_two_phase || check_pub_rdt)
    > 	{
    > 		bool		must_use_password;
    > 		char	   *err;
    > 		WalReceiverConn *wrconn;
    > 
    > 		Assert(conninfo_needed);
    > ```
    > 
    > So, for those two paths, if check_pub_rdt is true, then the Assert
    > will be fired, is that intentional?
    
    I've fixed it to be Assert(new_conninfo || orig_conninfo_needed).
    
    Also, the code above was missing the case of SUBOPT_ORIGIN which could
    set check_pub_rdt. I changed it to be more conservative and set
    orig_conninfo_needed=false when one of:
    
      ALTER SUBSCRIPTION ... SERVER
      ALTER SUBSCRIPTION ... CONNECTION
      ALTER SUBSCRIPTION ... SET (slot_name=NONE)
    
    and not try to be precise about which other settings might need
    check_pub_rdt or not.
    
    What do you think of v6-0003? Is it over-engineered? Should the
    subtransaction happen at a lower level? Is there an alternative to
    using a subtransaction?
    
    Regards,
    	Jeff Davis