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 1wOoX7-000C5C-1I for pgsql-hackers@arkaria.postgresql.org; Mon, 18 May 2026 03:20:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wOoX5-000yMQ-1B for pgsql-hackers@arkaria.postgresql.org; Mon, 18 May 2026 03:20:44 +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 1wOoX4-000yMC-35 for pgsql-hackers@lists.postgresql.org; Mon, 18 May 2026 03:20:44 +0000 Received: from mail-qt1-x82e.google.com ([2607:f8b0:4864:20::82e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wOoX3-000000006n3-1eq0 for pgsql-hackers@lists.postgresql.org; Mon, 18 May 2026 03:20:43 +0000 Received: by mail-qt1-x82e.google.com with SMTP id d75a77b69052e-50e5dbd8e0eso25156961cf.1 for ; Sun, 17 May 2026 20:20:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779074441; cv=none; d=google.com; s=arc-20240605; b=AhLEGYNc8SkIxeIDQTPFkOXOsnYHXLZvEbpVZzSyCMF99YVal+LYFGUhey1i174cAY UXWbwR7aB9XAkc/Epr/DrLJhStywndyG+NphoQp+yU/Tc1V68CzNBBTHEa/nGPGiqxE2 uAFk7x17gCMvatVSbjGaGMtofXfsDXJaM5l6wAFajGs61z/FpyQDajui+35t4HJCgPsI BxCNPgmgN5nU0AzOhHjVutYQuovEVP7Xvijft9i2Y8pHVt/2Rob7eRgd/m1ubJmOhTWk 8OOf5WZVHWcj07b+UyAfv/9uhzYrgTKtJJKoJoSJGuTPbOqeCd1DK3PNa+t5MxfRpaIS HA/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=2r39g+6Q1OtR7M/+gasmTFhbPZV+RmkQNnmqfhELTyQ=; fh=dxJXJbLzq9Nah1LUdsj4QTuQ3JoDScd0wp1YHY64NXM=; b=GJrYub30dtTgpZBPWHiimWx1FxMphJy7nq48kUJ7lqRoqQgoJ41YdkXNqqM3gw8aVX 9CbtVGzHhhB2fhG3HbHFssGj9Zc1diF8OnxFNSYKqA52mgdIhulCV4aIc5RWDMPd0fDS jKpn1ipu7Q30+J11x+GILWXa2Ev/42W1L/QBcTTUoAS/buh4qh0Y9pzUJ0lyxix3ZwR3 bXOiXfbQ8xQKtprWkdMixif5/J9fpimfsC5zk+UNT/0DMumxCsbL3johvrvpq3Dm9Boe E2k6u8WLwhOpvzrPWQhTJcVBl3psF9CaAR4CAsioNiONpLoZOSzdv0XxD16pW6NQBIeB QJ/w==; 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=1779074441; x=1779679241; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=2r39g+6Q1OtR7M/+gasmTFhbPZV+RmkQNnmqfhELTyQ=; b=Zo5bEgB40GVIfjSoYzddzh0rQU8TpO8AkgXt8FTBF/DXoHUQ3Vh1Q16hldlQfJ2dmD QmjqN7GCVs+g2EZcAAqB3I05EuRGrV6UrhbwAnRQLTotOjSiWoGjqJnumSr4BBRf5LRz NSpNzqtaft1CJxl/1VdHeNP5CCJt7rwuK+OADU58wwBWJzykyhVje9sC81ouMNC9E+gm XeNR6TzrXrrxUCZIg9TH5CeNEFpuRYDXgTHbBrd6jugxxGsafZbop0/ImFLIqfjbhJtO Up/7xBdoiaPBQ9FSybDAItYrBLv8vp4XDrz9nU2CKCRUqdas2QIe2nqNkmOupypeddH3 XEhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779074441; x=1779679241; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=2r39g+6Q1OtR7M/+gasmTFhbPZV+RmkQNnmqfhELTyQ=; b=q0Wac3sGnR88DNC5pfO4JZfZ6n+yXnaCrfipWCgYa2u+7dJIjdaBb72PyTO+dMiJGI 1D1nfDm+4gd5QKcSoKojUDl/4zGEiHGEEIw7GUO8IdcTIEPeod/2zjEXDjGGXVl4aeBO De4F/PUjBBjZ+QOQmcC7yrAiY4CSKboggfhtFrr0wlFs5Q2mdeZBE4dQ5G5R7qy7jwfH dT9L/6YMB4R4FXzRXJYs1fftWBiOpnqp9h/mszy8IZMGLCFPtgsMVqdvRHYFB/awvc8V ktCCRLlkZ8ABh0Wppr2CAOVvcmvFKanLUtYcAECYr6QpeFLY1q0AFNA/cOCwmDYSxpr8 D26g== X-Gm-Message-State: AOJu0YxgAMzW14atxvUd8dYp94Vgy0ZL1cyzoa1wYMDktcd64Zr6BTc5 Ly7IZOK02Bp/IXgq/S/H0SWgkv9s5IC8D9xN1uMym2niWJud8b5Dn8DndDScKRFiHu3I/UYC/hp r9TSTI94jJED2ZcyqCIO6sUUugjkNZuz03Fp8 X-Gm-Gg: Acq92OFD/DxtFEtdypJxTrge6rNOd4DWDach4xy43QERA78NHTMsnrFQqsH8Qqpa4n4 TCHhVq0wqZ4gUkmYUJymJtCouDbMZyhtVtsuZ29m5694NLvcJuTgGa46cRfRT0BfChuCFIt1A/S RGBDjpC6ASocn7j00AEjtq3Dq3+fM2iLcpvrOOuxf6jrd+Mvo5uNNRRJRcj6Hsnai+d/COcxEmj C3xweCpOQ0XBUbbFrxoF9teE5oJlNBoQRbnmK9XlLtfN5/3/w+ve0VDl/JHoLzqSlOV/8LuaQg+ wEYAs5XgwIAv5cOPsQ== X-Received: by 2002:a05:622a:2303:b0:50f:b494:7880 with SMTP id d75a77b69052e-5165a1fe090mr189193981cf.51.1779074441141; Sun, 17 May 2026 20:20:41 -0700 (PDT) MIME-Version: 1.0 From: Peter Smith Date: Mon, 18 May 2026 13:20:14 +1000 X-Gm-Features: AVHnY4LQJhNDV-D5uiRn99rBo-W3RxghicRee9ME2OjjNM-OFGCdox6zgbaJlGA Message-ID: Subject: PSQL - prevent describe listing tables that are already in listed schemas To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000018028a06520f0cae" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000018028a06520f0cae Content-Type: text/plain; charset="UTF-8" I noticed a quirk of the psql publication "describe" command (\dRp+). Background: It is permitted for a FOR TABLE publication to overlap with a FOR TABLES IN SCHEMA publication. When a specified table is a member of a published schema (and there is no column list), then there is no clash -- it is just silently absorbed by the schema superset. So, the following is fine: CREATE SCHEMA myschema; CREATE TABLE t99(c int); CREATE TABLE myschema.t1(c int); CREATE PUBLICATION pub1 FOR TABLES IN SCHEMA myschema, TABLE myschema.t1, t99; However, I noticed that \dRp+ displays this publication with table "myschema.t1" still separately listed: e.g. CURRENT BEHAVIOUR test_pub=# \dRp+ pub1 Publication pub1 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: "myschema.t1" "public.t99" Tables from schemas: "myschema" ~~~ IMO it would make more sense if a table is *not* displayed separately when the schema superset is also present. e.g. OUTPUT AFTER PATCHED test_pub=# \dRp+ pub1 Publication pub1 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: "public.t99" Tables from schemas: "myschema" ====== Here are a couple more reasons why I think this patch is helpful: 1. If the specified table had a row filter, then it is confusing to display that row filter under "Tables:" when at the same time the DOCS [2] says "The row filter on a table becomes redundant if FOR TABLES IN SCHEMA is specified and the table belongs to the referred schema." 2. The output will become still more confusing after the FOR TABLES IN SCHEMA EXCEPT gets implemented [1]. Because it is not obvious, you need to read this a couple of times to be sure what is in and out. e.g. Output with the EXCEPT patch applied: Tables: "myschema2.t2" Tables from schemas: "myschema2" Except tables: "myschema2.t1" ~~~ PSA patch v1. Thoughts? ====== [1] https://www.postgresql.org/message-id/flat/CABdArM5sw4Q1ZU8HGdo4BSc1A_%2B8xtUNq17j6wcir%3DyMUy19Cg%40mail.gmail.com [2] https://www.postgresql.org/docs/devel/sql-createpublication.html Kind Regards, Peter Smith. Fujitsu Australia --00000000000018028a06520f0cae Content-Type: application/octet-stream; name="v1-0001-Fix-psql-publication-describe-for-tables-in-schem.patch" Content-Disposition: attachment; filename="v1-0001-Fix-psql-publication-describe-for-tables-in-schem.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpamtiqf0 RnJvbSBmMjhlOGMzYTVkMWVkNWU3YWIxN2Q5NzgyOTNkMTlhYjM1ZGFjODEwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBTbWl0aCA8cGV0ZXIuYi5zbWl0aEBmdWppdHN1LmNv bT4KRGF0ZTogTW9uLCAxOCBNYXkgMjAyNiAxMjo1ODo1OCArMTAwMApTdWJqZWN0OiBbUEFUQ0gg djFdIEZpeCBwc3FsIHB1YmxpY2F0aW9uIGRlc2NyaWJlIGZvciB0YWJsZXMgaW4gc2NoZW1hCgot LS0KIHNyYy9iaW4vcHNxbC9kZXNjcmliZS5jICAgICAgICAgICAgICAgICAgIHwgNyArKysrKyst CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCB8IDYgLS0tLS0tCiAy IGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCmlu ZGV4IGUxNDQ5NjU0Zjk2Li5iZWMyY2UwNTdmOSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rl c2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTcwMTUsNyArNzAxNSwx MiBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJCQkJCSAg IiAgICAgcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwgcHJcbiIKIAkJCQkJCQkgICJXSEVS RSBjLnJlbG5hbWVzcGFjZSA9IG4ub2lkXG4iCiAJCQkJCQkJICAiICBBTkQgYy5vaWQgPSBwci5w cnJlbGlkXG4iCi0JCQkJCQkJICAiICBBTkQgcHIucHJwdWJpZCA9ICclcydcbiIsIHB1YmlkKTsK KwkJCQkJCQkgICIgIEFORCBwci5wcnB1YmlkID0gJyVzJ1xuIgorCQkJCQkJCSAgIiAgQU5EIG4u b2lkIE5PVCBJTiAoXG4iCisJCQkJCQkJICAiICAgICBTRUxFQ1QgcG4ucG5uc3BpZFxuIgorCQkJ CQkJCSAgIiAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX25hbWVzcGFjZSBwblxu IgorCQkJCQkJCSAgIiAgICAgV0hFUkUgcG4ucG5wdWJpZCA9ICclcycpIiwKKwkJCQkJCQkgIHB1 YmlkLCBwdWJpZCk7CiAKIAkJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE5MDAwMCkKIAkJCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cigmYnVmLCAiICBBTkQgTk9UIHByLnByZXhjZXB0XG4iKTsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKaW5kZXggMjllNTRiMjE0YTAuLmIy OWI2YjUzMTE5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0 aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dApA QCAtMTQ2LDggKzE0Niw2IEBAIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiAgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBzZXF1ZW5jZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBHZW5lcmF0ZWQgY29sdW1ucyB8IFZpYSBy b290IHwgRGVzY3JpcHRpb24gCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCiAgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBub25lICAgICAgICAgICAgICB8IGYg ICAgICAgIHwgCi1UYWJsZXM6Ci0gICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKIFRhYmxlcyBm cm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0IgogCkBAIC0xNjcsOCArMTY1LDYgQEAgQUxURVIg UFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgQUREIFRBQkxFIHB1Yl90ZXN0LnRlc3RwdWJf bm9wazsKICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIHNlcXVl bmNlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IEdlbmVyYXRl ZCBjb2x1bW5zIHwgVmlhIHJvb3QgfCBEZXNjcmlwdGlvbiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0KICByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IG5vbmUg ICAgICAgICAgICAgIHwgZiAgICAgICAgfCAKLVRhYmxlczoKLSAgICAicHViX3Rlc3QudGVzdHB1 Yl9ub3BrIgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QiCiAKQEAgLTgzMiw4 ICs4MjgsNiBAQCBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgc2VxdWVuY2VzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgR2VuZXJhdGVkIGNvbHVtbnMgfCBWaWEgcm9vdCB8IERl c2NyaXB0aW9uIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQogIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgbm9uZSAgICAgICAgICAgICAgfCBmICAgICAgICB8 IAotVGFibGVzOgotICAgICJ0ZXN0cHViX3JmX3NjaGVtYTIudGVzdHB1Yl9yZl90Ymw2IiBXSEVS RSAoaSA8IDk5KQogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAidGVzdHB1Yl9yZl9zY2hlbWEy IgogCi0tIAoyLjQ3LjMKCg== --00000000000018028a06520f0cae--