From: | Dominique Devienne <ddevienne(at)gmail(dot)com> |
---|---|
To: | pgsql-general(at)lists(dot)postgresql(dot)org |
Subject: | Cluster table based on grand parent? |
Date: | 2023-03-28 13:17:36 |
Message-ID: | CAFCRh-_MVYOEVoX9Y8neu_ZmSCvr6iFCSMQQxVW6veoPg-8g0w@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Hi again,
I just sent a question regarding parent/child and cascading FKs.
But in reality, our schema has not 2 but 3 "layers",
with an additional grandchild "leaf" table (see below).
Given that many acces patterns are parent-based, i.e. get all
child of given parent, or get all grandchild of given child, I can
use [CLUSTER][1] leveraging the natural-key (parent, name) constraint/index.
But for grandchild rows, doesn't mean the rows for a given (grand)parent
won't be fully clustered? Yes, our software often accesses rows in child
and grandchild
for a given parent row.
So can grandchild table(s) be "fully" clustered per-(grand)parent?
Would that require denormalizing, and adding an extra grandparent column FK
in grandchild, to achieve that?
And if that's the case, then there are two "paths" to CASCADE a delete from
parent; Would that be a problem? (w.r.t. performance or otherwise?)
Finally, does cluster affect associated toast tables too? (the doc doesn't
say)
Thanks for any insights. --DD
PS: At this point, I don't even know how much cluster affects performance.
But because it can affect the schema structure (by denormalizing), i'd
rather know early.
[1]: https://www.postgresql.org/docs/current/sql-cluster.html
```
dd=> create table parent (id int generated always as identity primary key,
name text not null unique);
CREATE TABLE
dd=> create table child (id int generated always as identity primary key,
parent int not null references parent(id) on delete cascade, name text not
null, unique(parent, name));
CREATE TABLE
dd=> create table grandchild (id int generated always as identity primary
key, parent int not null references child(id) on delete cascade, name text
not null, unique(parent, name));
CREATE TABLE
```
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2023-03-28 13:23:31 | Re: Plans for ON DELETE CASCADE? Which index is used, if at all? |
Previous Message | Dominique Devienne | 2023-03-28 12:45:57 | Plans for ON DELETE CASCADE? Which index is used, if at all? |