Re: Tab completion for ALTER INDEX|TABLE ALTER COLUMN SET STATISTICS - Mailing list pgsql-hackers

From Tatsuro Yamada
Subject Re: Tab completion for ALTER INDEX|TABLE ALTER COLUMN SET STATISTICS
Date
Msg-id a1812926-5452-712f-07b0-e347a8a33aca@lab.ntt.co.jp
Whole thread Raw
In response to Re: Tab completion for ALTER INDEX|TABLE ALTER COLUMN SETSTATISTICS  (Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp>)
Responses Re: Tab completion for ALTER INDEX|TABLE ALTER COLUMN SET STATISTICS
List pgsql-hackers
> At Wed, 28 Nov 2018 14:41:40 +0900, Tatsuro Yamada <yamada.tatsuro@lab.ntt.co.jp> wrote in <54bd214b-d0d3-8654->>>>
>>>> * tab_completion_alter_index_set_statistics.patch
>>>> =======
>>>> There are two problems. You can use these DDL before testing.
>>>>     #create table hoge (a integer, b integer);
>>>>     #create index ind_hoge on hoge (a, (a + b), (a * b));
>>>>
>>>>     1) Can't get column names
>>>>
>>>>       # alter index ind_hoge alter column <tab!><tab!>... but can't
>>>>       # complete.
>>> Currently the only continueable rule to the rule is SET
>>> STATISTICS so we usually expect the number of an expression
>>> column there. Even though we actually name every expression
>>> column in an index, users hardly see the names. The names are in
>>> the index column number order in your example, but what if the
>>> name of the first column were 'foo'?
>>> =# alter index ind_hoge2 alter column
>>> expr   expr1  foo
>>> We could still *guess* what is expr or exrp1 but I don't think it
>>> helps much. (Note: foo is not usable in this context as it's a
>>> non-expression column.)
>>
>> Thanks for your comment.
>> We can get column name by using "\d index_name" like this:
>>
>> # \d ind_hoge
>>         Index "public.ind_hoge"
>>   Column |  Type   | Key? | Definition
>> --------+---------+------+------------
>>   a      | integer | yes  | a
>>   expr   | integer | yes  | (a + b)
>>   expr1  | integer | yes  | (a * b)
>> btree, for table "public.hoge"
>>
>> So, I suppose that it's easy to understand what column is an
>> expression column.
> 
> Yeah, actually we can find them there, but I don't think it's
> popular. I suppose that most of people are unconcious of the
> names since they didn't named them.  Moreover what makes me
> uneasy with this is that it doesn't suggest attribute numbers,
> which are firstly expected there. But anyway it is impossible
> with readline since suggestions are sorted as strings. ("1",
> "11", "12", "2" order, I don't think indexes often have that many
> columns, though.)

Okay, I understand.

  - For now, there is no column_number column on "\d index_name" result.
    So, if tab-completion suggested column_numbers, user can't match these easily.

  - Suggested column_name and column_number are sorted as a string by readline.
    These are an unnatural. But this is another topic on this thread.

    Example:
      # alter index ind_hoge alter column <tab!>
      c       expr    expr1   expr10  expr11  expr2   expr3   expr4   expr5   expr6   expr7   expr8   expr9


>> Of course, user will get syntax error if user chose "a" column like a
>> "foo" which is
>> non-expression column as you mentioned.
>> Probably, I will be able to fix the patch to get only expression
>> columns from the index.
>> Should I do that?
> 
> Nope. That's just too-much. We are already showing unusable
> suggestions in other places, for example, exiting tables for
> CREATE TABLE. (It is useful for me as it suggests what should be
> placed there.)

I see.


>> I prefer to use column name instead column number because
>> there is no column number on \d index_name and \d+ index_name.
> 
> Some people prefer names even if they are implicitly
> given. Others (including myself) prefer numbers.

So, we should better to vote to decide implementation of the tab-completion.

Which is better to use either column_names or column_numbers?
I'd like to hear opinions from others. :)





>>>>     2) I expected column names for column numbers after "SET STATISTICS",
>>>>     but
>>>>        tab-completion gave schema names
>>>>
>>>>       # alter index ind_hoge alter column expr SET STATISTICS <tab!>
>>>>       information_schema.  pg_catalog.  pg_temp_1.  pg_toast.
>>>>       pg_toast_temp_1.  public.
>>> This is the result of STATISTICS <things> completion. SET
>>> STATISTICS always doesn't take statistics name so this is safe.
>>
>> :)
> 
> So I think it is reasonable.

Thanks.


Regards,
Tatsuro Yamada




pgsql-hackers by date:

Previous
From: Peter Geoghegan
Date:
Subject: Re: Making all nbtree entries unique by having heap TIDs participatein comparisons
Next
From: Michael Paquier
Date:
Subject: Re: [Todo item] Add entry creation timestamp column topg_stat_replication