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 54bd214b-d0d3-8654-e71f-45e7b4f979f0@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 SETSTATISTICS
List pgsql-hackers
On 2018/11/28 13:14, Kyotaro HORIGUCHI wrote:
> Hello.
> 
> At Wed, 28 Nov 2018 11:27:23 +0900, Tatsuro Yamada <yamada.tatsuro@lab.ntt.co.jp> wrote in
<d677594b-101a-6236-7774-94a7c1a7b56b@lab.ntt.co.jp>
>> Hi,
>>
>> On 2018/11/26 11:05, Tatsuro Yamada wrote:
>> I couldn't write patches details on previous email, so I write
>> more explanation for that on this email.
>>
>>
>> * 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.
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?


Other example, if user wants to use column number, I suppose that user have to check a
definition of index and count the number of columns.

====
# create table hoge2(a integer, b integer, foo integer);
CREATE TABLE

# create index ind_hoge2 on hoge2((a+b), foo, (a*b));
CREATE INDEX
[local] postgres@postgres:9912=# \d ind_hoge2
        Index "public.ind_hoge2"
  Column |  Type   | Key? | Definition
--------+---------+------+------------
  expr   | integer | yes  | (a + b)
  foo    | integer | yes  | foo
  expr1  | integer | yes  | (a * b)
btree, for table "public.hoge2"

# alter index ind_hoge2 alter column 1 set statistics 1;
ALTER INDEX

# alter index ind_hoge2 alter column 2 set statistics 1;
ERROR:  cannot alter statistics on non-expression column "foo" of index "ind_hoge2"

# alter index ind_hoge2 alter column 3 set statistics 1;
ALTER INDEX
====

I prefer to use column name instead column number because
there is no column number on \d index_name and \d+ index_name.



>>    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.

:)


Thanks,
Tatsuro Yamada
NTT Open Source Software Center





pgsql-hackers by date:

Previous
From: Thomas Munro
Date:
Subject: Re: "pg_ctl: the PID file ... is empty" at end of make check
Next
From: Tom Lane
Date:
Subject: Re: "pg_ctl: the PID file ... is empty" at end of make check