hi.
the following reviews based on
v10-0001-Introduce-the-ability-to-set-index-visibility-us.patch.

in src/test/regress/sql/create_index.sql
seems there are no sql tests for "create index ... invisible"?


   <varlistentry>
    <term><literal>VISIBLE</literal></term>
    <listitem>
     <para>
      Make the specified index visible. The index will be used for queries.
     </para>
    </listitem>
   </varlistentry>
here it should be
"Make the specified index visible. The index can be used for query planning"
?


Do we need to add GUC use_invisible_index to postgresql.conf.sample?


CREATE TABLE t(id INT PRIMARY KEY, data TEXT,num INT, vector INT[],
range INT4RANGE);
ALTER INDEX t_pkey INVISIBLE;
alter table t alter column id set data type bigint;
\d t

after ALTER TABLE SET DATA TYPE, the "visible" status should not change?
but here it changed.
you may check ATPostAlterTypeParse to make the "visible" status not change.



@@ -3449,6 +3451,7 @@ typedef struct IndexStmt
     bool        if_not_exists;    /* just do nothing if index already
exists? */
     bool        reset_default_tblspc;    /* reset default_tablespace prior to
                                          * executing */
+  bool        isvisible;        /* true if VISIBLE (default), false
if INVISIBLE */
 } IndexStmt;
the indentation level is not right?

+opt_index_visibility:
+            VISIBLE_P                      { $$ = true; }
+            | INVISIBLE_P                   { $$ = false; }
+            | /*EMPTY*/                     { $$ = true; }
+        ;
+
the indentation level seems also not right?

+    createFlags = INDEX_CREATE_SKIP_BUILD | INDEX_CREATE_CONCURRENT;
+    if (indexForm->indisvisible)
+            createFlags |= INDEX_CREATE_VISIBLE;
the indentation level seems also not right?


INVISIBLE, VISIBLE is not special words, in gram.y, you don't need
"VISIBLE_P", "INVISIBLE_P", you can just use "INVISIBLE", "VISIBLE"
?


\d t3
                  Table "public.t3"
 Column |   Type    | Collation | Nullable | Default
--------+-----------+-----------+----------+---------
 id     | integer   |           | not null |
 data   | text      |           |          |
 num    | integer   |           |          |
 vector | integer[] |           |          |
 range  | int4range |           |          |
 a      | box       |           |          |
Indexes:
    "t3_pkey" PRIMARY KEY, btree (id) INVISIBLE
    "grect2ind" gist (a) INVISIBLE
    "t3_1" gist (a) INVISIBLE
    "t3_2" gin (vector) WITH (fastupdate='on',
gin_pending_list_limit='128') INVISIBLE
    "t3_4" spgist (data) INVISIBLE
    "t3_6" hash (id) INVISIBLE


pg_dump will dump as
--
-- Name: t3 t3_pkey; Type: CONSTRAINT; Schema: public; Owner: jian
--
ALTER TABLE ONLY public.t3
    ADD CONSTRAINT t3_pkey PRIMARY KEY (id);

after dump, restore index (primary key: t3_pkey) INVISIBLE will not be restored.
We need extra work for restoring the INVISIBLE flag for the primary key index.


I am not sure if we need to change index_concurrently_swap or not.
but many other pg_index columns changed.


Reply via email to