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 1pvjqW-0007ZS-Hv for pgsql-hackers@arkaria.postgresql.org; Sun, 07 May 2023 19:15:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pvjqT-0002zp-TP for pgsql-hackers@arkaria.postgresql.org; Sun, 07 May 2023 19:14:57 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pvjqT-0002za-Ec; Sun, 07 May 2023 19:14:57 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1pvjqK-001BQK-2F; Sun, 07 May 2023 19:14:54 +0000 Received: from [172.20.8.227] (unknown [94.200.20.204]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 88C07E20F11; Sun, 7 May 2023 22:14:45 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1683486887; bh=uH831M/F60SQkH3VBUg5xnDxbdu6ioGDHXrEg3jedPc=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=UuqNgPXcdqgvWK0cxtGEk2qloZe9brLB6XKjnxtIJ3wiNuBg3P3c3i5PN/z1bNuqT oSiocWIOdg5GCi1Ln9a8J7teFnqpzEU+4FLP+haHvr8dbr0l/m+VaRBMkzh1Bzso8o iXxeRNxAa1pJfY3GecG+yqO4oGmUDprYgZi6SVOfgHg/nTiZxPjWT2Q7sJ65jLvSPb ino4G8T497OhvlxdRGdfEGVScegNxCzD2u395tWfnXBX7Ssnw12NlrjqccPIhZacqi R2d9ApbU3yuX6gUwKOQ8ohmO5Rv9JCF06z7Opk7HlAPk8VIkFKHJac4/HUDcQ7t5DC mek43+c2VcRHw== Content-Type: multipart/mixed; boundary="------------n9Xn0290kihyo5EknCNApdO5" Message-ID: <39e7431c-1224-ab05-c67c-68f4cf625442@postgrespro.ru> Date: Sun, 7 May 2023 22:14:41 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: psql: Add role's membership options to the \du+ command To: "David G. Johnston" , "Jonathan S. Katz" Cc: Tom Lane , Robert Haas , David Zhang , "pgsql-hackers@lists.postgresql.org" , rmt@lists.postgresql.org, horikyota.ntt@gmail.com References: <42678ca5-f3c6-db1b-e0c5-c63c3ce8997e@postgrespro.ru> <1525117.1680628353@sss.pgh.pa.us> <1575395.1680629866@sss.pgh.pa.us> <1831161.1680703111@sss.pgh.pa.us> <2977612.1683131109@sss.pgh.pa.us> Content-Language: en-US, ru-RU From: Pavel Luzanov 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. --------------n9Xn0290kihyo5EknCNApdO5 Content-Type: multipart/alternative; boundary="------------Gxlb50OFpVg0j3sg5uocU0AW" --------------Gxlb50OFpVg0j3sg5uocU0AW Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 05.05.2023 19:51, David G. Johnston wrote: > But if it is really a blocker then maybe we should produce 3 separate > newline separated columns, one for the member of role, one for the > list of attributes, and one with the grantor.  The column headers can > be translated more easily as single nouns.  The readability quite > probably would end up being equivalent (maybe even better) in tabular > form instead of sentence form. Just to visualize this approach. Below are the output for the tabular form and the sentence form from last patch version (sql script attached): Tabular form     rolname      |     memberof     |       options       |     grantor ------------------+------------------+---------------------+------------------ postgres         |                  |                     |  regress_du_admin | regress_du_role0+| admin, inherit, set+| postgres        +                  | regress_du_role1+| admin, inherit, set+| postgres        +                  | regress_du_role2 | admin, inherit, set | postgres regress_du_role0 |                  |                     |  regress_du_role1 | regress_du_role0+| admin, inherit, set+| regress_du_admin+                  | regress_du_role0+| inherit            +| regress_du_role1+                  | regress_du_role0 | set                 | regress_du_role2 regress_du_role2 | regress_du_role0+| admin              +| regress_du_admin+                  | regress_du_role0+| inherit, set       +| regress_du_role1+                  | regress_du_role0+| empty              +| regress_du_role2+                  | regress_du_role1 | admin, set          | regress_du_admin(5 rows)Sentence form from patch v7     rolname      |                           memberof ------------------+-------------------------------------------------------------- postgres         |  regress_du_admin | regress_du_role0 from postgres (admin, inherit, set)        +                  | regress_du_role1 from postgres (admin, inherit, set)        +                  | regress_du_role2 from postgres (admin, inherit, set) regress_du_role0 |  regress_du_role1 | regress_du_role0 from regress_du_admin (admin, inherit, set)+                  | regress_du_role0 from regress_du_role1 (inherit)            +                  | regress_du_role0 from regress_du_role2 (set) regress_du_role2 | regress_du_role0 from regress_du_admin (admin)              +                  | regress_du_role0 from regress_du_role1 (inherit, set)       +                  | regress_du_role0 from regress_du_role2 (empty)              +                  | regress_du_role1 from regress_du_admin (admin, set)(5 rows) The tabular form solves the latest patch translation problems mentioned by Kyotaro. But it requires mapping elements between 3 array-like columns. To move forward, needs more opinions? ----- Pavel Luzanov --------------Gxlb50OFpVg0j3sg5uocU0AW Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit
On 05.05.2023 19:51, David G. Johnston wrote:
But if it is really a blocker then maybe we should produce 3 separate newline separated columns, one for the member of role, one for the list of attributes, and one with the grantor.  The column headers can be translated more easily as single nouns.  The readability quite probably would end up being equivalent (maybe even better) in tabular form instead of sentence form.

Just to visualize this approach.
Below are the output for the tabular form and the sentence form from last patch version
(sql script attached):
Tabular form
     rolname      |     memberof     |       options       |     grantor      
------------------+------------------+---------------------+------------------
 postgres         |                  |                     | 
 regress_du_admin | regress_du_role0+| admin, inherit, set+| postgres        +
                  | regress_du_role1+| admin, inherit, set+| postgres        +
                  | regress_du_role2 | admin, inherit, set | postgres
 regress_du_role0 |                  |                     | 
 regress_du_role1 | regress_du_role0+| admin, inherit, set+| regress_du_admin+
                  | regress_du_role0+| inherit            +| regress_du_role1+
                  | regress_du_role0 | set                 | regress_du_role2
 regress_du_role2 | regress_du_role0+| admin              +| regress_du_admin+
                  | regress_du_role0+| inherit, set       +| regress_du_role1+
                  | regress_du_role0+| empty              +| regress_du_role2+
                  | regress_du_role1 | admin, set          | regress_du_admin
(5 rows)

Sentence form from patch v7
     rolname      |                           memberof                           
------------------+--------------------------------------------------------------
 postgres         | 
 regress_du_admin | regress_du_role0 from postgres (admin, inherit, set)        +
                  | regress_du_role1 from postgres (admin, inherit, set)        +
                  | regress_du_role2 from postgres (admin, inherit, set)
 regress_du_role0 | 
 regress_du_role1 | regress_du_role0 from regress_du_admin (admin, inherit, set)+
                  | regress_du_role0 from regress_du_role1 (inherit)            +
                  | regress_du_role0 from regress_du_role2 (set)
 regress_du_role2 | regress_du_role0 from regress_du_admin (admin)              +
                  | regress_du_role0 from regress_du_role1 (inherit, set)       +
                  | regress_du_role0 from regress_du_role2 (empty)              +
                  | regress_du_role1 from regress_du_admin (admin, set)
(5 rows)
 
The tabular form solves the latest patch translation problems mentioned by Kyotaro.
But it requires mapping elements between 3 array-like columns.

To move forward, needs more opinions?
 
-----
Pavel Luzanov
--------------Gxlb50OFpVg0j3sg5uocU0AW-- --------------n9Xn0290kihyo5EknCNApdO5 Content-Type: application/sql; name="t.sql" Content-Disposition: attachment; filename="t.sql" Content-Transfer-Encoding: base64 LyoKXGVjaG8gdGVzdCBkYXRhIGZvciByZWdyZXNzaW9uIHRlc3QKQ1JFQVRFIFJPTEUgcmVn cmVzc19kdV9yb2xlMDsKQ1JFQVRFIFJPTEUgcmVncmVzc19kdV9yb2xlMTsKQ1JFQVRFIFJP TEUgcmVncmVzc19kdV9yb2xlMiBMT0dJTiBDUkVBVEVST0xFIEJZUEFTU1JMUyBSRVBMSUNB VElPTiBDUkVBVEVEQiBOT0lOSEVSSVQgQ09OTkVDVElPTiBMSU1JVCAzIFZBTElEIFVOVElM ICdpbmZpbml0eSc7CkNSRUFURSBST0xFIHJlZ3Jlc3NfZHVfYWRtaW4gTE9HSU4gQ1JFQVRF Uk9MRTsKQ09NTUVOVCBPTiBST0xFIHJlZ3Jlc3NfZHVfcm9sZTAgSVMgJ0Rlc2NyaXB0aW9u IGZvciByZWdyZXNzX2R1X3JvbGUwJzsKQ09NTUVOVCBPTiBST0xFIHJlZ3Jlc3NfZHVfcm9s ZTEgSVMgJ0Rlc2NyaXB0aW9uIGZvciByZWdyZXNzX2R1X3JvbGUxJzsKQ09NTUVOVCBPTiBS T0xFIHJlZ3Jlc3NfZHVfcm9sZTIgSVMgJ0Rlc2NyaXB0aW9uIGZvciByZWdyZXNzX2R1X3Jv bGUyJzsKQ09NTUVOVCBPTiBST0xFIHJlZ3Jlc3NfZHVfYWRtaW4gSVMgJ0Rlc2NyaXB0aW9u IGZvciByZWdyZXNzX2R1X2FkbWluJzsKR1JBTlQgcmVncmVzc19kdV9yb2xlMCBUTyByZWdy ZXNzX2R1X2FkbWluIFdJVEggQURNSU4gVFJVRTsKR1JBTlQgcmVncmVzc19kdV9yb2xlMSBU TyByZWdyZXNzX2R1X2FkbWluIFdJVEggQURNSU4gVFJVRTsKR1JBTlQgcmVncmVzc19kdV9y b2xlMiBUTyByZWdyZXNzX2R1X2FkbWluIFdJVEggQURNSU4gVFJVRTsKR1JBTlQgcmVncmVz c19kdV9yb2xlMCBUTyByZWdyZXNzX2R1X3JvbGUxIFdJVEggQURNSU4gVFJVRSwgIElOSEVS SVQgVFJVRSwgIFNFVCBUUlVFICBHUkFOVEVEIEJZIHJlZ3Jlc3NfZHVfYWRtaW47CkdSQU5U IHJlZ3Jlc3NfZHVfcm9sZTAgVE8gcmVncmVzc19kdV9yb2xlMiBXSVRIIEFETUlOIFRSVUUs ICBJTkhFUklUIEZBTFNFLCBTRVQgRkFMU0UgR1JBTlRFRCBCWSByZWdyZXNzX2R1X2FkbWlu OwpHUkFOVCByZWdyZXNzX2R1X3JvbGUxIFRPIHJlZ3Jlc3NfZHVfcm9sZTIgV0lUSCBBRE1J TiBUUlVFICwgSU5IRVJJVCBGQUxTRSwgU0VUIFRSVUUgIEdSQU5URUQgQlkgcmVncmVzc19k dV9hZG1pbjsKR1JBTlQgcmVncmVzc19kdV9yb2xlMCBUTyByZWdyZXNzX2R1X3JvbGUxIFdJ VEggQURNSU4gRkFMU0UsIElOSEVSSVQgVFJVRSwgIFNFVCBGQUxTRSBHUkFOVEVEIEJZIHJl Z3Jlc3NfZHVfcm9sZTE7CkdSQU5UIHJlZ3Jlc3NfZHVfcm9sZTAgVE8gcmVncmVzc19kdV9y b2xlMiBXSVRIIEFETUlOIEZBTFNFLCBJTkhFUklUIFRSVUUgLCBTRVQgVFJVRSAgR1JBTlRF RCBCWSByZWdyZXNzX2R1X3JvbGUxOwpHUkFOVCByZWdyZXNzX2R1X3JvbGUwIFRPIHJlZ3Jl c3NfZHVfcm9sZTEgV0lUSCBBRE1JTiBGQUxTRSwgSU5IRVJJVCBGQUxTRSwgU0VUIFRSVUUg IEdSQU5URUQgQlkgcmVncmVzc19kdV9yb2xlMjsKR1JBTlQgcmVncmVzc19kdV9yb2xlMCBU TyByZWdyZXNzX2R1X3JvbGUyIFdJVEggQURNSU4gRkFMU0UsIElOSEVSSVQgRkFMU0UsIFNF VCBGQUxTRSBHUkFOVEVEIEJZIHJlZ3Jlc3NfZHVfcm9sZTI7CiovCgpcZWNobyBUYWJ1bGFy IGZvcm0KU0VMRUNUIHIucm9sbmFtZSwgCiAgICAgICBwZ19jYXRhbG9nLnN0cmluZ19hZ2co bS5yb2xlaWQ6OnJlZ3JvbGU6OnRleHQsIEUnXG4nIE9SREVSIEJZIG0ucm9sZWlkOjpyZWdy b2xlOjp0ZXh0LCBtLmdyYW50b3I6OnJlZ3JvbGU6OnRleHQpIG1lbWJlcm9mLAogICAgICAg cGdfY2F0YWxvZy5zdHJpbmdfYWdnKAogICAgICAgICBDQVNFIFdIRU4gbS5yb2xlaWQgSVMg Tk9UIE5VTEwgVEhFTgogICAgICAgICAgIHBnX2NhdGFsb2cucmVnZXhwX3JlcGxhY2UoCiAg ICAgICAgICAgICBwZ19jYXRhbG9nLmNvbmNhdF93cygnLCAnLAogICAgICAgICAgICAgICBD QVNFIFdIRU4gbS5hZG1pbl9vcHRpb24gVEhFTiAnYWRtaW4nIEVORCwKICAgICAgICAgICAg ICAgQ0FTRSBXSEVOIG0uaW5oZXJpdF9vcHRpb24gVEhFTiAnaW5oZXJpdCcgRU5ELAogICAg ICAgICAgICAgICBDQVNFIFdIRU4gbS5zZXRfb3B0aW9uIFRIRU4gJ3NldCcgRU5EKSwKICAg ICAgICAgICAgJ14kJywgJ2VtcHR5JykKICAgICAgICAgRU5ECiAgICAgICAgICwgRSdcbicg T1JERVIgQlkgbS5yb2xlaWQ6OnJlZ3JvbGU6OnRleHQsIG0uZ3JhbnRvcjo6cmVncm9sZTo6 dGV4dCkgb3B0aW9ucywKICAgICAgIHBnX2NhdGFsb2cuc3RyaW5nX2FnZyhtLmdyYW50b3I6 OnJlZ3JvbGU6OnRleHQsIEUnXG4nIE9SREVSIEJZIG0ucm9sZWlkOjpyZWdyb2xlOjp0ZXh0 LCBtLmdyYW50b3I6OnJlZ3JvbGU6OnRleHQpIGdyYW50b3IKRlJPTSBwZ19jYXRhbG9nLnBn X3JvbGVzIHIKICAgICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19hdXRoX21lbWJlcnMgbSBP TiAobS5tZW1iZXIgPSByLm9pZCkKV0hFUkUgci5yb2xuYW1lICF+ICdecGdfJwpHUk9VUCBC WSByLnJvbG5hbWUKT1JERVIgQlkgci5yb2xuYW1lOwoKXGVjaG8gU2VudGVuY2UgZm9ybSBm cm9tIHBhdGNoIHY3ClNFTEVDVCByLnJvbG5hbWUsIAogIChTRUxFQ1QgcGdfY2F0YWxvZy5z dHJpbmdfYWdnKAogICAgcGdfY2F0YWxvZy5mb3JtYXQoJyVJIGZyb20gJUkgKCVzKScsCiAg ICAgIGIucm9sbmFtZSwgbS5ncmFudG9yOjpwZ19jYXRhbG9nLnJlZ3JvbGU6OnBnX2NhdGFs b2cudGV4dCwKICAgICAgcGdfY2F0YWxvZy5yZWdleHBfcmVwbGFjZSgKICAgICAgICBwZ19j YXRhbG9nLmNvbmNhdF93cygnLCAnLAogICAgICAgICAgQ0FTRSBXSEVOIG0uYWRtaW5fb3B0 aW9uIFRIRU4gJ2FkbWluJyBFTkQsCiAgICAgICAgICBDQVNFIFdIRU4gbS5pbmhlcml0X29w dGlvbiBUSEVOICdpbmhlcml0JyBFTkQsCiAgICAgICAgICBDQVNFIFdIRU4gbS5zZXRfb3B0 aW9uIFRIRU4gJ3NldCcgRU5EKSwKICAgICAgJ14kJywgJ2VtcHR5JykKICAgICksIEUnXG4n CiAgICBPUkRFUiBCWSBiLnJvbG5hbWUsIG0uZ3JhbnRvcjo6cGdfY2F0YWxvZy5yZWdyb2xl OjpwZ19jYXRhbG9nLnRleHQpCiAgRlJPTSBwZ19jYXRhbG9nLnBnX2F1dGhfbWVtYmVycyBt CiAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfcm9sZXMgYiBPTiAobS5yb2xlaWQgPSBiLm9p ZCkKICBXSEVSRSBtLm1lbWJlciA9IHIub2lkKSBhcyBtZW1iZXJvZgpGUk9NIHBnX2NhdGFs b2cucGdfcm9sZXMgcgpXSEVSRSByLnJvbG5hbWUgIX4gJ15wZ18nCk9SREVSIEJZIDE7Cgo= --------------n9Xn0290kihyo5EknCNApdO5--