Re: Psql patch to show access methods info - Mailing list pgsql-hackers

From s.cherkashin@postgrespro.ru
Subject Re: Psql patch to show access methods info
Date
Msg-id b416da7f636a3c712abf5f2b0318ff0e@postgrespro.ru
Whole thread Raw
In response to Re: Psql patch to show access methods info  (Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp>)
Responses Re: Psql patch to show access methods info
List pgsql-hackers
Thanks for review.

>> With + it shows description:
>> # \dA+
>>                              List of access methods
>>   Name  |
>> Type  |       Handler        |              Description
>> --------+-------+----------------------+-------------------------------
>> ---------
>>  brin   | index | brinhandler          | block range index (BRIN)
>> access method
>>  btree  | index | bthandler            | b-tree index access method
>>  gin    | index | ginhandler           | GIN index access method
>>  gist   | index | gisthandler          | GiST index access method
>>  hash   | index | hashhandler          | hash index access method
>>  heap   | table | heap_tableam_handler | heap table access method
>>  spgist | index | spghandler           | SP-GiST index access method
>> (7 rows)
> 
> Looks nice, but this fails for 9.4 or 9.5 server. I'm not sure
> how far back versions we should support, though.

The command \dA initially displayed an error message when working
on a server version below 9.6, and I did not change this logic.
I'm not sure, but it probably makes sense for versions 9.4 and 9.5
to output something like this query does:
SELECT
      a.amname AS "AM",
      d.description AS "Description"
FROM pg_am a
JOIN pg_description d ON a.oid = d.objoid
ORDER BY 1;

#\dA
     AM   |         Description
--------+-----------------------------
   btree  | b-tree index access method
   gin    | GIN index access method
   gist   | GiST index access method
   hash   | hash index access method
   spgist | SP-GiST index access method

SELECT
      a.amname AS "AM",
      CASE WHEN a.amcanorder THEN 'yes' ELSE 'no' END AS "Ordering",
      CASE WHEN a.amcanunique THEN 'yes' ELSE 'no' END AS "Unique
indexes",
      CASE WHEN a.amcanmulticol THEN 'yes' ELSE 'no' END AS "Multicol
indexes",
      CASE WHEN a.amsearchnulls THEN 'yes' ELSE 'no' END AS "Searching
NULLs",
      CASE WHEN a.amclusterable THEN 'yes' ELSE 'no' END AS "Clusterale"
FROM pg_am a
JOIN pg_description d ON a.oid = d.objoid
ORDER BY 1;

#dA NAME
     AM   | Ordering | Unique indexes | Multicol indexes | Searching 
NULLs
| Clusterale
--------+----------+----------------+------------------+-----------------+------------
   btree  | yes      | yes            | yes              | yes
| yes
   gin    | no       | no             | yes              | no
| no
   gist   | no       | no             | yes              | yes
| yes
   hash   | no       | no             | no               | no
| no
   spgist | no       | no             | no               | yes
| no
(5 rows)

> 
>> The functionality of the \dAp command has been moved to \dA NAME.
>> Now the user can query the properties of a particular AM (or several,
>> using the search pattern) as follows:
>> 
>> # \dA h*
>>                                                          Index access
>> method properties
>>   AM  | Can order | Support unique indexes | Support indexes with
>> multiple columns | Support exclusion constraints | Can include non-key
>> columns
>> ------+-----------+------------------------+---------------------------
>> ------------+-------------------------------+------------------------
>> -----
>>  hash | no        | no                     |
>> no                                    | yes
>> |
>> no
>> (1 row)
> 
> In the earlier patches they were "Can order", "Can unique", "Can
> multi col", "Can exclude" and they indeed look
> too-short. Nevertheless the current column names occupies the top
> four places on the podium by their length. "Foreign-data wrapeer"
> is on the fifth place. Most of them are just one noun. Some of
> them are two-or-three-word nouns. Some of them are single-word
> adjective followed by '?'. \dicp uses single-word adverbs or
> a-few-words nouns without trailing '?'. How about the following?
> 
> 8  Ordering                 yes/no
> 14 Unique indexes           yes/no
> 16 Multicol indexes         yes/no
> 21 Exclusion constraints    yes/no
> 23 Include non-key columns  yes/no
> =====
> 20 Foreign-data wrapper
> 
> 
> Does anyone have better wordings? Or, are the current wordings OK?

I like this version.


>> # \dAo gin jsonb_ops
>>      List operators of family related to access method
>>  AM  | Opfamily Schema | Opfamily Name |      Operator
>> -----+-----------------+---------------+--------------------
>>  gin | pg_catalog      | jsonb_ops     | @> (jsonb, jsonb)
>>  gin | pg_catalog      | jsonb_ops     | ? (jsonb, text)
>>  gin | pg_catalog      | jsonb_ops     | ?| (jsonb, text[])
>>  gin | pg_catalog      | jsonb_ops     | ?& (jsonb, text[])
>> (4 rows)
> 
> I'm not sure but couldn't we show the opfamily name in full
> qualified? The schema is not a property of the AM.
Now Opfamily Schema is shown if opfamily name is not visible in the
current
schema search path (check by pg_opfamily_is_visible().

> 
>> # \dAo+ gist circle_ops
>>                          List operators of family related to access
>> method
>>   AM  | Opfamily Schema | Opfamily Name |       Operator       |
>> Strategy | Purpose  | Sort family
>> ------+-----------------+---------------+----------------------+-------
>> ---+----------+-------------
>>  gist | pg_catalog      | circle_ops    | << (circle,
>> circle)  |        1 | search   |
>>  ...
>>  gist | pg_catalog      | circle_ops    | <-> (circle,
>> point)  |       15 | ordering | float_ops
> 
> "Sort family" doesn't make sense. "Sort opfamily" or "Sort
> operator family"?

Renamed.

>> The \dAop command has been renamed to \dAp.
>> It displays list of support procedures associated with access method
>> operator families.
>> # \dAp hash array_ops
>>                 List of operator family procedures
>>   AM  | Family schema | Family name |   Left   |  Right   | Number
>> ------+---------------+-------------+----------+----------+--------
>>  hash | pg_catalog    | array_ops   | anyarray | anyarray |      1
>>  hash | pg_catalog    | array_ops   | anyarray | anyarray |      2
>> (2 rows)
>> 
>> # \dAp+ hash array_ops
>>                            List of operator family procedures
>>   AM  | Family schema | Family name |   Left   |  Right   | Number
>> |      Proc name
>> ------+---------------+-------------+----------+----------+--------+---
>> ------------------
>>  hash | pg_catalog    | array_ops   | anyarray | anyarray |      1 |
>> hash_array
>>  hash | pg_catalog    | array_ops   | anyarray | anyarray |      2 |
>> hash_array_extended
>> (2 rows)
>> 
>> It may be easier for the user to navigate in this list if the defining
>> feature in addition to the number is also the procedure name.
>> Even if it does not carry important information, it improves the
>> readability of the list. Maybe it makes sense to return field "Proc
>> name" to the main output?
> 
> "Number", "Proc name" doens't seem descriptive enough. It is
> mentioned as support function number in the documentation. The
> "Left" and "Right" are not necessarily parameter types of "Proc
> name". But I don't come up with better namings. It is a bit
> different thing, but "Left/Right arg type" is used elsewhere as
> parameter types.
> 
> How about "AM", "Operator family", "Left arg type", "Right arg
> type" and "Support function number", "Support function"? The
> second from the last is 23 characters long. It could be "Support
> number" instead.

I have no better idea how to improve naming so I used the names you
suggested.


> 
>> 0002-psql_add_index_info-v5.patch
>> 
> I'm fine with this, but fails for 9.4 and 9.5. Also \dicp fails.

Maybe I missed something, but it works well on 9.4 and 9.5 for me.

Regards,
Sergey Cherkashin.

Attachment

pgsql-hackers by date:

Previous
From: John Naylor
Date:
Subject: Re: [HACKERS] PATCH: multivariate histograms and MCV lists
Next
From: Tomas Vondra
Date:
Subject: Re: [HACKERS] PATCH: multivariate histograms and MCV lists