Re: [WIP]Vertical Clustered Index (columnar store extension) - take2
Peter Smith <smithpb2250@gmail.com>
From: Peter Smith <smithpb2250@gmail.com>
To: Japin Li <japinli@hotmail.com>
Cc: "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>,
Tomas Vondra <tomas@vondra.me>, "Aya Iwata (Fujitsu)" <iwata.aya@fujitsu.com>,
Timur Magomedov <t.magomedov@postgrespro.ru>, shveta malik <shveta.malik@gmail.com>
Date: 2025-08-14T02:04:12Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Mark ItemPointer arguments as const throughout
- e1ac846f3d28 19 (unreleased) cited
-
Reorganize GUC structs
- a13833c35f9e 19 (unreleased) cited
-
Eliminate XLOG_HEAP2_VISIBLE from vacuum phase III
- add323da40a6 19 (unreleased) cited
-
Update various forward declarations to use typedef
- d4d1fc527bdb 19 (unreleased) cited
-
Pathify RHS unique-ification for semijoin planning
- 24225ad9aafc 19 (unreleased) cited
-
Revert "Don't lock partitions pruned by initial pruning"
- 1722d5eb05d8 18.0 cited
-
For inplace update, send nontransactional invalidations.
- 243e9b40f1b2 18.0 cited
-
Remove nearly-unused SizeOfIptrData macro.
- 8023b5827fba 10.0 cited
On Fri, Aug 1, 2025 at 5:43 PM Japin Li <japinli@hotmail.com> wrote:
>
> On Fri, Aug 01, 2025 at 05:18:11PM +1000, Peter Smith wrote:
> > On Wed, Jul 30, 2025 at 9:07 PM Japin Li <japinli@hotmail.com> wrote:
> > >
> > ...
> > > 3.
> > > I've also found that the VCI index is not working. Is this the expected
> > > behavior?
> > >
> > > [local]:3209161 postgres=# \d+ t
> > > Table "public.t"
> > > Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
> > > --------+---------+-----------+----------+---------+----------+-------------+--------------+-------------
> > > id | integer | | | | plain | | |
> > > info | text | | | | extended | | |
> > > Indexes:
> > > "t_id_idx" vci (id)
> > > Access method: heap
> > >
> > > [local]:3209161 postgres=# SET enable_seqscan TO off;
> > > SET
> > > [local]:3209161 postgres=# EXPLAIN SELECT * FROM t WHERE id = 1000;
> > > QUERY PLAN
> > > -----------------------------------------------------
> > > Seq Scan on t (cost=0.00..2084.00 rows=1 width=37)
> > > Disabled: true
> > > Filter: (id = 1000)
> > > (3 rows)
> > >
> >
> > Hi Japin. Yes, that's expected behaviour.
> >
> > VCI is used only when the vci index is defined for all the columns of
> > your query. In your example there was a table with 2 columns ('id' and
> > 'info') but you only have an index on the 'id' column. If you change
> > the query then you can see VCI getting used.
> >
> > E.g.
> >
> > postgres=# EXPLAIN SELECT id FROM t WHERE id = 1000;
> > QUERY PLAN
> > ----------------------------------------------------------------------------
> > Custom Scan (VCI Scan) using tidx on t (cost=0.00..209.00 rows=1 width=4)
> > Filter: (id = 1000)
> > (2 rows)
> >
> > postgres=# EXPLAIN SELECT * FROM t WHERE id = 1000;
> > QUERY PLAN
> > ----------------------------------------------------
> > Seq Scan on t (cost=0.00..209.00 rows=1 width=37)
> > Filter: (id = 1000)
> > (2 rows)
> >
> > postgres=# EXPLAIN SELECT id,info FROM t WHERE id = 1000;
> > QUERY PLAN
> > ----------------------------------------------------
> > Seq Scan on t (cost=0.00..209.00 rows=1 width=37)
> > Filter: (id = 1000)
> > (2 rows)
> >
> > ~~~
> >
> > You can see this also in the DEBUG logs, from
> > vci_can_rewrite_custom_scan(), where it checks to see if the attrs are
> > in the vci index or not.
> >
> > e.g.
> > 2025-08-01 16:58:20.939 AEST [26528] DEBUG: vci index: target table
> > "t"(oid=16384) tuples(rows=10000,extents=0)
> > 2025-08-01 16:58:20.939 AEST [26528] DEBUG: vci index: don't match
> > index "tidx"(oid=16469)
> > 2025-08-01 16:58:20.940 AEST [26528] DEBUG: attrnum = 1 x
> > 2025-08-01 16:58:20.940 AEST [26528] DEBUG: attrnum = 2
> >
>
> Thanks for your explantion! Got it.
>
> Are there any plans to remove this restriction in the future?
>
No. There aren't any plans to remove this restriction because it is
not considered to be a "restriction" in the first place; e.g. VCI is
intended more like an accelerator only for those *specified* columns
for which you intend to do your analysis.
======
Kind Regards,
Peter Smith.
Fujitsu Australia