Search Postgresql Archives

Re: DELETE trigger, direct or indirect?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2/16/23 09:17, Dominique Devienne wrote:

    That is where I am headed, however it will need more information to
    determine whether that makes sense or not.


OK, I started writing SET NULL won't help, but I'll back up and try to give more info, as requested.
Pseudo SQL at this point.

create table entity (name text primary key, ...);
create table enity_list (name text primary key, ...);
create table entity_list_member(
  list_name text not null references entity_list(name) on delete cascade on update cascade,   entity_name text not null references entity(name) on delete cascade on update cascade
   primary key (list_name, entity_name)
);

Above is the current situation. When the entity is deleted, it's implicitly deleted from all list that mention it. Referential Integrity 101 I guess. But apparently, it's common enough for an entity to be deleted and reloaded, not necessarily in the same transaction, that losing the list(s) membership on delete is considered "a bug".

You have two tables with list in their name, so are rows deleted from both. Just to be clear enity_list should actually be entity_list?

Also how are entity and enity_list related?

One solution is to not do any reference integrity in the lists. But that opens the door to garbage in a little too wide I think.

So on second thought, maybe the SET NULL could be of use. I'd add a second non-FK column on the member assoc-table,

Are the values for the name field in entity and enity(entity)_list the same for a given entity?

transfering the old entity name to it thanks to an UPDATE on entity_name, thus preserving the old name.

How?
Again how would you determine where the action started?

Then an INSERT trigger on entity could locate any (indexed) "stashed" entity names in that extra non-FK column in entity_list_member,

How would it locate it if the name that defined the FK(entity(name)) was NULL?

to retransfer the name back to the primary FK column.
I'd need to adjust the PK to a coalesce(), and ensure the two columns are mutually exclusive.
Sounds like that might work, no?


--
Adrian Klaver
adrian.klaver@xxxxxxxxxxx






[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux