Re: virtual generated column as partition key - Mailing list pgsql-hackers

From jian he
Subject Re: virtual generated column as partition key
Date
Msg-id CACJufxEV2dre3dti4+wRGEd-gDbWi0VFNG5qq0AB+Xj4n78PGQ@mail.gmail.com
Whole thread Raw
In response to virtual generated column as partition key  (jian he <jian.universality@gmail.com>)
List pgsql-hackers
hi.

rebased and refactored a lot.

In pg_partitioned_table.partattrs, value 0 indicates that the corresponding
partition key is an expression, non-0 means key is column reference.

For a virtual generated column, partattrs refers to the attribute number of the
virtual generated column, and the corresponding generation expression is stored
in partvirtualexprs. (see below demo).
Because of this, we need to double check all the occurrences of
RelationGetPartitionKey.

CREATE TABLE gtest_part_keyxx  (f2 bigint, f3 bigint GENERATED ALWAYS
AS (f2 * 2) VIRTUAL) PARTITION BY RANGE (f3, f3, f2, f3, (f2+1));
SELECT pg_get_partkeydef('gtest_part_keyxx'::regclass);
         pg_get_partkeydef
------------------------------------
 RANGE (f3, f3, f2, f3, ((f2 + 1)))
(1 row)

SELECT partrelid::regclass, partnatts, partattrs FROM
pg_partitioned_table WHERE partrelid = ('gtest_part_keyxx'::regclass);
    partrelid     | partnatts | partattrs
------------------+-----------+-----------
 gtest_part_keyxx |         5 | 2 2 1 2 0
(1 row)

Attachment

pgsql-hackers by date:

Previous
From: Peter Smith
Date:
Subject: Re: Skipping schema changes in publication
Next
From: Anthonin Bonnefoy
Date:
Subject: Re: [PATCH] jit: fix build with LLVM-21