Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wgsJi-006T8s-0u for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Jul 2026 23:01:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wgsJf-003aSF-2V for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Jul 2026 23:01:31 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wgsJf-003aS6-1A for pgsql-hackers@lists.postgresql.org; Mon, 06 Jul 2026 23:01:31 +0000 Received: from mail-qk1-x72f.google.com ([2607:f8b0:4864:20::72f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wgsJd-00000001v8Z-2WT5 for pgsql-hackers@lists.postgresql.org; Mon, 06 Jul 2026 23:01:30 +0000 Received: by mail-qk1-x72f.google.com with SMTP id af79cd13be357-92e855da580so282974285a.1 for ; Mon, 06 Jul 2026 16:01:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783378888; cv=none; d=google.com; s=arc-20260327; b=DHFf9xidojJceTTBTFrNgBSCfyYxZZe7m/N1vugtbyctGGhYV9I+6q8ojdc3dcNL8u 5ln6tMeK9+Q9fTDe9bhQuXiRP/12jq9k4DZuL1luZP7GKrV8Y7+VZqWD6X5vjWJC3+yb FyOHa160CoPRnpJknHi4ykcIVYItjWHiseH8+i+HbvpaKHYbrHG0kUdAyeI9pAgG8aoY 8hl/Xy7Yn4yIXbPygCzLR4LaMhpl84146BnouHBDZORqEczAA2H0MOwqftg8MZTFzzjl Jlkc6vHbzO9wWqmOWzVeHeuslGUzxUnsOP21QWn9FYryx09DZaggiH0ImunlCISjaMQ8 2puQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=Bt2SLoKWAQwGT/yTGQfBOpdOZxRjnaCIRFQsETVWQSs=; fh=03+Kj+TzCjr9AXj4yQ3EM9g7FXII1hzG6x0p7ArUpss=; b=L0+wIRJhy+b1EENihRgcc3EipMs9kYroJCu9yyQcaNjzOpCrAL842QPHmA/+iX5koF PpG2dSOc4y/BfYg1am1DbKcYtBB0Sm58OtW7H1QkdptPqcVeurctWsbGDPwg/66b30Gv 0TZtkYyJsHBdCB7AekLmRqgEI2NvaSG10px+CTClZrD7XPH3d+tNmJHFwaPRuP5nlRJD N0385cF4WagXZXKhQ39XCeAWafsTqGY/XmjxdTD9G6h07kOY3F6Jgiax4T6f9IdMJAe3 Zv8qDwFG+vwXGhB1L7xXzyJnxwhxEC7hnFN5pO4OBs24QsXq8MaFx0OJkA64efHdF6E3 7xOQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783378888; x=1783983688; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Bt2SLoKWAQwGT/yTGQfBOpdOZxRjnaCIRFQsETVWQSs=; b=qG7TlUM+iecCbjpgTAsy7PoBZVzRgLn7H+KySdg6UkkUFeiFUjUTZXUw8nqpDY4sYd UFt9uCc4GjlN4fqUyf0IaPD3C0OK2M73KYzB3E5hXk0LwJw4iLQhGNz2n7dn77/ZCW8F z/qUAaXqS3uWa4ykTEaWo169rLN/RVYelL9fGwJDm4b0VfMlN+6pkaNuvh3q1SQ/btuZ EbfVaQklQp8pUof5G4KHiuZfmpW2q2vN6hN38brNNHaqaeF1kNin8EsQsknB5pGP8z97 HIqVQO5R11q7wAc/3q1pmvWQgYkEDcMsJjmjZ2B9lhwbIdYuPvUEwgMaoKKKfanMYBdW NKOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783378888; x=1783983688; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Bt2SLoKWAQwGT/yTGQfBOpdOZxRjnaCIRFQsETVWQSs=; b=F7jgKfSrK3Uyyl6qPtlVESRGySzzIi7mJT5klDDn7zNkDtiAYNO006KGnDkwYrJqL4 oCXStn3ODe9taMRJNhA+rVwXP3kLu0BzhDZvoWqIuY6nyHPNz31WoFX2EIe/vQpw3RgU Sv3QffD2Z8B276pURsqreDIioNlLlQ9jDOA9Nc6vRV/odgYnQSa7Q0BpotNjVqQqZwjV 8Na7EnUN/9Z7+N4ToNB5HjO+DpokpbOYLMsow0BZt/mJ6seV8v1eEiUNoByYSvWxGDja O4dpYiNf1O9kQIuOGqFwzm54jj3GGgE4RMS59PLgmu+XBj2/wjfRlEgduls2YWAIxSes FvRQ== X-Forwarded-Encrypted: i=1; AHgh+Rq97XiNsALzp7uR67ujntwzLfgGGnhMDU/5FVdHjDAjSy/vkJ+I9NuDgqpTVqnDUqCg6KxTeaxQEwXgqqt+@lists.postgresql.org X-Gm-Message-State: AOJu0YxbLyeIwKzOL7AwF/ocVAQdzGQh+p9XLomGdu1G71EoKw3yEgZX LbQZOqbsgBqEnVMwnM3YJpPnJzrFlGuV3kUkRbx7Vx1pau2BCxTxsgxrNs6TIofQ9j521DYKvIp VO+b5wha7Lr4oWBXNyLef0HBpWRuqPDA= X-Gm-Gg: AfdE7cmA87+mv2CrGcJxJdGVhdTrQj4GPuRC1A3qJDeBsGKhWj9yw2fEXV9FzVdolc/ wpIV8POtbd/sxbTzCETllbfieHmpXvNHo5ljIffFqNBmhdkroRyW6Xaae7cAu/rekvrR3+UTatU ZrXw+665l/UKjvUHu3luZW6cLsNu8MrcKI1OPWlxmbSj8oJ1vymWPyUhoJ2Nltw/wPiMJbux2/j IKKydJaXzATDYaYzJRAg0ZPiweZ9Ol6UoAT7Ux0eerNFPrQR2N6575tEvvZQEzJ/jkUrsHKJC+C tQdUWjWDrvSsIynme/8ZDXD4q4vXU3bo5vzQvfU3/RQ6wgsIP9FxYQ== X-Received: by 2002:a05:622a:e10c:10b0:51c:7b12:5fd7 with SMTP id d75a77b69052e-51c7b1265d3mr1259591cf.83.1783378888420; Mon, 06 Jul 2026 16:01:28 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Peter Smith Date: Tue, 7 Jul 2026 09:01:00 +1000 X-Gm-Features: AVVi8Cf1Z1VUye3PNZoUxGPsa8LrlUDvfxdIBbE5TIXGoMn1DpqHaC9LyePQnfY Message-ID: Subject: Re: Support EXCEPT for TABLES IN SCHEMA publications To: Nisha Moond Cc: shveta malik , Amit Kapila , Zsolt Parragi , pgsql-hackers@lists.postgresql.org Content-Type: text/plain; charset="UTF-8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hi Nisha. Bug: The current patch is allowing conflicting exclusion lists... ====== Background: It's always been possible for CREATE PUBLICATION to specify the same schema or same table multiple times. test_pub=# CREATE SCHEMA MYSCHEMA; CREATE SCHEMA test_pub=# CREATE TABLE T1(A INT); CREATE TABLE test_pub=# CREATE TABLE MYSCHEMA.T2(A INT); CREATE TABLE test_pub=# CREATE TABLE MYSCHEMA.T3(A INT); CREATE TABLE // same table multiple times is OK test_pub=# CREATE PUBLICATION PUB3 FOR TABLE T1,T1,T1,T1; CREATE PUBLICATION // same schema multiple times is OK test_pub=# CREATE PUBLICATION PUB1 FOR TABLES IN SCHEMA MYSCHEMA, MYSCHEMA, MYSCHEMA; CREATE PUBLICATION ~~~ But, this behaviour is only allowed if there are no specification conflicts. e.g. You can't have multiple tables with column lists: test_pub=# CREATE PUBLICATION PUB4 FOR TABLE T1,T1(A),T1,T1; ERROR: conflicting or redundant column lists for table "t1" ====== Bug: IMO similar restrictions and a similar error message needs to happen for clashing schema exclusions. Specifying the same schema multiple times is fine, but it must be disallowed if there are conflicting exclusion lists. For example, the command below currently works, but it should not: test_pub=# CREATE PUBLICATION PUB2 FOR TABLES IN SCHEMA MYSCHEMA EXCEPT (TABLE T2), MYSCHEMA EXCEPT (TABLE T3), MYSCHEMA; CREATE PUBLICATION test_pub=# \dRp+ PUB2 Publication pub2 Owner | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Generated columns | Via root | Descri ption ----------+------------+---------------+---------+---------+---------+-----------+-------------------+----------+------- ------ postgres | f | f | t | t | t | t | none | f | Tables from schemas: "myschema" Except tables: "myschema.t2" "myschema.t3" ====== Kind Regards, Peter Smith. Fujitsu Australia