Re: Tab completion for ALTER INDEX|TABLE ALTER COLUMN SET STATISTICS

From: Tatsuro Yamada <yamada(dot)tatsuro(at)lab(dot)ntt(dot)co(dot)jp>
To: Kyotaro HORIGUCHI <horiguchi(dot)kyotaro(at)lab(dot)ntt(dot)co(dot)jp>
Cc: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: Tab completion for ALTER INDEX|TABLE ALTER COLUMN SET STATISTICS
Date: 2018-11-28 05:41:40
Message-ID: 54bd214b-d0d3-8654-e71f-45e7b4f979f0@lab.ntt.co.jp
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 2018/11/28 13:14, Kyotaro HORIGUCHI wrote:
> Hello.
>
> At Wed, 28 Nov 2018 11:27:23 +0900, Tatsuro Yamada <yamada(dot)tatsuro(at)lab(dot)ntt(dot)co(dot)jp> wrote in <d677594b-101a-6236-7774-94a7c1a7b56b(at)lab(dot)ntt(dot)co(dot)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(at)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

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2018-11-28 05:47:14 Re: "pg_ctl: the PID file ... is empty" at end of make check
Previous Message Thomas Munro 2018-11-28 05:31:10 Re: "pg_ctl: the PID file ... is empty" at end of make check