Yes, this is what I have done.
But the whole point of declaring the foreign key constraint on the
partitioned table is to have it automatically created on subsequent/future
partitions.

On Wed, Dec 4, 2024 at 6:20 PM Laurenz Albe <laurenz.a...@cybertec.at>
wrote:

> On Wed, 2024-12-04 at 14:22 +0100, Bolaji Wahab wrote:
> > I have these two partitioned tables, with referential integrity. The
> tables
> > are structured in such a way that we have 1 to 1 mapping between their
> > partitions. This is achieved with a foreign key.
> >
> > CREATE TABLE parent (
> >     partition_date date NOT NULL,
> >     id uuid NOT NULL,
> >     external_transaction_id uuid NOT NULL,
> >
> >     CONSTRAINT parent_pkey
> >         PRIMARY KEY (id, partition_date),
> >
> >     CONSTRAINT parent_external_transaction_id_key
> >         UNIQUE (external_transaction_id, partition_date)
> > ) PARTITION BY RANGE (partition_date);
> >
> > CREATE TABLE parent_2024_12_01
> >     PARTITION OF public.parent
> >     FOR VALUES FROM ('2024-12-01') TO ('2024-12-02');
> >
> > CREATE TABLE parent_2024_12_02
> >     PARTITION OF public.parent
> >     FOR VALUES FROM ('2024-12-02') TO ('2024-12-03');
> >
> > [...]
> >
> > CREATE TABLE child (
> >     partition_date date NOT NULL,
> >     transaction_id uuid NOT NULL,
> >     key            text NOT NULL,
> >     value          text NOT NULL,
> >
> >     CONSTRAINT child_pkey
> >         PRIMARY KEY (transaction_id, key, partition_date),
> >
> >     CONSTRAINT child_transaction_id_fkey
> >         FOREIGN KEY (transaction_id, partition_date)
> >         REFERENCES parent (id, partition_date)
> > ) PARTITION BY RANGE (partition_date);
> >
> > CREATE TABLE child_2024_12_01
> >     PARTITION OF child
> >     FOR VALUES FROM ('2024-12-01') TO ('2024-12-02');
> >
> > CREATE TABLE child_2024_12_02
> >     PARTITION OF public.child
> >     FOR VALUES FROM ('2024-12-02') TO ('2024-12-03');
>
> I recommend that you don't create the foreign key constraint between the
> partitioned tables, but between the individual partitions.
>
> That will make detaching and dropping partitions easier, and you will have
> the same integrity guarantees.
>
> Yours,
> Laurenz Albe
>

Reply via email to