| From: | David Rowley <dgrowleyml(at)gmail(dot)com> | 
|---|---|
| To: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> | 
| Cc: | Rumpi Gravenstein <rgravens(at)gmail(dot)com>, PostgreSQL <pgsql-general(at)lists(dot)postgresql(dot)org> | 
| Subject: | Re: Partitioned Table Index Column Order | 
| Date: | 2021-06-23 23:53:29 | 
| Message-ID: | CAApHDvqFD0CrkLSBCVX2ZhG+iW1ehbA+dgsW2pbJ1UDLVeqpEw@mail.gmail.com | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-general | 
On Thu, 24 Jun 2021 at 10:55, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> wrote:
>
> On 2021-Jun-23, Rumpi Gravenstein wrote:
>
> > As a best practice is it better to create the primary key starting or
> > ending with the partition column?
>
> It is not relevant from the partitioning point of view.  Other factors
> can be used to decide the column order.
I'm not so sure that's really 100% true.  There is at least one
partitioning feature that will work when the partitioning column is
first and won't when it's not.
Ordered partition scans work with RANGE and LIST partitioning:
create table ab (a int, b int, primary key(a,b)) partition by range(a);
create table ab1 partition of ab for values from (0) to (10);
create table ab2 partition of ab for values from (10) to (20);
explain (costs off) select * from ab order by a;
                    QUERY PLAN
--------------------------------------------------
 Append
   ->  Index Only Scan using ab1_pkey on ab1 ab_1
   ->  Index Only Scan using ab2_pkey on ab2 ab_2
Reverse the order and you get:
            QUERY PLAN
----------------------------------
 Sort
   Sort Key: ab.a
   ->  Append
         ->  Seq Scan on ab1 ab_1
         ->  Seq Scan on ab2 ab_2
David
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Tom Lane | 2021-06-23 23:56:54 | Re: Partitioned Table Index Column Order | 
| Previous Message | Tom Lane | 2021-06-23 23:39:16 | Re: Partitioned Table Index Column Order |