Re: Native Foreign Keys housekeeping time intensive for Relational Model - Mailing list pgsql-admin

From Laurenz Albe
Subject Re: Native Foreign Keys housekeeping time intensive for Relational Model
Date
Msg-id fb45b9f1134ad17b944eb073ac8523f37f4199a9.camel@cybertec.at
Whole thread Raw
In response to Native Foreign Keys housekeeping time intensive for Relational Model  (Jacque Edmund <jacqueedmund@gmail.com>)
Responses Re: Native Foreign Keys housekeeping time intensive for Relational Model
List pgsql-admin
On Fri, 2021-03-26 at 14:00 -0400, Jacque Edmund wrote:
> I'm looking at a herculean project before me.   
> 
> I've already seen that my current set of FK relationships between < 100 tables and data footprint
>  has yielded very large lookup times for the underlying referential integrity of the FKs to vet
>  whether it can DELETE a row or not based on its FK relationships.  That same underlying vetting
>  is performing a lot of "SELECT 1" statements across the related tables and its squeezing timelines.  
> 
> I have indexes on all the requisite columns participating in FKs.  I don't think theres another
>  way of speeding up lots of row DELETEs from the  particular way I have the relationship implemented
>  and I'm denying myself the "set session_replication_role = 'replica'" method so that I can be fully
>  operational without the postgres userid (aka portable to cloud environments).
> 
> Correction.   Actually, I'm thinking I can take out the system implementation of FK's and use
>  constraint triggers instead.  That way I'd get to relax the triggers and gut the vetting that,
>  with my wield relationships and data, is time intensive.
> 
> Maybe even keep postgres as the owner of the constraint triggers so they can't be hacked by app users.
> 
> I'm guessing that, while not often,  this approach happens to folks every now and then?

I think that is all wrong.  Foreign keys are a good thing, and the idea to get rid of them out
of performance considerations is usually premature "optimizazion" that does more ill than good.

It is not necessarily the right thing to index all columns that are pert of a foreign key,
for keys with several columns, you need a multi-column index.
You can use the query in this blog post [1] to look for missing indexes.

I would be surprised if correctly indexed foreign keys would slow deletes down so that
the performance becomes intolerable.

Yours,
Laurenz Albe
-- 
Cybertec | https://www.cybertec-postgresql.com

  [1]: https://www.cybertec-postgresql.com/en/index-your-foreign-key/





pgsql-admin by date:

Previous
From: Laurenz Albe
Date:
Subject: Re: Password encryption in oracle_fdw extention
Next
From: Mukesh Rajpurohit
Date:
Subject: Re: Password encryption in oracle_fdw extention