Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRAzg-0003BK-5k for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Mar 2022 10:53:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nRAzf-0007at-2V for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Mar 2022 10:53:35 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRAze-0007aj-KJ for pgsql-hackers@lists.postgresql.org; Mon, 07 Mar 2022 10:53:34 +0000 Received: from mail-ej1-x636.google.com ([2a00:1450:4864:20::636]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nRAzc-0004E1-21 for pgsql-hackers@lists.postgresql.org; Mon, 07 Mar 2022 10:53:33 +0000 Received: by mail-ej1-x636.google.com with SMTP id p15so30972920ejc.7 for ; Mon, 07 Mar 2022 02:53:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=PqCg/+i+CTfmMgMrhfvm2zkNb/kHrXmjue+HWZgxEgA=; b=Qo63oGeRaDphpDxqDKb3NLgvR+oU0FgxviUljL+1u6N9aUl+uvF+Y5SUPqSujVhCvu XDJlZW/CanF8cej0aUJ1YQm7c6MgSxsGld7+5o7Du/nljrKpnGs2AoT6cNkvBBlxLBS0 QOLlSn4DnQj3ZSWNTUADS6fGNhkuHtzyDMQQB1+E4fIQca0dYXwnEeitVphOu6bzPwDr oEKPVjb0rfisAr9dMUWlpmUEqZt2m5+iWsLuEuRbyF6QPV+XWkErHrl9d/O/arc+HQ77 kpZ9UufulG98sUL9pBkEAgfqdwk76QpPRfjSxuPYDQMwwDJqE6FejBYOGkFFGWZ/ZAF5 ZwCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=PqCg/+i+CTfmMgMrhfvm2zkNb/kHrXmjue+HWZgxEgA=; b=rFXXIcZ5yOZL0vLNlVGr67ggiFIo6yO23cxocxDjLX0FCDFzbP4euYW3cQV6G/XAkG HGKi6VmgSld+YlH7F5FgRVOvG7T4WPvQHjLDzo402rOFfEED38ApjnP1KwaCD++FTHNJ 6rWIRPgYyrav+k/iXu3Ov7DXtyMOdlAA17K/3IP+CpvTlI0cOIZFlh+4sRkgY4F3H4PW XVtNeBC0sxDrdTAmE+gfuieJEqZY9vqLZth5C0nJS9Jx5T9zNJ5oejlZ371BcKGGc3OR UtjgAnDP3FKRaWE2yxQhTHlWZjjtIabf2rJiItCD3EiNGtgASyLCEhmnK+KkLvCINhq4 dbUQ== X-Gm-Message-State: AOAM532ffBiiez1DXjitlCWvZcpBNU2xP5GUTxDDknCQAnmwBmWwsdsr +JqdkjkqRMyPL1Iu/A14GvfB2lLjKIRrujE4TNE= X-Google-Smtp-Source: ABdhPJy674Ef9UkD19l50SMOiKzvKVhofwL8bV75vTOMN8YblzfwePxihd2GCOZbQdrw1UE67iqhJGOREe/sBtY0adU= X-Received: by 2002:a17:906:c113:b0:6d7:7b53:9cb with SMTP id do19-20020a170906c11300b006d77b5309cbmr9025682ejc.197.1646650410331; Mon, 07 Mar 2022 02:53:30 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: vignesh C Date: Mon, 7 Mar 2022 16:23:17 +0530 Message-ID: Subject: Re: Handle infinite recursion in logical replication setup To: Peter Smith Cc: "kuroda.hayato@fujitsu.com" , PostgreSQL Hackers Content-Type: text/plain; charset="UTF-8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Mon, Mar 7, 2022 at 1:45 PM Peter Smith wrote: > > On Mon, Mar 7, 2022 at 6:17 PM vignesh C wrote: > > > > On Mon, Mar 7, 2022 at 11:45 AM Peter Smith wrote: > > > > > > On Mon, Mar 7, 2022 at 4:20 PM vignesh C wrote: > > > > > > > > On Mon, Mar 7, 2022 at 10:26 AM Peter Smith wrote: > > > > > > > > > > Hi Vignesh, I also have not looked at the patch yet, but I have what > > > > > seems like a very fundamental (and possibly dumb) question... > > > > > > > > > > Basically, I do not understand the choice of syntax for setting things up. > > > > > > > > > > IMO that "only-local" option sounds very similar to the other > > > > > PUBLICATION ("publish") options which decide the kinds of things that > > > > > will be published. So it feels more natural for me to think of the > > > > > publisher as being the one to decide what will be published. > > > > > > > > > > e.g. > > > > > > > > > > option 1: > > > > > CREATE PUBLICATION p1 FOR TABLE t1; > > > > > CREATE SUBSCRITION s1 ... FOR PUBLICATION p1 WITH (only_local = true); > > > > > > > > > > option 2: > > > > > CREATE PUBLICATION p1 FOR TABLE t1 WEHRE (publish = 'only_local'); > > > > > CREATE SUBSCRITION s1 ... FOR PUBLICATION p1; > > > > > > > > > > ~~ > > > > > > > > > > IIUC the patch is using option 1. My first impression was it feels > > > > > back-to-front for the SUBSCRIPTION telling the PUBLICATION what to > > > > > publish. > > > > > > > > > > So, why does the patch use syntax option 1? > > > > > > > > I felt the advantage with keeping it at the subscription side is that, > > > > the subscriber from one node can subscribe with only_local option on > > > > and a different subscriber from a different node can subscribe with > > > > only_local option as off. This might not be possible with having the > > > > option at publisher side. Having it at the subscriber side might give > > > > more flexibility for the user. > > > > > > > > > > OK. Option 2 needs two publications for that scenario. IMO it's more > > > intuitive this way, but maybe you wanted to avoid the extra > > > publications? > > > > Yes, I wanted to avoid the extra publication creation that you pointed > > out. Option 1 can handle this scenario without creating the extra > > publications: > > node0: CREATE PUBLICATION p1 FOR TABLE t1; > > node1: CREATE SUBSCRIPTION s1 ... FOR PUBLICATION p1 with (only_local = on); > > node2: CREATE SUBSCRIPTION s1 ... FOR PUBLICATION p1 with (only_local = off); > > > > I'm ok with both the approaches, now that this scenario can be handled > > by using both the options. i.e providing only_local option as an > > option while creating publication or providing only_local option as an > > option while creating subscription as Peter has pointed out at [1]. > > option 1: > > CREATE PUBLICATION p1 FOR TABLE t1; > > CREATE SUBSCRITION s1 ... FOR PUBLICATION p1 WITH (only_local = true); > > > > option 2: > > CREATE PUBLICATION p1 FOR TABLE t1 WITH (publish = 'only_local'); > > CREATE SUBSCRITION s1 ... FOR PUBLICATION p1; > > > > Shall we get a few opinions on this and take it in that direction? > > > > [1] - https://www.postgresql.org/message-id/CAHut%2BPsAWaETh9VMymbBfMrqiE1KuqMq%2BwpBg0s7eMzwLATr%2Bw%40mail.gmail.com > > > > Regards, > > Vignesh > > BTW here is a counter-example to your scenario from earlier. > > Let's say I have a publication p1 and p2 and want to subscribe to p1 > with only_local=true, and p2 with only_local = false; > > Using the current OPtion 1 syntax you cannot do this with a single > subscription because the option is tied to the subscription. > But using syntax Option 2 you may be able to do it. > > Option 1: > CREATE PUBLICATION p1 FOR TABLE t1; > CREATE PUBLICATION p2 FOR TABLE t2; > CREATE SUBSCRIPTION s1 ... FOR PUBLICATION p1 WITH (local_only = true); > CREATE SUBSCRIPTION s2 ... FOR PUBLICATION p1 WITH (local_only = false); > > Option 2: > CREATE PUBLICATION p1 FOR TABLE t1 WITH (publish = 'local_only'); > CREATE PUBLICATION p2 FOR TABLE t2; > CREATE SUBSCRIPTION s1 ... FOR PUBLICATION p1, p2; I felt having multiple publications will create duplicate entries in the system table, Amit also has pointed this at [1]. Also enhancing this approach to support filtering based on replication origin which is suggested by dilip at [2] is also on the client side and also the initial check to handle the copy_data specified by Amit at [3] will be done by the client side. Based on the above I feel the existing approach is better. I might be missing something here. [1] - https://www.postgresql.org/message-id/CAA4eK1LgCVv8u-fOsMPbGC96sWXhT3EKOBAeFW3g84otjStztw%40mail.gmail.com [2] - https://www.postgresql.org/message-id/CAFiTN-tKbjHDjAFNnqRoR8u1B%2Bfs0wunGz%3D3wp0iU-sUaxZJTQ%40mail.gmail.com [3] - https://www.postgresql.org/message-id/CAA4eK1%2Bco2cd8a6okgUD_pcFEHcc7mVc0k_RE2%3D6ahyv3WPRMg%40mail.gmail.com Regards, Vignesh