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 1wPJFg-000djs-1C for pgsql-hackers@arkaria.postgresql.org; Tue, 19 May 2026 12:08:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wPJFc-004GJL-02 for pgsql-hackers@arkaria.postgresql.org; Tue, 19 May 2026 12:08: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 1wPJFb-004GJD-1j for pgsql-hackers@lists.postgresql.org; Tue, 19 May 2026 12:08:44 +0000 Received: from udcm-wwu2.uni-muenster.de ([128.176.118.28]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wPJFY-00000000K9M-1xA7 for pgsql-hackers@lists.postgresql.org; Tue, 19 May 2026 12:08:43 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=uni-muenster.de; i=@uni-muenster.de; q=dns/txt; s=uniout; t=1779192522; x=1810728522; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to; bh=AAEadI3poa3XEgJe7oMPvZPE3+weXhP4hqVaI1BZ6g8=; b=gupWjVJIyDOIiG+ChGvBb9hr6O/JGrQpNLpY+k7eLYQeql4TRz3b6Jhl qKbggQqyIvol95BwyIBKxaPMeCbXGy6Lo4nyJyy8noNJid5PRixopVeRb czOx6cuTC/jX+AudtHLGT9DOSkse7GP2OFGncPeohszCTOgabK2/1MrTo k3ikiege079IdxOWq9OlRBGPmWJzOjhqer59+yMYePKh0AQONfIAFFLhq jFUd3sPnhYt+fb+fq7fwtLGBkdzC47j2CPfZpih9Inmkk1P1hvjcku9xJ firLGkly4nTIhkRXgUxN4f3k07D/doqZOacGT9aVoKqRwAcoctCTGZOi0 A==; X-CSE-ConnectionGUID: aVq7hBPaTtWpDU1ewjePCA== X-CSE-MsgGUID: YU2jFa1JRcuNsaYeU41c3Q== X-IronPort-AV: E=Sophos;i="6.23,243,1770591600"; d="scan'208,223";a="394617278" Received: from secmail.uni-muenster.de ([128.176.118.4]) by UDCM-RELAY2.UNI-MUENSTER.DE with ESMTP; 19 May 2026 14:08:38 +0200 Received: from [192.168.178.49] (dynamic-080-171-252-034.80.171.pool.telefonica.de [80.171.252.34]) by SECMAIL.UNI-MUENSTER.DE (Postfix) with ESMTPSA id 6E36920ADF03; Tue, 19 May 2026 14:08:37 +0200 (CEST) Content-Type: multipart/mixed; boundary="------------aq61yX2sv1UcbpZi6MU0r7gr" Message-ID: <1b1c88ce-2c61-4faf-b647-496525fc177f@uni-muenster.de> Date: Tue, 19 May 2026 14:08:36 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: PSQL - prevent describe listing tables that are already in listed schemas To: Peter Smith Cc: PostgreSQL Hackers References: <5420ddcb-7b55-4a73-b8c5-3602abfac78b@uni-muenster.de> Content-Language: en-US, de-DE From: Jim Jones In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------aq61yX2sv1UcbpZi6MU0r7gr Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 19/05/2026 09:08, Peter Smith wrote: > Thanks for reviewing and testing my patch. PSA v2 with that missing \n restored. LGTM. In the same light, we might also want to take a look at \d+. Currently it can display the publication twice: postgres=# \d+ s.t2 Table "s.t2" Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description --------+---------+-----------+----------+---------+---------+-------------+--------------+------------- c | integer | | | | plain | | | Included in publications: "pub1" WHERE (c > 42) "pub1" Access method: heap Adding a similar logic to describeOneTableDetails might do the trick: " AND NOT EXISTS (\n" " SELECT 1\n" " FROM pg_catalog.pg_publication_namespace pn\n" " WHERE pn.pnpubid = p.oid\n" " AND pn.pnnspid = c.relnamespace)\n", ============== Example: postgres=# CREATE SCHEMA s; CREATE TABLE public.t1(c int); CREATE TABLE s.t2(c int); CREATE TABLE s.t3(c int); CREATE TABLE s.t4(c int); CREATE PUBLICATION pub1 FOR TABLES IN SCHEMA s, TABLE s.t3, s.t4, s.t2 WHERE (c > 42), public.t1; postgres=# \d+ s.t2 Table "s.t2" Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description --------+---------+-----------+----------+---------+---------+-------------+--------------+------------- c | integer | | | | plain | | | Included in publications: "pub1" Access method: heap postgres=# CREATE PUBLICATION pub2 FOR TABLE s.t2; CREATE PUBLICATION postgres=# \d+ s.t2 Table "s.t2" Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description --------+---------+-----------+----------+---------+---------+-------------+--------------+------------- c | integer | | | | plain | | | Included in publications: "pub1" "pub2" Access method: heap postgres=# \d+ s.t3 Table "s.t3" Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description --------+---------+-----------+----------+---------+---------+-------------+--------------+------------- c | integer | | | | plain | | | Included in publications: "pub1" Access method: heap postgres=# \d public.t1 Table "public.t1" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- c | integer | | | Included in publications: "pub1" What do you think? PSA a POC in v3-0002. Best, Jim --------------aq61yX2sv1UcbpZi6MU0r7gr Content-Type: text/x-patch; charset=UTF-8; name="v3-0001-Fix-psql-publication-describe-for-tables-in-schem.patch" Content-Disposition: attachment; filename*0="v3-0001-Fix-psql-publication-describe-for-tables-in-schem.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA4MmQzYTQyNWQ3ZGRhNmMxMWNmYmZjYjhiM2RhZGQ1N2NjNmQyYWY5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBTbWl0aCA8cGV0ZXIuYi5zbWl0aEBmdWpp dHN1LmNvbT4KRGF0ZTogVHVlLCAxOSBNYXkgMjAyNiAxNzowNDo0OSArMTAwMApTdWJqZWN0 OiBbUEFUQ0ggdjMgMS8yXSBGaXggcHNxbCBwdWJsaWNhdGlvbiBkZXNjcmliZSBmb3IgdGFi bGVzIGluIHNjaGVtYQoKLS0tCiBzcmMvYmluL3BzcWwvZGVzY3JpYmUuYyAgICAgICAgICAg ICAgICAgICB8IDcgKysrKysrLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNh dGlvbi5vdXQgfCA2IC0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyks IDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMg Yi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwppbmRleCBlMTQ0OTY1NGY5Ni4uZjU1NTE4OTY1 OTggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCisrKyBiL3NyYy9iaW4v cHNxbC9kZXNjcmliZS5jCkBAIC03MDE1LDcgKzcwMTUsMTIgQEAgZGVzY3JpYmVQdWJsaWNh dGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCQkJCQkgICIgICAgIHBnX2NhdGFsb2cu cGdfcHVibGljYXRpb25fcmVsIHByXG4iCiAJCQkJCQkJICAiV0hFUkUgYy5yZWxuYW1lc3Bh Y2UgPSBuLm9pZFxuIgogCQkJCQkJCSAgIiAgQU5EIGMub2lkID0gcHIucHJyZWxpZFxuIgot CQkJCQkJCSAgIiAgQU5EIHByLnBycHViaWQgPSAnJXMnXG4iLCBwdWJpZCk7CisJCQkJCQkJ ICAiICBBTkQgcHIucHJwdWJpZCA9ICclcydcbiIKKwkJCQkJCQkgICIgIEFORCBuLm9pZCBO T1QgSU4gKFxuIgorCQkJCQkJCSAgIiAgICAgU0VMRUNUIHBuLnBubnNwaWRcbiIKKwkJCQkJ CQkgICIgICAgIEZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9uYW1lc3BhY2UgcG5c biIKKwkJCQkJCQkgICIgICAgIFdIRVJFIHBuLnBucHViaWQgPSAnJXMnXG4pIiwKKwkJCQkJ CQkgIHB1YmlkLCBwdWJpZCk7CiAKIAkJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE5MDAwMCkK IAkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLCAiICBBTkQgTk9UIHByLnByZXhjZXB0 XG4iKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRp b24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKaW5k ZXggMjllNTRiMjE0YTAuLmIyOWI2YjUzMTE5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3B1YmxpY2F0aW9uLm91dApAQCAtMTQ2LDggKzE0Niw2IEBAIFJFU0VUIGNsaWVu dF9taW5fbWVzc2FnZXM7CiAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEFsbCBzZXF1ZW5jZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBHZW5lcmF0ZWQgY29sdW1ucyB8IFZpYSByb290IHwgRGVzY3JpcHRpb24gCiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCiAgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBub25lICAgICAgICAgICAgICB8IGYgICAgICAg IHwgCi1UYWJsZXM6Ci0gICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0IgogCkBAIC0xNjcsOCArMTY1LDYgQEAgQUxURVIg UFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgQUREIFRBQkxFIHB1Yl90ZXN0LnRlc3Rw dWJfbm9wazsKICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxs IHNlcXVlbmNlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IEdlbmVyYXRlZCBjb2x1bW5zIHwgVmlhIHJvb3QgfCBEZXNjcmlwdGlvbiAKIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KICByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgZiAgICAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IG5vbmUgICAgICAgICAgICAgIHwgZiAgICAgICAgfCAKLVRh YmxlczoKLSAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogVGFibGVzIGZyb20gc2NoZW1h czoKICAgICAicHViX3Rlc3QiCiAKQEAgLTgzMiw4ICs4MjgsNiBAQCBSRVNFVCBjbGllbnRf bWluX21lc3NhZ2VzOwogICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBBbGwgc2VxdWVuY2VzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgR2VuZXJhdGVkIGNvbHVtbnMgfCBWaWEgcm9vdCB8IERlc2NyaXB0aW9uIAogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQogIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgbm9uZSAgICAgICAgICAgICAgfCBmICAgICAgICB8 IAotVGFibGVzOgotICAgICJ0ZXN0cHViX3JmX3NjaGVtYTIudGVzdHB1Yl9yZl90Ymw2IiBX SEVSRSAoaSA8IDk5KQogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAidGVzdHB1Yl9yZl9z Y2hlbWEyIgogCi0tIAoyLjU0LjAKCg== --------------aq61yX2sv1UcbpZi6MU0r7gr Content-Type: text/x-patch; charset=UTF-8; name="v3-0002-Fix-publication-duplication-in-table-decription.patch" Content-Disposition: attachment; filename*0="v3-0002-Fix-publication-duplication-in-table-decription.patc"; filename*1="h" Content-Transfer-Encoding: base64 RnJvbSBkMTUzNmU2MTZjZTA3YzI3Y2ZiMzJhMDllYWM0NmJhZTYwMGYxZDY4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gSm9uZXMgPGppbS5qb25lc0B1bmktbXVlbnN0 ZXIuZGU+CkRhdGU6IFR1ZSwgMTkgTWF5IDIwMjYgMTQ6MDA6NDggKzAyMDAKU3ViamVjdDog W1BBVENIIHYzIDIvMl0gRml4IHB1YmxpY2F0aW9uIGR1cGxpY2F0aW9uIGluIHRhYmxlIGRl Y3JpcHRpb24KCi0tLQogc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgfCA3ICsrKysrKy0KIDEg ZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5j CmluZGV4IGY1NTUxODk2NTk4Li43YmFmNjVhYjY2NCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w c3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTMxOTks NyArMzE5OSwxMiBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hl bWFuYW1lLAogCQkJCQkJCQkgICJGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb24gcFxu IgogCQkJCQkJCQkgICIgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwg cHIgT04gcC5vaWQgPSBwci5wcnB1YmlkXG4iCiAJCQkJCQkJCSAgIiAgICAgSk9JTiBwZ19j YXRhbG9nLnBnX2NsYXNzIGMgT04gYy5vaWQgPSBwci5wcnJlbGlkXG4iCi0JCQkJCQkJCSAg IldIRVJFIHByLnBycmVsaWQgPSAnJXMnXG4iLAorCQkJCQkJCQkgICJXSEVSRSBwci5wcnJl bGlkID0gJyVzJ1xuIgorCQkJCQkJCQkgICIgIEFORCBOT1QgRVhJU1RTIChcbiIKKwkJCQkJ CQkJICAiICAgICBTRUxFQ1QgMVxuIgorCQkJCQkJCQkgICIgICAgIEZST00gcGdfY2F0YWxv Zy5wZ19wdWJsaWNhdGlvbl9uYW1lc3BhY2UgcG5cbiIKKwkJCQkJCQkJICAiICAgICBXSEVS RSBwbi5wbnB1YmlkID0gcC5vaWRcbiIKKwkJCQkJCQkJICAiICAgICAgIEFORCBwbi5wbm5z cGlkID0gYy5yZWxuYW1lc3BhY2UpXG4iLAogCQkJCQkJCQkgIG9pZCwgb2lkLCBvaWQpOwog CiAJCQkJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTkwMDAwKQotLSAKMi41NC4wCgo= --------------aq61yX2sv1UcbpZi6MU0r7gr--